Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

गतिशील मेनू php बूटस्ट्रैप mysql

आपका कोड केवल दो स्तरीय मेनू उत्पन्न करेगा, यदि आपको अपने इच्छित किसी भी स्तर से गुजरना है, तो मुझे लगता है कि आपको रिकर्सन का उपयोग करने की आवश्यकता है।

यहां आपके डेटाबेस संरचना और नमूनों के आधार पर एक उदाहरण दिया गया है। उदाहरण में हम विभिन्न स्तरों में एक मेनू तैयार करेंगे, मेनू आइटम नामों के लिए अंग्रेजी लेबल का उपयोग किया जाता है।

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

सभी स्तरों को आकर्षित करने के लिए:

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

drawMenu फ़ंक्शन निम्न के रूप में कार्य करता है:

  • सबसे पहले हम एक $db पास करते हैं डेटाबेस क्वेरी करने के लिए आपत्ति, $parent कि पेड़ के साथ शुरू होगा और $level पेड़ के स्तर के लिए।
  • फ़ंक्शन दिए गए $parent . के बच्चे को चुनकर शुरू होगा और प्रत्येक के लिए लूप में जाएं foreach ($m->fetchAll() as $menu_row) {...}
  • लूप में हमारे पास दो मामले हैं:

    1. आइटम एक पत्ता है यानी अन्य वस्तुओं के लिए माता-पिता नहीं है, या हम पेड़ के अंतिम स्तर तक पहुंच जाते हैं। इस केस को बेस केस . कहा जाता है , जिसमें रिकर्सन रुक जाएगा और एक मान लौटाएगा echo "<li>" . $menu_row['label'] . "</li>";

    2. आइटम एक अभिभावक है, इस मामले में हम drawMenu . कहते हैं आइटम आईडी के साथ फिर से कार्य करें $menu_row[0] एक अभिभावक और $level - 1 . के रूप में स्तरों के अंत तक पहुँचने पर रुकना सुनिश्चित करने के लिए।

कोड का परीक्षण करें और अपनी आवश्यकताओं के अनुसार इसे बदलें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SEQUELIZE (नोडजेएस) में एक ट्रिगर कैसे बनाएं?

  2. विंडोज़ पर यह pdo::mysql कोड क्रैश क्यों होता है?

  3. पीडीओ बाइंड पैराम्स इस पर निर्भर करता है कि वे क्वेरी में मौजूद हैं या नहीं

  4. Php . में ड्रॉपडाउन चयन के आधार पर गतिशील रूप से टेक्स्ट फ़ील्ड में सामग्री कैसे प्राप्त करें

  5. क्या SQL सर्वर MySQL के ON DUPLICATE KEY UPDATE की तरह कुछ भी ऑफर करता है?