Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Menu động php bootstrap mysql

Mã của bạn sẽ chỉ tạo menu hai cấp, nếu bạn cần phải đi qua bất kỳ cấp nào bạn muốn, tôi nghĩ rằng bạn cần sử dụng đệ quy.

Đây là một ví dụ dựa trên cấu trúc cơ sở dữ liệu và các mẫu của bạn. Trong ví dụ này, chúng tôi sẽ tạo một menu ở các cấp độ khác nhau, các nhãn tiếng Anh được sử dụng cho tên các mục 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>

Để vẽ tất cả các cấp:

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

drawMenu chức năng hoạt động như sau:

  • Đầu tiên, chúng tôi chuyển một $db đối tượng để thực hiện các truy vấn cơ sở dữ liệu, $parent mà cây sẽ bắt đầu bằng và $level đối với cấp độ của cây.
  • Hàm sẽ bắt đầu bằng cách chọn con của $parent đã cho và lặp lại từng cái một foreach ($m->fetchAll() as $menu_row) {...} .
  • Trong vòng lặp, chúng ta có hai trường hợp:

    1. Vật phẩm là một chiếc lá, tức là không phải là cha mẹ của các vật phẩm khác, hoặc chúng ta đạt đến cấp độ cuối cùng của cây. Trường hợp này được gọi là Trường hợp cơ sở , trong đó phép đệ quy sẽ dừng lại và trả về một giá trị echo "<li>" . $menu_row['label'] . "</li>";

    2. Mục là cha, trong trường hợp này chúng tôi gọi là drawMenu hoạt động lại với id mục $menu_row[0] với tư cách là cha mẹ và $level - 1 để đảm bảo dừng lại khi đạt đến cuối các cấp.

Kiểm tra mã và thay đổi mã để phù hợp với nhu cầu của bạn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bí danh để hiển thị bảng Kết quả MySQL

  2. Lỗi khi cài đặt đá quý mysql2 qua Bundler

  3. Truy vấn FULLTEXT với điểm / xếp hạng trong Postgresql

  4. làm thế nào để triển khai tìm kiếm cho 2 dữ liệu bảng khác nhau?

  5. Đổi tên outfile với ngày tháng trong mysql