Verschachteltes Menu über Datenbank abfragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verschachteltes Menu über Datenbank abfragen

    Heyho Leute, wieder mal.
    Dieses mal hab ich das Problem das ich ein einfaches Verschachteltes Menu erstellen möchte: Dynamisch aus der Datenbank.

    Und zwar hab ich eine einfache HTML Struktur die automatisch umgewandelt wird (per Javascript) sofern folgender Syntax vorhanden ist.
    Das funktioniert auch sehr gut, statischer HTML Code: Keine Probleme.

    Quellcode

    1. <ul>
    2. <li> <a href="#"> Das ist der Haupt-Menu Button </a>
    3. <ul>
    4. <li> Ein Unter-Menu Button </li>
    5. <li> Noch einer ... </li>
    6. </ul>
    7. </li>
    8. </ul>


    Da ich das ganze Dynamisch haben will, erdachte ich mir eine einfache While Schleife mit Konditionen zum Auswahlverfahren. Zwecks der Abfrage ob hier ein Untermenu vorhanden ist, gibt es die _link tabelle des Menüs. Dabei wird lediglich festgelegt wer denn "parent".
    Leider wird das ganze nun nebeneinander oder garnicht angezeigt.

    Quellcode

    1. $sql = Baum::$_db->query('SELECT a.*, b.* FROM bmc_menu a LEFT JOIN bmc_menu_link b ON a.id = b.linkID WHERE a.perm = 0');
    2. while($row = Baum::$_db->fetchArray($sql)) {
    3. if(Baum::$_page->getPage() == strtolower($row['name'])) $firstActive = ' class="firstActive"';
    4. else $firstActive = "";
    5. if($row['parentID'] == 0) {
    6. echo '<li'.$firstActive.'><a href="'.$row['url'].'"><img src="./data/images/icon/'.$row['icon'].'" alt="" /> '.$row['name'].'</a>';
    7. echo "<ul>";
    8. } elseif($row['parentID'] != 0) {
    9. echo '<li><a href="'.$row['url'].'">'.$row['name'].'</a></li>';
    10. } else echo "\r\n</ul></li>";
    11. }
    Alles anzeigen


    Habt ihr eventuelle Ideen oder Lösungsmöglichkeiten parat?
  • Ich versteh grad deinen Code nicht ganz :/
    Diese Zeile:

    Quellcode

    1. if($row['parentID'] == 0) {

    fragt doch ab, ob ein Untermenü vorhanden ist oder?! Dann ist die 0 da aber falsch und muss durch die ID des Obermenüpunktes ersetzt werden. Außerdem kriegst du so Schwierigkeiten, falls die Menüpunkte in einer anderen Sortierung vorliegen, wenn mich meine Logik nicht ganz im Stich lässt^^

    Eine Fehlermeldung kriegst du nicht?
    Passt eigentlich dein HTML, denn dein else wird doch nie ausgeführt? Folglich zerlegts dir die Struktur?

    Quellcode

    1. if($row['parentID'] == 0) {
    2. } elseif($row['parentID'] != 0) {
    3. } else echo "\r\n</ul></li>";
  • Okay, ich bin mittlerweile etwas weiter...

    Ich hab mich für die Nutzung von Assoc und Foreach Schleifen entschieden.
    Nun hab ich folgendes Problem:
    Ich lasse automatisch in einem Array aus dem Assoc die parentID angeben und als Unterpunkt die ID des eigentlichen Menupunktes.

    Nun kommt die Meldung das mein Array keine 0 definiert hätte, was so nicht stimmt.
    Notice: Undefined offset: 0 in ... "PFAD"

    print_r gibt nämlich genau das gegenteil aus:

    Quellcode

    1. Array ( [0] => 7 )
    2. Array ( [0] => 8 )
    3. Array ( [8] => 9 )
    4. Array ( [8] => 10 )
    5. Array ( [8] => 11 )

    Mein PHP Code:

    Quellcode

    1. $query = 'SELECT id,
    2. IFNULL(parentID, 0) AS parent,
    3. name,
    4. perm
    5. FROM bmc_menu
    6. WHERE perm = 0
    7. ORDER BY parent ASC';
    8. $res = Baum::$_db->query($query);
    9. $data_link = array();
    10. while ($row = Baum::$_db->fetchAssoc($res)) {
    11. $data = "IRGENDWELCHE DATEN"
    12. $data_link = array($row['parent'] => $row['id']);
    13. }
    14. foreach($data_link[0] as $parentID => $linkID) {
    15. echo $data[$linkID];
    16. }
    Alles anzeigen


    Also... Warum sagt mir die Fehlermeldung das Array(0) nicht vorhanden ist, obwohl es tatsächlich doch vorhanden ist?