php.de

Zurück   php.de > Webentwicklung > HTML, Usability und Barrierefreiheit

HTML, Usability und Barrierefreiheit Themen rund um Textauszeichnung, Formatierung, Barrierefreiheit und Usability.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.01.2010, 12:34  
Benutzer
 
Registriert seit: 27.01.2010
Beiträge: 52
PHP-Kenntnisse:
Anfänger
Lucifer befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Baummenu

Habe schon bei gegoogelt und gebingt auf der Suche nach einen Ordentlichen
gut erklärten Tutorial für ein solches Treemenu

auch hier habe ich gesucht aber nicht wirklich fündig geworden

Das menu wird aus einer Datenbank Tabelle gelesen folgend aufgebaut

Code:
CREATE TABLE IF NOT EXISTS `system_menu` (
  `ID` int(20) NOT NULL AUTO_INCREMENT,
  `Bezeichnung` varchar(20) NOT NULL,
  `Verweis` varchar(125) NOT NULL,
  `Transaktion` varchar(5) NOT NULL,
  `Vater` int(20) NOT NULL,
  `Target` varchar(20) NOT NULL,
  `Level` int(1) NOT NULL,
  `Position` int(5) NOT NULL,
  `Beschreibung` mediumtext NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
So sieht der Code zum anzeigen aus

PHP-Code:
<?PHP
SESSION_START
();
REQUIRE_ONCE (
'../bibliotheken/function.inc.php');
START('Menu');


$Connect=mysql_connect($_SESSION['Host'],$_SESSION['Name'],$_SESSION['Pass']);

$Level=$_SESSION['Level'];
        
$SQL="SELECT * FROM system_menu WHERE Vater = '0' AND Level<=$Level ORDER BY Position";
        
$Result=mysql_db_query($_SESSION['DB'],$SQL,$Connect);
        WHILE (
$ROW=MYSQL_FETCH_ARRAY($Result))
        {
            
$ID                =$ROW['ID'];
            
$Bezeichnung    =$ROW['Bezeichnung'];
            
$Link            =$ROW['Verweis'];
            
$Target            =$ROW['Target'];
            
$Beschreibung    =$ROW['Beschreibung'];
            IF (
$Link=="")
            {
                ECHO 
"<a>$Bezeichnung</a><br>";
            }
            ELSE
            {
            
?>
            <a href="<?PHP echo $Link ?>" target="<?PHP echo $Target ?>" onmouseover="Tip('<?PHP echo $Beschreibung ?>')" onmouseout="UnTip()"><?PHP echo $Bezeichnung ?></a><br>
            <?PHP
            
}
            
$Pos=1;
            
Untermenu('system_menu',$ID,$Connect,$_SESSION['DB'],$Pos,$_SESSION['Level']);
            
        }


?>
<p>
<p>

<a href=menu.php>Aktualisieren</a>

<?PHP
ENDE
();


FUNCTION 
Untermenu($Tabelle,$Vater,$Connect,$DB,$Pos,$Level)
{
        
$SQL="SELECT * FROM $Tabelle WHERE Vater = $Vater AND Level<=$Level ORDER BY Position";
        
$Result=mysql_db_query($DB,$SQL,$Connect);
        WHILE (
$ROW=MYSQL_FETCH_ARRAY($Result))
        {
            
$ID                =$ROW['ID'];
            
$Bezeichnung    =$ROW['Bezeichnung'];
            
$Link            =$ROW['Verweis'];
            
$Target            =$ROW['Target'];
            
$Beschreibung    =$ROW['Beschreibung'];
            for (
$I=0$I<$Pos;$I++)
            {
            
?>
                &nbsp
            <?PHP
            
}
            IF (
$Link=="")
            {
                ECHO 
"<a>$Bezeichnung</a><br>";
            }
            ELSE
            {
            
?>
            <a href="<?PHP echo $Link ?>" target="<?PHP echo $Target ?>" onmouseover="Tip('<?PHP echo $Beschreibung ?>')" onmouseout="UnTip()"><?PHP echo $Bezeichnung ?></a><br>
            <?PHP
            
}
            
Untermenu('system_menu',$ID,$Connect,$_SESSION['DB'],$Pos+1,$Level);
        }
}
?>
und so das ergebniss



nur mein Problem ist jetzt wie mache ich dies zum Aufklappen und zu Klappen
habe schon einen Gehirnwindungskrampf und hoffe einer von Euch kann mir
da jetzt weiterhelfen

Vielen Dank im Voraus

Peter
Miniaturansicht angehängter Grafiken
erledigt-baummenu-menu.jpg  
Lucifer ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.01.2010, 12:43  
Erfahrener Benutzer
 
Registriert seit: 10.01.2010
Beiträge: 276
PHP-Kenntnisse:
Fortgeschritten
ChrisvA befindet sich auf einem aufstrebenden Ast
Standard

Arbeite am Besten statt der &nbsp; mit Listen (<ul>) und Unterlisten. Das auf und zuklappen kannst du dann mittels JS sehr einfach über Css Eigenschaften realisieren.
ChrisvA ist offline   Mit Zitat antworten
Alt 27.01.2010, 12:44  
Neuer Benutzer
 
Benutzerbild von Haze
 
Registriert seit: 23.10.2009
Beiträge: 18
PHP-Kenntnisse:
Anfänger
Haze befindet sich auf einem aufstrebenden Ast
Standard

Hi Lucifer,

ich glaube nicht, dass das ein PHP Problem ist. Wenn du das Menü aufklappen möchtest, benötigst du Javaskript. Schaue im Netz mal nach:

Javaskript+Menü+aufklappen

Da wirst du bestimmt einiges finden.

Grüße,
Haze
Haze ist offline   Mit Zitat antworten
Alt 27.01.2010, 12:49  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.072
PHP-Kenntnisse:
Anfänger
litterauspirna befindet sich auf einem aufstrebenden Ast
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Haze Beitrag anzeigen
Hi Lucifer,

ich glaube nicht, dass das ein PHP Problem ist. Wenn du das Menü aufklappen möchtest, benötigst du Javaskript. Schaue im Netz mal nach:

Javaskript+Menü+aufklappen

Da wirst du bestimmt einiges finden.

Grüße,
Haze
Nein das kann er auch mit PHP umsetzen, was ist wenn jemand sein JS deaktiviert hat (ich weis sind nur wenige) dann funktioniert der ganze Spaß nicht mehr.

Google mal nach Rekursion oder Nested Sets oder auch Menu mit dem Pfadmodell.
Allgemein gibt es drei Möglichkeiten, das Parent Modell (Rekursion), Nested Sets (nicht ganz unkomliziert, ich komme damit gar icht klar), Pfadmodell.

Ich habe auch einen Code noch parat, wenn das nicht allein machen willst, dann gib bescheid und ich gebe dir den code. Anpassen etc musst dir das natürlich selber.

Mfg litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline   Mit Zitat antworten
Alt 27.01.2010, 16:15  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.247
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Zitat:
Nein das kann er auch mit PHP umsetzen, was ist wenn jemand sein JS deaktiviert hat (ich weis sind nur wenige) dann funktioniert der ganze Spaß nicht mehr.
Für einen Anfänger ist es sicher sinnvoller, die Problematik mit JS zu lösen und die Bäume default komplett offen zu haben und erst mit JS bei Aufruf zuzuklappen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 27.01.2010, 22:28  
Benutzer
 
Registriert seit: 27.01.2010
Beiträge: 52
PHP-Kenntnisse:
Anfänger
Lucifer befindet sich auf einem aufstrebenden Ast
Standard

@ChrisvA: habe die Leerzeichen nur im Moment drinnen wird mal
Ausgetauscht gegen Grafiken

@Hazeies funktioniert mit PHP und JS und CSS je einzenln oder miteinander
in Kombination die Frage ist nur wie genau

@litterauspirna: Nested Sets habe ich schon geschaut sind verschachtelte
Mengen nur deren Aufbau ist recht kompliziert wenn ich die meisten Aufbauten
richtig verstanden habe. Denn es muss zuerst Die Verzweigung eingegeben
werden und dann das was danach eingerückt kommt und dies alles
mit einer hinterherfolgenden ID wenn ein Eintrag danach kommt muss alles
neu geordnet werden. Irgendwo und nicht gerade gut erklärt.

Zitat:
Ich habe auch einen Code noch parat, wenn das nicht allein machen willst, dann gib bescheid und ich gebe dir den code. Anpassen etc musst dir das natürlich selber.
Wenn Du das mir Schicken kannst wäre sicher sehr hilfreich und Danke mal im
Voraus

Im Allgemeinen Danke ich mal für die Antworten

Mit JS stehe ich irgendwie auf Kriegsfuß habe da hauptsächlich
nur einige wenige Scripte die ich nach langen suchen gefunden habe
wie etwa einen Tootip oder einen Updown bzw Cowndown sowie einer Stopuhr


und mit CSS beginne ich gerade und suche zum teil noch gute Doku

so mich einmal zurück ziehe ins gut geplosterte runde Zimmer

mfg Peter
__________________
Manchmal aber nur Manchmal sehe ich den Wald vor lauter Bäumen nicht mehr
Lucifer ist offline   Mit Zitat antworten
Alt 29.03.2010, 12:27  
Neuer Benutzer
 
Registriert seit: 29.03.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
palatina befindet sich auf einem aufstrebenden Ast
Standard

Hm, habe grad ein ähnliches Problem.

Ich bin grad dabei, ein Menü zum Auf- und Zuklappen zu basteln.
gebe ich alles manuell in eine php-Datei ein und formatiere es per css und js. läuft auch alles super. Jetzt wollte ich dieses Menü aus einer Datenbank heraus erzeugen.

Meine Datenbank besteht aus 3 Spalten: bezeichnung, kategorie, hauptkategorie.

Die php-Datei funktioniert auch soweit.

Code:
<?php
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"formate.css\">";
echo "<script type=\"text/javascript\" src=\"switch.js\"></script>";


mysql_connect("host","nutzer","passwort" ) or die
    ("Keine Verbindung moeglich");
  mysql_select_db("datenbank") or die
    ("Die Datenbank existiert nicht.");

  
  $result = mysql_query("SELECT * FROM menue where kategorie<100");
  while($row = mysql_fetch_array($result)) 
  {
	echo "<div class=\"switch\">
		  <div class=\"menue\" id=\"masterdiv\">
		  <div class=\"menutitle\" onclick=\"SwitchMenu(\"sub".$row[kategorie]."\")\">";
	
	
	echo $row["bezeichnung"];
	echo "</div>";
	$unterkat = mysql_query("Select * From menue Where hauptkategorie=$row[kategorie]");
	echo "<span class=\"submenu\" id=\"sub".$row[kategorie]."\">";
	while($bez = mysql_fetch_array($unterkat)) 
  	{
		echo "<a href=\"\" class=\"mlink\">- ";
		echo $bez["bezeichnung"]."<br>";
		echo "</a>";
	}
	echo "</span>";
  }
?>
Soweit funzt die ganze Sache ja auch super.
Die Abfrage aus der Datenbank klappt, die Formatierung über css auch.
Ohne die switch.js wird mir auch alles angezeigt, was im Menü drin stehen sollte.
Sobald ich die js-Datei einbinde, werden mir allerdings nur noch die Hauptmenüpunkte angezeigt (was ja eigendlich auch ok ist), aber ein Auf- und Zuklappen ist nicht möglich.

Hab ich da jetzt einfach nur einen Denkfehler ? Wer kann mir da helfen ?
palatina ist offline   Mit Zitat antworten
Alt 29.03.2010, 13:55  
Neuer Benutzer
 
Registriert seit: 29.03.2010
Beiträge: 2
PHP-Kenntnisse:
Anfänger
palatina befindet sich auf einem aufstrebenden Ast
Standard

so ... habs jetzt selber hinbekommen ... war wirklich nen Denkfehler von mir ... oder wie auch immer man das bezeichnen mag ...

Die Zeile:
Code:
<div class=\"menutitle\" onclick=\"SwitchMenu(\"sub".$row[kategorie]."\")\">";
ist falsch.
Sie muss
Code:
<div class=\"menutitle\" onclick=\"SwitchMenu('sub".$row[kategorie]."')\">";
lauten. Hatte die falschen Hochkomma's im JavaScript-Aufruf drin, da wurde es von der switch.js nicht richtig verarbeitet.

Aber danke trotzdem an alle, die hier überhaupt mal überlegt haben, wie sie mir hätten helfen können ...
palatina ist offline   Mit Zitat antworten
Alt 30.03.2010, 16:27  
Benutzer
 
Registriert seit: 27.01.2010
Beiträge: 52
PHP-Kenntnisse:
Anfänger
Lucifer befindet sich auf einem aufstrebenden Ast
Standard

Meines schaut in etwa so aus

PHP-Code:
<?PHP
    SESSION_START
();
    
$link MYSQL_CONNECT($_SESSION['Host'],$_SESSION['Name'],$_SESSION['Pass']);
    
$wahl explode("|",$_GET['pos']); # aus meiner pos mache ich ein array wahl - wahl[1] hat inhalt 1
    
baum(0,"",$_SESSION['DB'],$_SESSION['Level']); # starte die Funktion, liste alles auf was als vater 0 hat

    
FUNCTION baum($vater,$lpos,$DB,$Level)
    {
        GLOBAL 
$link;  # Der Link zur DB durch global auch in der Funktion bekannt.
        
GLOBAL $wahl;  # hier sind als Array die ids drin die aufgeklappt sind (kommt aus der var pos)
        
STATIC $ebene=0;     # mit static erstelle ich eine Variable, die beim erneuten 
                            # Aufruf der Funktion den Wert aus der Vorgängerfunktion behält.
                            # Die ist wichtig für die Rekursion. Der Startwert ist 0 und der
                            # wird hochgezählt beim Neuaufruf. Wenn ich also im Menu bei Apfel bin,
                            # ist der Wert bei 1.
        
        
$SQL="SELECT * FROM `system_menu` WHERE `Vater` = '$vater' AND Level<=$Level ORDER BY Position";
        
$erg[$ebene] = MYSQL_DB_QUERY($DB,$SQL,$link);
        
$menge MYSQL_NUM_ROWS($erg[$ebene]);
        
# Das ist auch noch klar. Lese das aktuelle Menu aus der Datenbank aus und starte eine Schleife ... 
        
for ($lo=0;$lo<$menge;$lo++) 
        {
            
$row MYSQL_FETCH_ROW($erg[$ebene]);    # Den Menu Eintrag auslesen, in $row[1]
            
$Menu_ID=$row[0];
            
$SQL="SELECT * FROM system_menu WHERE Vater=$Menu_ID";
            
$Search_Result=MYSQL_DB_QUERY($DB,$SQL,$link);
            
$Menge=@MYSQL_NUM_ROWS($Search_Result);
            IF (
$Menge>0)
            {
                IF (
$row[2]=="")
                {
                    
$menu="<a href=menu.php?pos=".$lpos."|".$row[0]."><img src='../../grafik/plus+.PNG'></a><a> $row[1]</a><br>";
                }
                ELSE
                {
                    
$menu="<a href=menu.php?pos=".$lpos."|".$row[0]."><img src='../../grafik/plus+.PNG'></a><a href=$row[2] target=$row[5]> $row[1]</a><br>";
                }
            }
            ELSE
            {
                IF (
$Menge==AND $row[2]=="")
                {
                    
$menu="<a>&nbsp;&nbsp;$row[1]</a><br>";
                }
                ELSE
                {
                    
$menu "<a href=$row[2] target=$row[5]>->".$row[1]."</a><br>";
                }
            }
            if (
$ebene 0
            {    
# Hier rücke ich einfach nur ein, je tiefer ich im Menu(Rekursion)
                # bin, umso mehr Leerzeichen vorne dran
                
echo str_repeat("&nbsp;",$ebene);
            }
            echo 
$menu;
            if (
$row[0] == $wahl[$ebene+1]) 
            { 
# Hier folgt der Aufruf der Funktion (ab in die Rekursion)
                
$ebene++; # ein Level hoch
                
baum($row[0],$lpos."|$row[0]",$DB,$Level);
                
$ebene--; # und wieder ein Level runter
            
}
        }
    }
    
?>
Funktioniert recht gut eventuell noch anpassen und ohne Unnötigen Krempel
rein nur auf Funktion aufgebaut

lg Peter
__________________
Manchmal aber nur Manchmal sehe ich den Wald vor lauter Bäumen nicht mehr
Lucifer ist offline   Mit Zitat antworten
Alt 30.03.2010, 16:31  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.247
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Das ist aber ganz übel Lucifer, weil hier Datenbankabfragen in Schleifen und rekursiv ausgeführt werden. Das ist inperformant im Quadrat.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Baummenü mit PHP und X Ebenen BartTheDevil89 PHP Tipps 2008 2 17.04.2008 20:10

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/html-usability-und-barrierefreiheit/63840-erledigt-baummenu.html, pfadmodell datenbank, php baummenü, php sql baum, tree menu recursion datenbank, html baummenü aufklappen, php nested menu array level, rekursiv baum javascript, javascript menu aus datenbank, html baum aufklappen, php tree menu aus datenbank, menübaum mit java und php, javascript baummenü tutorial, php rekursion menu, baum menü, php rekursiv baum, java baummenü erstellen, javascript baummenü, php rekursives menü nur aktuelles aneigen, leerzeichen select list php

Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum