Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dynamiczne menu php bootstrap mysql

Twój kod wygeneruje tylko dwupoziomowe menu, jeśli chcesz przejść przez dowolny poziom, myślę, że musisz użyć rekurencji.

Oto przykład oparty na strukturze Twojej bazy danych i próbkach. W tym przykładzie wygenerujemy menu na różnych poziomach, angielskie etykiety są używane do nazw pozycji menu.

<?php
$db = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');



function drawMenu($db, $parent, $level = null){
    $m = $db->prepare(" SELECT * FROM 
                        administrator_menu, administrator_menu_description
                        where administrator_menu.id = administrator_menu_description.id
                        and language_id = 2
                        and parent_id = $parent");
    $m->execute();


    foreach ($m->fetchAll() as $menu_row) {
        $m = $db->prepare("SELECT count(*) FROM administrator_menu where parent_id = $menu_row[id]");
        $m->execute();
        // The item is parent, so do recursion again
        if($m->fetchAll()[0][0] !== '0' && $level !== 0){ 
            echo "<li>" . $menu_row['label']."<ul>";
            drawMenu($db, $menu_row[0], $level - 1);
            echo "</ul></li>";
        }else{ // The item is a leaf or we reach the end level, i.e. base case, so do print the item label 
            echo "<li>" . $menu_row['label'] . "</li>";
        }

    }

}
?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<?php
echo "<div> <ul>";
drawMenu($db, 0, null); // all levels
echo "</ul></div>";
echo "--------------------------------------------------------";
echo "<div> <ul>";
drawMenu($db, 0, 0); // level 0
echo "</ul></div>";
echo "--------------------------------------------------------";
echo "<div> <ul>";
drawMenu($db, 0, 1); // level 1
echo "</ul></div>";
echo "--------------------------------------------------------";
echo "<div> <ul>";
drawMenu($db, 0, 2); // level 2
echo "</ul></div>";
?>
</body>
</html>

Aby narysować wszystkie poziomy:

echo "<div> <ul>";
drawMenu($db, 0, null); // all levels
echo "</ul></div>";

drawMenu funkcja działa w następujący sposób:

  • Najpierw przekazujemy $db obiekt do tworzenia zapytań do bazy danych, $parent że drzewo zacznie się od i $level dla poziomu drzewa.
  • Funkcja uruchomi się po wybraniu potomka danego $parent i przejdź w pętli dla każdego foreach ($m->fetchAll() as $menu_row) {...} .
  • W pętli mamy dwa przypadki:

    1. Element jest liściem, czyli nie jest rodzicem dla innych elementów, albo dochodzimy do ostatniego poziomu drzewa. Ten przypadek nazywa się przypadek podstawowy , w którym rekursja zatrzyma się i zwróci wartość echo "<li>" . $menu_row['label'] . "</li>";

    2. Element jest rodzicem, w tym przypadku wywołujemy drawMenu funkcja ponownie z identyfikatorem elementu $menu_row[0] jako rodzic i $level - 1 aby upewnić się, że zatrzymasz się po osiągnięciu końca poziomów.

Przetestuj kod i dostosuj go do swoich potrzeb.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rejestracja użytkowników mysql liczy się między grupami

  2. Jak zainstalować i używać MySQLdb dla Pythona 3 w systemie Windows 10?

  3. jak zwrócić mysql select jako tablicę tablic w json za pomocą php

  4. Jak tworzyć i manipulować bazami danych SQL za pomocą Pythona

  5. Konfiguracja sonaru z MySql