एक रिलेशनल डेटाबेस में पदानुक्रमित डेटा कुछ हद तक कष्टप्रद है (ओरेकल को छोड़कर, जिसमें ऑपरेटर हैं START WITH/CONNECT BY
इससे निपटने के लिए)। मूल रूप से दो मॉडल
हैं :आसन्न सूची और नेस्टेड सेट।
आपने आसन्नता सेट चुना है, जो कि मैं आमतौर पर भी करता हूं। नेस्टेड सेट मॉडल की तुलना में इसे बदलना कहीं अधिक आसान है, हालांकि नेस्टेड सेट मॉडल को एक ही क्वेरी में सही क्रम में पुनर्प्राप्त किया जा सकता है। निकटता सूचियाँ नहीं हो सकतीं। आपको एक मध्यवर्ती डेटा संरचना (पेड़) बनाने और फिर उसे एक सूची में बदलने की आवश्यकता होगी।
मैं क्या करूँगा (और वास्तव में हाल ही में किया है) है:
- पेरेंट आईडी द्वारा आदेशित एक क्वेरी में संपूर्ण मेनू सामग्री का चयन करें;
- सहयोगी सरणियों या कक्षाओं/वस्तुओं का उपयोग करके मेनू संरचना का एक ट्री बनाएं;
- नेस्टेड अनियंत्रित सूचियां बनाने के लिए उस पेड़ पर चलें; और
- एक jQuery प्लग-इन का उपयोग करें जैसे Superfish उस सूची को मेनू में बदलने के लिए।
आप कुछ इस तरह बनाते हैं:
$menu = array(
array(
'name' => 'Home',
'url' => '/home',
),
array(
'name' => 'Account',
'url' => '/account',
'children' => array(
'name' => 'Profile',
'url' => '/account/profile',
),
),
// etc
);
और इसे इसमें रूपांतरित करें:
<ul class="menu">;
<li><a href="/">Home</a></li>
<li><a href="/account">Account Services</a>
<ul>
<li><a href="/account/profile">Profile</a></li>
...
मेनू सरणी उत्पन्न करने के लिए PHP काफी सरल है लेकिन हल करने के लिए थोड़ा सा परिष्कृत है। आप एक पुनरावर्ती ट्री-वॉकिंग फ़ंक्शन का उपयोग करते हैं जो HTML नेस्टेड सूची मार्कअप बनाता है लेकिन इसे पाठक के लिए एक अभ्यास के रूप में लागू करना छोड़ देगा। :)पी>