Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menu dinamis php bootstrap mysql

Kode Anda hanya akan menghasilkan dua menu level, jika Anda perlu melalui level apa pun yang Anda inginkan, saya pikir Anda perlu menggunakan rekursi.

Berikut adalah contoh berdasarkan struktur dan sampel database Anda. Dalam contoh kita akan menghasilkan menu di tingkat yang berbeda, label bahasa Inggris digunakan untuk nama item 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>

Untuk menggambar semua level:

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

drawMenu fungsinya sebagai berikut:

  • Pertama kita melewati $db objek untuk membuat kueri basis data, $parent bahwa pohon akan dimulai dengan dan $level untuk tingkat pohon.
  • Fungsi akan dimulai dengan memilih anak dari $parent . yang diberikan dan masuki loop untuk masing-masing foreach ($m->fetchAll() as $menu_row) {...} .
  • Dalam loop kita memiliki dua kasus:

    1. Item adalah daun yaitu bukan induk untuk item lain, atau kita mencapai level akhir pohon. Kasus ini disebut Kasus dasar , di mana rekursi akan berhenti dan mengembalikan nilai echo "<li>" . $menu_row['label'] . "</li>";

    2. Item tersebut adalah parent, dalam hal ini kita sebut drawMenu berfungsi lagi dengan id item $menu_row[0] sebagai induk dan $level - 1 untuk memastikan berhenti saat mencapai akhir level.

Uji kode dan ubah agar sesuai dengan kebutuhan Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mencekik atau memprioritaskan kueri di MySql

  2. Menggunakan klausa MySQL IN sebagai semua inklusif (DAN bukannya OR)

  3. Tutorial MySQL :Pernyataan MySQL IN (Lanjutan)

  4. Silakan instal adaptor mysql 'gem install activerecord-mysql-adapter'

  5. Bagaimana cara melakukan MySQL + Substring? + ganti?