2009-03-05 12 views
9

मैं डेटाबेस से चलाए जाने वाले प्रत्येक पृष्ठ पर एक मेनू प्रदर्शित करना चाहता हूं। बस नीचे और गंदे PHP का उपयोग करना आसान है लेकिन मैं इसे अपने एमवीसी सिस्टम का उपयोग करके केकफ़्पी के साथ एकीकृत करना चाहता हूं। अब मेरा सवाल यह है कि इस बारे में जाने का सबसे अच्छा तरीका कैसा है?केकेपीएचपी में गतिशील डेटाबेस संचालित मेनू बनाने का सबसे अच्छा तरीका क्या है?

मेरे विचार लेआउट और फिर एक घटक या सभी तर्क के लिए नियंत्रक के साथ एक तत्व बनाने के लिए कर रहे हैं। इस पर कोई सुझाव? या एक सहायक है जो मैं उपयोग करना चाहता हूं?

मुझे डेटाबेस में एकाधिक तालिकाओं से सभी डेटा भी प्राप्त करने की आवश्यकता है। क्या मेरे मॉडल को एक मॉडल के माध्यम से तर्क इकट्ठा करना सबसे अच्छा है? या मेनू नियंत्रक (या घटक) में से अधिकांश करते हैं और प्रत्येक तालिका के लिए मॉडल का उपयोग करते हैं?

धन्यवाद,

वाल्टर

उत्तर

7

मॉडल लाने चाहिए और मेज से प्रक्रिया डेटा वे modelising कर रहे हैं कि, ताकि मॉडल में एक मॉडल के लिए मेनू डेटा लाने।

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

एक मेनू आमतौर पर एक नेस्टेड सूची है, यदि यह आपके मेनू के मामले में भी है, तो इसके लिए मार्कअप आउटपुट करने का सबसे आसान तरीका एक पुनरावर्ती फ़ंक्शन (एक फ़ंक्शन जो स्वयं को कॉल करता है) जो एक समय में एक स्तर को आउटपुट करता है, इसलिए तत्व के बजाए, मैं वहां एक मेनू() विधि के साथ एक सहायक बनाउंगा, और सीधे लेआउट से कॉल करूंगा।

4

मैं neilcrooks जवाब से सहमत हैं, लेकिन स्पष्टता के लिए कुछ चीजें जोड़ना चाहते हैं।

सहायकों और तत्वों बहुत सरल कर रहे हैं, सिवाय इसके कि सहायकों एक छोटे से अधिक मजबूत किया जा सकता है (कम से कम, कि कैसे मैं उन्हें के बारे में सोच है,))। इसलिए, यदि आप एक सहायक का उपयोग करते हैं, तो आप फ्लाई पर मॉडल एसोसिएशन को बाध्य और बाध्य कर सकते हैं - जिससे आप अपने (अस्थायी रूप से) जुड़े मॉडल से डेटा ले सकेंगे।

व्यक्तिगत रूप से, मैं वसा मॉडल और पतला नियंत्रकों की तरह है, इसलिए मुझे लगता है कि अगर मैं इस स्थिति में थे, मैं एक सहायक का उपयोग करें और अस्थायी रूप से इसे करने के लिए मॉडल के लिए बाध्य होगा। मौजूदा मॉडलों से प्राप्त करने के लिए मुझे जो भी डेटा चाहिए, उसे मॉडल 1-> fetchMenuPart (...) टाइप कॉल के माध्यम से एक्सेस किया जाएगा।

फिर आप अपने सहायक फ़ाइल को अपनी लेआउट फ़ाइल से कॉल कर सकते हैं।

0

मुझे लगता है कि आप एक तत्व है कि मेनू के लिए एचटीएमएल पकड़ है और फिर अपने लेआउट में मेनू प्रस्तुत करना बनाने का प्रयोग करेंगे।

echo $this->element('your menu'); 

इसे गतिशील बनाने के लिए आप मेनू लिंक सेट कर सकते हैं, शायद नियंत्रक में एक सरणी के रूप में।

1

मुझे नहीं पता कि यह कहीं भी दस्तावेज क्यों नहीं है, लेकिन मुझे यह कल रात मिली। आपके लेआउट या तत्वों के चर को अंतिम _for_layout के साथ परिभाषित किया जाना चाहिए। उदाहरण के लिए: $ this-> सेट करें ('श्रेणियां_for_layout', $ यह-> श्रेणी-> ढूंढें ('सभी'));

मैं AppController कक्षा में beforeFilter विधि का इस्तेमाल किया है, क्योंकि मैं हर पृष्ठ में उस मेनू की जरूरत है।

0

मैं एक अच्छा लेख यहां पाया है http://www.milestree.com/webdev/cakephp/dynamic_menu

+0

आपका लिंक 404 ... – T0xicCode

+0

हाँ, इस लिंक अपडेट करने या निकालने चाहिए। – benjamin

+1

सही एक है [यहां] (http://www.milestree.com/php/cakephp- क्रिएटिंग- गतिशील-मेनस) –

संबंधित मुद्दे