2011-01-04 7 views
6

में ब्लॉक/मॉड्यूल बनाना अब तक मैं कुछ सरल वेब ऐप्स बनाने के लिए कोडइग्निटर का उपयोग कर आनंद ले रहा हूं (वास्तव में केवल ढांचे को सीखना), लेकिन मैं ब्लॉक/मॉड्यूल बनाने का एक आसान तरीका नहीं समझ सकता।कोड इग्निटर

मैं "हालिया छवियां" ब्लॉक रखना चाहता हूं जो कि मैं प्रत्येक पृष्ठ के नियंत्रक में क्वेरी को डुप्लिकेट किए बिना साइट पर किसी भी पेज पर छोड़ सकता हूं और इसे $ vars के साथ टेम्पलेट में भेज सकता हूं।

2 सवाल:

  1. मैं विचारों पहले से ही में आंशिक उपयोग कर रहा हूँ, लेकिन मैं एक आंशिक कि एक नियंत्रक एक यूआरएल द्वारा निर्दिष्ट के अलावा अन्य से खींचती है कैसे लिख सकता हूँ।
  2. मैं सफाई से एक नियंत्रक कि कि ब्लॉक और इसके लिए एक
    पेज का निर्माण नहीं करता के लिए डेटा खींचती बना सकते हैं कैसे।

ऐसा लगता है कि यह काफी आसान होना चाहिए, मुझे बस उचित समाधान खोजने के लिए कोई भाग्य नहीं है। अग्रिम में धन्यवाद।

उत्तर

7

ठीक है, यहां "विजेट", "मॉड्यूल", "आंशिक विचार" या जो भी आप उन्हें कॉल करना चाहते हैं, पर मेरा लेना है। किसी भी तरह से हम पृष्ठों के लिए पुन: प्रयोज्य वस्तुओं का मतलब है।

ऐसा करने के विभिन्न तरीकों का एक समूह है, इसलिए मेरा तरीका आपके लिए नहीं हो सकता है - फिर फिर यह वही हो सकता है जो आप खोज रहे हैं!

सबसे पहले, मैं विचारों के रूप में विगेट्स बनाने के लिए, मान लीजिए कि पथ जैसा होगा करते हैं: विचारों/विगेट्स/myview.php

मैं क्या विजेट मैं अपने नियंत्रक में इस्तेमाल की योजना बना रहा हूँ के निर्णय करते हैं।

$data['widgets'] = array('widgets/myview', 'widgets/myview2'); 

फिर जब मैं (मेरे नियंत्रक में अब भी) अपने मुख्य दृश्य लोड मैं यह कर:

$this->load->view('main_view', $data); 

अब मेरे विधि की तरह एक सरणी में देखा गया मैं चाहता हूँ करने के लिए पथ डाल करने के लिए है विजेट्स सरणी मुख्य दृश्य में पास की जाती है।

तो मेरा मुख्य ध्यान में रखते हुए जब मैं जगह है जहाँ विगेट्स जाने के लिए, मिल मैं इस तरह मेरी सरणी के माध्यम से लूप:

foreach ($widgets as $widget) 
{ 
    $this->load->view($widget); 
} 

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

मैंने कोडिनेटर में इस तरह के कई विजेट बनाए हैं और यह तरीका है जो मैं अपने सीएमएस में भी उपयोग करता हूं।

+0

आह, मुझे लगता है कि यह अधिक स्पष्ट रूप से मैं जो खोज रहा था, लेकिन थ्रोप, आपकी मदद के लिए भी धन्यवाद। मैं सीआई के बारे में बहुत कुछ सीख रहा हूँ। – Rapture

6

आंशिक रूप से आपका क्या मतलब है? CodeIgniter में कोई मूल आंशिक विचार नहीं हैं। हालांकि, आप विचारों में $this->load->view() कर सकते हैं।

आप नियंत्रक है कि सभी दृश्यों के लिए उपलब्ध है कि आप लोड होगा से चर बारे में बात कर रहे हैं, तो आपको क्या करना चाहिए:

$data['info'] = 'value'; 
$this->load->vars($data); 

$info तो सभी दृश्यों लोड करने के लिए उपलब्ध होगा।

अद्यतन:

