Denkanstoß in sachen Submenu

Die einfachste Möglichkeit, die ich mir vorstellen kann, ist dass Du bei Deinem "Öffnen-Link" alle parentIDs mit übergibtst:
HTML:
 <a href="...?selectid=0,2,4,7">Menüpunkt 2.4.7</a>
Dann musst Du das für die DB-Abfrage vorbereiten:
PHP:
if (empty($selectid)) {
    $mysqlOpenTree="'0'";
    $selectid=0;
} else {
    $mysqlOpenTree=explode(',',$selectid);
    $selectid=$mysqlOpenTree[sizeof($mysqlOpenTree)-1];
    $mysqlOpenTree="'".implode("','",$mysqlOpenTree)."'";
}
Ich beziehe mich jetzt auf das zweite Codebeispiel von mir. Dazu musst Du noch $mysqlOpenTree, $selectid und eine weitere Variable ($upperNodes) übergeben:
PHP:
function menu(int parentID,string openTree, int selectID, string upperNodes) {
    //eintraegeMitDieserParentID ermitteln:
    $sql="SELECT .... WHERE parentID='".$parentID."' AND parentID IN (".$openTree.")";
    foreach (eintraegeMitDieserParentID as eintrag) {
        //eintrag ausgeben
        $linkDiesesEintrags=$upperNodes.",".$IDdiesesEintrags;
        //mit Vergleich von übergebener selectID und ID dieses Eintrags den Menüpunkt hervorheben
        if ($parentID!=$selectID) {
            menu(eintrag['ID'],$openTree,$selectID,$linkDiesesEintrags);
        }
    }
}
menu(0,$mysqlOpenTree,$selectid,'0')
Ich habe das jetzt hier im Editor getippt, das kann also 'ne Menge Fehler enthalten, aber das Prinzip sollte funktionieren.
 
Zuletzt bearbeitet:
Hi ,

mhhh ja so kann man es machen hatte ich auch schon in betracht gezogen , allerdings bin ich nicht so der PHP Kenner und steige noch nicht so ganz durch deinen Code durch.

Vor allem deine Datenbank abfrage ist für mich Neuland . Sorry ...

MfG Pullermann
 
Naja, statt der Punkte musst Du die Tabelle und Felder einfügen:

PHP:
$sql="SELECT * FROM menustrukturtabelle WHERE parentID='".$parentID."' AND parentID IN (".$openTree.")";
Du schlüsselwörter solltest Du kennen oder in einer MySQL Dokumentation nachschlagen können.
Deine Tabellenstrukur muss eine ID und eine parentID aufweisen.
Bei parentID schreibst Du die ID des übergeordneten Menüpunkts rein.
Der Operator IN ist im Prinzip eine Kurzform für oder:
Code:
WHERE parentID IN ('1','2','3')
ist das gleiche, wie
WHERE parentID='1' OR parentID='2' OR parentID='3'
Wenn weitere/andere Probleme bestehen, stelle Deine Frage bitte etwas konkreter, damit man darauf eingehen kann.

Die Kommentare in meinem Code sind als PseudoCode zu verstehn, den Du entsprechend Deiner DB-Struktur und Deiner gewünschten Ausgabe ersetzen musst, genauso, wie einige Variablennamen, die als Beschreibung für den Inhalt der Variablen herhalten.

Ich dachte mir, zum einen ist es lehrreicher, wenn Du den Code selbst erweitern musst und Dich dann zwangsläufig damit auseinandersetzt, zum anderen und das ist der Hauptgrund :p , ist es schwierig, hier im Editor ungetestet voll funktionierenden code zu schreiben.

Gruß hpvw
 
Zurück