sql >> Database >  >> RDS >> Mysql

Dynamisch menu php bootstrap mysql

Je code genereert alleen een menu met twee niveaus, als je elk gewenst niveau moet doorlopen, denk ik dat je recursie moet gebruiken.

Hier is een voorbeeld op basis van uw databasestructuur en voorbeelden. In het voorbeeld zullen we een menu in verschillende niveaus genereren, de Engelse labels worden gebruikt voor de namen van menu-items.

<?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>

Om alle niveaus te tekenen:

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

Het drawMenu functie werkt als volgt:

  • Eerst geven we een $db door object om databasequery's te maken, $parent waarmee de boom begint en $level voor het niveau van de boom.
  • De functie begint met het selecteren van het kind van de gegeven $parent en ga in een lus voor elke foreach ($m->fetchAll() as $menu_row) {...} .
  • In de lus hebben we twee gevallen:

    1. Het item is een blad, d.w.z. geen ouder voor andere items, of we bereiken het laatste niveau van de boom. Deze casus heet de Basiscase , waarin de recursie stopt en een waarde retourneert echo "<li>" . $menu_row['label'] . "</li>";

    2. Het item is een ouder, in dit geval noemen we het drawMenu functie opnieuw met de item-id $menu_row[0] als ouder en $level - 1 om ervoor te zorgen dat u stopt wanneer u het einde van de niveaus bereikt.

Test de code en pas deze aan uw behoeften aan.




  1. Scheidingsteken voor duizendtallen in SQL Server 2008 voor een kolom

  2. Hoe een .db-bestand bij een andere .apk-android te voegen

  3. SQL Server-prestatiebestand IO-statistieken

  4. PDO-zoekdatabase met LIKE