आप क्या करने की जरूरत है कि अपने निर्माता में:

class Page extends Controller { 
    function Page() 
    { 
     $this->load->model('page'); 
     $data['images'] = $this->page->get_images(); 
     $this->load->vars($data); 
     // images will now be available to all views 
    } 

} 

अद्यतन 2:

मैं मानता चाहिए कि मैं टेम्पलेट्स उपयोग नहीं किया है, लेकिन यह सभी पृष्ठों के लिए काम करेगा आपके नियंत्रक द्वारा बनाया गया।

+0

क्षमा करें - मुझे लगता है कि मेरा मतलब टेम्पलेट का उपयोग करना है। जैसा आपने कहा - $-- load-> देखें ('user_controls') का उपयोग कर। मैं नहीं चाहता कि डेटा आवश्यक रूप से वैश्विक हो और प्रत्येक दृश्य पर लोड हो, लेकिन मैं उन पृष्ठों पर चाहूंगा जहां मेरे पास "हालिया छवियां" एक नियंत्रक को कॉल करती हैं जो उस डेटा को प्रत्येक पृष्ठ के नियंत्रक से उस क्वेरी को चलाने के बिना पॉप्युलेट करती है हाल ही की छवियों को ब्लॉक किया गया है? शायद मैं समझ में नहीं आ रहा हूँ? – Rapture

+0

उत्साह, मेरा अपडेट देखें। –

+0

आह, धन्यवाद। ऐसा लगता है कि मुझे मॉडल के साथ और अधिक परिचित होना चाहिए। वर्तमान में मेरे पास सिर्फ 2 सिद्धांत डेटाबेस मॉडल हैं और नियंत्रकनाम/फ़ंक्शननाम का उपयोग करके निर्मित पृष्ठ पीढ़ी का उपयोग कर रहे हैं, इसलिए मेरे पास कोई पृष्ठ मॉडल नहीं है। ऐसा लगता है कि मुझे एक – Rapture

3

अच्छी खबर यह है कि कोडइग्निटर निश्चित रूप से इस दिशा में आगे बढ़ रहा है। प्रारंभ करने के लिए, wiredeignz से मॉड्यूलर एक्सटेंशन पर एक नज़र डालें। यह यहां पाया जा सकता है: https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/overview आपको प्रारंभ करने के लिए अच्छे दस्तावेज़ों के साथ। यह आपके लिए सही हो सकता है, क्योंकि आप एक मॉड्यूल चला सकते हैं (यानी एक मॉड्यूल के नियंत्रक/विधि को कॉल करें और यह आंशिक दृश्य देता है) और उसे टेम्पलेट या वैश्विक दृश्य या जो कुछ भी डालें। इसके अलावा, सीआई 2.0 - https://bitbucket.org/ellislab/codeigniter/overview देखें यह कोडनिर्देशक के पुराने संस्करणों के लिए काफी अलग है और इसमें कई नई सुविधाएं हैं जो बहुत ही रोमांचक हैं। हालांकि बीटा में यह बहुत स्थिर है। एचएमवीसी सीआई 2.0 के साथ काम करने के लिए लिखा गया है।

इसके अलावा, इस तरह से काम करने वाली अन्य सीआई परियोजनाओं के लिए कोड देखें। मैं फिल स्टर्जन द्वारा पाइरोसीएमएस की सिफारिश करूंगा। वह वास्तव में रास्ता तय कर रहा है और मॉड्यूलरिसेशन और सीआई 2.0 के बारे में कई रोचक लेख और पोस्ट लिखे हैं। www.philsturgeon.co.uk

काम करने का यह तरीका वास्तव में साइट के अलग-अलग बिट्स को रखने के लिए उपयोगी है, केवल आवश्यकता होने पर ही उपयोग किया जा रहा है।

कोशिश करते हैं और आप एक छोटे से अधिक सीधे मदद करने के लिए ...

भूल जाते हैं कि आप वैकल्पिक तीसरे पैरामीटर का उपयोग कर उत्पादन बफ़र कर सकते हैं मत करो। यदि आप सुनिश्चित नहीं हैं तो उपयोगकर्ता मार्गदर्शिका देखें।

$partial = $this->load->view('someView', $data, true); 
संबंधित मुद्दे