Mysql
 sql >> Database >  >> RDS >> Mysql

Menu dinamico php bootstrap mysql

Il tuo codice genererà solo menu a due livelli, se devi passare attraverso qualsiasi livello desideri, penso che tu debba usare la ricorsione.

Ecco un esempio basato sulla struttura del database e sui campioni. Nell'esempio genereremo un menu a diversi livelli, le etichette in inglese vengono utilizzate per i nomi delle voci di 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>

Per disegnare tutti i livelli:

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

Il drawMenu la funzione funziona come segue:

  • Prima passiamo un $db oggetto per effettuare query sul database, $parent che l'albero inizierà con e $level per il livello dell'albero.
  • La funzione inizierà selezionando il figlio del dato $parent e vai in loop per ciascuno foreach ($m->fetchAll() as $menu_row) {...} .
  • Nel ciclo abbiamo due casi:

    1. L'elemento è una foglia, cioè non un genitore per altri elementi, oppure si raggiunge il livello finale dell'albero. Questo caso è chiamato caso base , in cui la ricorsione si fermerà e restituirà un valore echo "<li>" . $menu_row['label'] . "</li>";

    2. L'elemento è un genitore, in questo caso chiamiamo drawMenu funzione di nuovo con l'elemento id $menu_row[0] come genitore e $level - 1 per assicurarti di fermarti quando raggiungi la fine dei livelli.

Testare il codice e modificarlo in base alle proprie esigenze.