Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

CodeIgniter में Views और Templating का एक परिचय

by
Read Time:15 minsLanguages:

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

Views किसी भी MVC एप्लीकेशन में एक इंग्रेडिएंट हैं, और CodeIgniter ऍप्लिकेशन्स इस से अलग नहीं है। आज, हम सीखेंगे कि Views क्या है, और पता चलेगा कि इन्हें आपके CodeIgniter प्रोजेक्ट्स के लिए टेम्पलेटिंग सोल्युशन बनाने के लिए कैसे उपयोग किया जा सकता है।

इस ट्यूटोरियल का पहला भाग एकदम शुरुआत करने वालो को CodeIgniter को शिक्षित करेगा की View क्या है, और एक विशिष्ट एप्लीकेशन में उनका उपयोग कैसे करें। दूसरा भाग टेम्पलेटिंग सोल्युशन खोजने के लिए प्रेरणाओं पर चर्चा करेगा, और सरल, पर फिर भी प्रभावी टेम्पलेटिंग लाइब्रेरी बनाने के लिए आवश्यक स्टेप्स के से रीडर को मार्गदर्शित करेंगे। Interested? चलिए शुरू करते हैं!


Views क्या होता है?

Views विशेष रूप से उपयोग किए गए मार्कअप को स्टोर करने के लिए CodeIgniter में उपयोग किए जाने वाले विशेष फ़ाइलें हैं, आमतौर पर HTML और सरल PHP टैग शामिल होते हैं।

"एक Views सिर्फ एक वेब पेज या एक page का खंड है, जैसे हैडर, फुटर, साइडबार, आदि। वास्तव में, व्यू को अन्य व्यू (अन्य व्यू के भीतर, आदि, इत्यादि) के अंदर आसानी से एम्बेड किया जा सकता है। यदि आपको इस तरह के हायरार्की की आवश्यकता है। "

Views कंट्रोलर मेथड्स के अंदर से लोड किए जाते हैं, ब्राउज़र में प्रदर्शित होने वाले Views के अंदर के content के साथ।


Views को कैसे लोड करें

CodeIgniter में एक Views को लोड (और प्रदर्शित) करने के लिए, हम बिल्ट इन Loader library का उपयोग करते हैं।

कोड की यह सिंगल लाइन, application/views फ़ोल्डर में hello_world.php को देखने के लिए CodeIgniter को बोलेगा, और ब्राउज़र की फ़ाइल के कंटेंट को प्रदर्शित करेगा।

ध्यान दें कि CodeIgniter आपको .php सफिक्स को बाहर करने की अनुमति देता है, कुछ कीस्ट्रोक्स को सेव करता है जब Views का फ़ाइल नाम टाइप करते है जिसे आप लोड करना चाहते हैं।

दूसरा पैरामीटर, $data वैकल्पिक है और एक associative array या ऑब्जेक्ट लेता है। इस array/ऑब्जेक्ट का उपयोग view फाइल में डेटा पास करने के लिए किया जाता है, ताकि व्यू के अंदर इसका उपयोग कर सकें या रिफरेन्स दिया जा सकें।

अंतिम optional पैरामीटर निर्धारित करता है कि क्या Views के कंटेंट ब्राउज़र विंडो में प्रदर्शित किया जाए, या स्ट्रिंग के रूप में रीटर्न की जाए। यह पैरामीटर डिफ़ॉल्ट रूप से false होता है, जो कंटेंट को ब्राउज़र में दिखाता है। हम बाद में ट्यूटोरियल में देखेंगे कि टेम्पलेटिंग समाधान बनाने के दौरान इस पैरामीटर का उपयोग कैसे किया जा सकता है।


Views बनाना और प्रदर्शित करना

हमारा पहला व्यू सेटअप करने के लिए, application/views में hello_world.php नामक एक नई फ़ाइल बनाएं और निम्न सरल HTML को नीचे लिखें:

अब इस Views को ब्राउजर में प्रदर्शित करने के लिए, यह एक Controller मेथड के भीतर उपरोक्त मेथड का उपयोग करके लोड किया जाना चाहिए।

तो आइए एक नयी Controller फ़ाइल बनाएं जो application/controllers के अंदर hello_world.php नाम से होगी और निम्न कोड को अंदर डालिये। इस कंट्रोलर के भीतर, हम नव निर्मित व्यू को लोड करेंगे।

अपने ब्राउज़र को http://your-ci-install.com/index.php/ पर इंगित करते हुए अब ब्राउज़र में application/views/hello_world.php में आउटपुट हो जाएगा। आपने सफलतापूर्वक एक व्यू लोड किया है!

एक से अधिक Views लोड करना

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

एक सिंगल व्यू प्रदर्शित करना पूरी तरह से ठीक और अच्छा है, लेकिन आप आउटपुट को कई अलग-अलग फ़ाइलों में विभाजित करना चाहेंगे, जैसे header, content और footer

कई views को लोड करने से केवल $this->load->view() मेथड को बार बार कॉल करके हासिल किया जाता है। CodeIgniter ब्राउज़र में प्रदर्शित होने से पहले views के कंटेंट को एक साथ जोड़ता है।

application/views में header.php नामक एक नई फ़ाइल बनाएं और हमारी ओरिजिनल hello_world.php फ़ाइल से पहले कुछ लाइन्स को कट और पेस्ट करें।

इसी प्रकार, एक फ़ाइल application/views में बनाओ जिसे footer.php नाम दें और उसके बाद में hello_world.php की अंतिम दो लाइन्स को स्थानांतरित करें।

इससे यह हमारे पेज कंटेंट से युक्त hello_world.php व्यू फ़ाइल को देता है।

अब पेज को फिर से प्रदर्शित करने के लिए, हमें अपने कंट्रोलर के भीतर, सभी तीनों Views (header.php, hello_world.php, footer.php) को लोड करना होगा।

application/controllers/hello_world.php को फिर से ओपन करें और पहले से मौजूद स्टेटमेंट के ऊपर और नीचे $this->load->view() कॉल को जोड़ें।

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

स्पष्ट रूप से यह एक बड़ा लाभ है क्योंकि HTML या कंटेंट के व्यूज में कोई भी परिवर्तन होता है तो, उदाहरण के लिए हैडर में एक नई स्टाइलशीट जोड़ना, केवल एक फ़ाइल में करना होगा, और प्रत्येक फ़ाइल के लिए नहीं!


View में Controller से डेटा का उपयोग करना

अब, हम कंट्रोलर्स से डेटा गुजरते हुए देखेंगे, ताकि वे व्यू के अंदर उपयोग या आउटपुट किए जा सकें।

इसे प्राप्त करने के लिए, हम $this->load->view() कॉल में दूसरे पैरामीटर के रूप में एक एसोसिएटिव array, $data पास कर सकते हैं।

इस array की values लोड किए गए व्यू के भीतर वेरिएबल के रूप में पहुँच में होंगे, जिन्हें उनके संबंधित keys के नाम पर रखा जाएगा।

उपरोक्त कोड वेरिएबल $title को 'Hello World!' वैल्यू देगा! hello_world व्यू के अंदर।

व्यूज में वेरिएबल का उपयोग कैसे करें

एक बार जब हम अपने डेटा को व्यू की फ़ाइलों में पास करते हैं, तो वेरिएबल्स को सामान्य तरीके से इस्तेमाल किया जा सकता है।

आमतौर पर, व्यू फ़ाइल पास किए गए डेटा का उपयोग निम्न में करेगा:

  • एक वेरिएबल की वैल्यू प्रदर्शित करना
  • arrays या ऑब्जेक्ट प्रॉपर्टीज के माध्यम से लूप करना
  • दिखाए जाने के लिए कंडीशनल स्टेटमेंट का उपयोग करना, या मार्कअप को छिपाना

मैं प्रत्येक को कैसे करना है के क्विक उदाहरण के माध्यम से चलूँगा।

एक वैरिएबल के कंटेंट को प्रदर्शित करने के लिए सरल और परिचित, echo का प्रयोग करें:

किसी array, या ऑब्जेक्ट के माध्यम से लूपिंग, फ़ाइलों को देखने के लिए एक सामान्य कार्य है, और एक foreach लूप के साथ प्राप्त किया जा सकता है:

डेटा को पारित किए जाने के आधार पर, साधारण कंडीशनल स्टेटमेंट का इस्तेमाल व्यू फ़ाइलों में थोड़ा कम करने के लिए किया जा सकता है।

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

उपरोक्त उदाहरण या तो $logged_in (true/false) की वैल्यू के आधार पर, "Welcome" मैसेज दिखाएगा, या यूज़र को लॉगिन करने के लिए एक रिक्वेस्ट होगा।


CodeIgniter में टेम्पलेटिंग

हमने देखा है कि अलग-अलग फाइलों में विभाजित व्यू कैसे देखे जा सकते हैं, आपके CodeIgniter प्रोजेक्ट्स में फ़ाइलों की संख्या को व्यवस्थित और कम करने में मदद मिल सकती है, लेकिन अब मल्टीप्ल लोड व्यू कॉल्स को एक ऐसा पेज प्रदर्शित करने की आवश्यकता होती है, जो एक पेज प्रदर्शित होता है।

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

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

हमें ऐसे व्यू फ़ाइलों को एम्बेड करने में सक्षम होने की ज़रूरत है जो अलग-अलग पेज कंटेंट को प्रदर्शित करते हैं, एक टेम्पलेट के अंदर, बिना दोहराए कोड के, और जो टेम्पलेट को आसानी और कुशलता से किए जाने के लिए अनुमति देता है।

निम्नलिखित कदम आपको एक सरल CodeIgniter लाइब्रेरी बनाने में सहायता करेंगे, जो इन आवश्यकताओं को पूरा करते हैं:

  • अपने व्यूज के लिए एक प्रेडिक्ट करने योग्य और रखरखाव करने योग्य डायरेक्टरी स्ट्रक्चर को एनफोर्स करना
  • उपयोग किए जाने वाले कई अलग-अलग टेम्पलेट्स के लिए अनुमति देना
  • पेज व्यू को सिर्फ एक लाइन के कोड में लोड करने करके कम करना

एक बार लाइब्रेरी लिख ली जाए और हमारे CodeIgniter टूल बेल्ट में, हम एक टेम्पलेट के पेज को प्रदर्शित करने में सक्षम होंगे जैसे:

बहुत अच्छा!

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

प्लेसहोल्डर वास्तव में केवल $body नाम का एक वेरिएबल होगा। हमारी लाइब्रेरी के साथ टेम्पलल व्यू लोड करते समय, उचित बॉडी व्यू फ़ाइल की कंटेंट को इस $body को सौंपा जाएगा, टेम्पलेट के भीतर व्यू एम्बेड करना।


स्टेप 1: डायरेक्टरी की स्थापना

हम अपनी व्यू फाइलों के लिए समझदार, और उम्मीदवार डायरेक्टरी सिस्टम को लागू करना चाहते हैं, तो यह हमारे व्यूज है:

  • पता लगाने में आसान
  • यह निर्धारित करने के लिए आसान है कि वे किस एप्लिकेशन का हैं
  • संभालने में आसान

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

application/views डायरेक्टरी के अंदर एक नया फ़ोल्डर बनाएं और उसे templates नाम दें। यह फ़ोल्डर अलग-अलग टेम्पलेट व्यूज को रखेगा।


स्टेप 2: लाइब्रेरी बनाना

CodeIgniter में लाइब्रेरी केवल PHP क्लासेज हैं और बहुत सारे व्यूज की तरह कंट्रोलर में लोड किए जाते हैं।

आपके CodeIgniter प्रोजेक्ट में उपयोग किए जाने वाले कस्टम लाइब्रेरी application/libraries फ़ोल्डर में संग्रहीत हैं। हमारे टेम्पलेटिंग लाइब्रेरी लिखना शुरू करने के लिए, इस फ़ोल्डर में एक नया फ़ाइल बनाओ Template.php नाम से, और निम्न कोड को इसमें रखें:

उपरोक्त कोड में एक नयी class, या लाइब्रेरी परिभाषित की गयी है, जिसका नाम Template और __construct() मेथड है।

यह मेथड $ci क्लास वेरिएबल के लिए CodeIgniter सुपर ऑब्जेक्ट को आवंटित करता है, जिससे सामान्य मेथड कॉल में $thid->ci के साथ $this की जगह के लिए सभी CodeIgniter संसाधनों का उपयोग किया जा सकता है।

जब लायब्रेरी को CodeIgniter फ्रेमवर्क में लोड किया जाता है, तो __construct() मेथड को स्वचालित रूप से कॉल किया जाता है।

Load मेथड को लिखना

अब हम वास्तव में एक टेम्पलेट व्यू लोड करने के लिए मेथड लिखेंगे। हम इस फंक्शन में तीन पैरामीटर्स को पास करना चाहते हैं:

  • टेम्पलेट का नाम
  • बॉडी व्यू का नाम (वैकल्पिक)
  • व्यूज को पास करने वाला डेटा (वैकल्पिक)

इस मेथड के रिजल्ट को कॉल किया जाता है, ब्राउज़र में टेम्पलेट व्यू प्रदर्शित किया जायेगा, जिसमें बॉडी व्यू के भीतर एम्बेड किया जा रहा है, अगर कोई आपूर्ति की जाती है।

__construct() मेथड के नीचे, निम्न कोड रखें:

उपरोक्त कोड की जांच करके शुरू होता है कि क्या $body_view पैरामीटर मेथड में आपूर्ति की गई थी। यह वेरिएबल टेम्पलेट व्यू में बॉडी के रूप में उपयोग करने के लिए व्यू का नाम रखेगा।

यदि पैरामीटर की आपूर्ति की जाती है, तो file_exists की एक श्रृंखला हमारी डायरेक्टरी प्रणाली के अंतर्गत व्यू फ़ाइल को देखने और ढूँढ़ने के लिए बनाई गई है।

कोड पहले application/views फ़ोल्डर के अंदर व्यू फ़ाइल को उसी नाम से ढूंढने की कोशिश करता है जैसा की टेम्पलेट में नाम है

यह उपयोगी है यदि आपके प्रोजेक्ट के सेक्शन दूसरों से काफी अलग हो, और विभिन्न टेम्पलेट्स का उपयोग करें। इन परिस्थितियों में, इन व्यूज फ़ाइलों को एक साथ ग्रुप में रखना समझ में आता है।

उदाहरण के लिए, कई वेबसाइटें अलग-अलग सेक्शंस के लिए एक अलग टेम्पलेट प्रदर्शित करती हैं, जैसे कि ब्लॉग। हमारे सिस्टम में, ब्लॉग व्यू फाइलें application/views/blog फ़ोल्डर में रखी जा सकती हैं, उन्हें मुख्य साइट व्यूज से अलग कर सकती हैं।

यदि व्यू फ़ाइल इस फ़ोल्डर में स्थित नहीं हो सकती है, तो .php फ़ाइल नाम के अंत में जोड़ा जाता है, और जांच फिर से की जाती है। यह बस इतना है कि .php को नेटिव $this->load->view() कॉल की तरह बाहर रखा जा सकता है।

यदि फ़ाइल अभी भी नहीं है, तो इसके स्थान की जांच के लिए आगे की जांच की जाती है।

इस बार, कोड जांचता है कि व्यू फ़ाइल application/views फ़ोल्डर के अंदर स्थित है, और एक बार फिर, यदि वह नहीं मिल पाती है, तो .php जोड़ता है और एक बार फिर जांच करता है।

अगर फाइल इन स्थानों में से किसी एक में स्थान में है, तो path $body_view_path को असाइन किया जाता है, अन्यथा कोई एरर संदेश CodeIgniter में निर्मित show_error() फ़ंक्शन का उपयोग करके थ्रो कर दिया जाता है, और स्क्रिप्ट समाप्त हो जाती है।

यदि बॉडी व्यू फ़ाइल सफलतापूर्वक ढूंढ ली जाती है, तो कंटेंट को $body वेरिएबल के लिए असाइन कर दिया जाता है।

हम व्यू लोड कॉल में $data पैरामीटर (null यदि आपूर्ति नहीं करते हैं) को पास करते हैं, और स्ट्रिंग के रूप में व्यू के आउटपुट को वापस करने के लिए तीसरे पैरामीटर को true पर सेट करते हैं।

अब हम इस $body वैरिएबल को $data में डेटा की सूची में जोड़ते हैं ताकि इसे लोड किए जाने पर टेम्प्लेट व्यू में एम्बेड किया जा सके।

यदि $data को load() कॉल में नहीं दिया गया, तो $data को array को सौंपा गया है जिसमें मुख्य body के तहत $body होती है। यदि पैरामीटर की आपूर्ति की गई थी, तो $body को array में जोड़ा जाता है या तो उसे एक array key, या ऑब्जेक्ट प्रॉपर्टी, दोनों का नाम body भी है।

एंबेडेड व्यूज के लिए प्लेसहोल्डर के रूप में टेम्पलेट व्यू फ़ाइलों में $body वैरिएबल का उपयोग अब किया जा सकता है।

हमारे मेथड की अंतिम पंक्ति, टेम्पलेट व्यू फ़ाइल को application/views/templates फ़ोल्डर से लोड करती है, और दूसरे पैरामीटर में $data वैरिएबल पास करती है।

और बस! लाइब्रेरी अब उपयोग करने के लिए रखी जा सकती है।


लाइब्रेरी का उपयोग करना

हमारी लाइब्रेरी का उपयोग शुरू करने के लिए, चलिए एक टेम्प्लेट व्यू बनाते हैं, जिसका नाम default.php हो, application/views/templates में, और निम्नलिखित HTML/PHP को अंदर रखें:

इस टेम्पलेट में, हम दो वेरिएबल, $title और $body को संदर्भ देते हैं।

याद रखें कि हमारे टेम्पलेट फ़ाइलों में, $body एम्बेडेड व्यू के लिए प्लेसहोल्डर के रूप में कार्य करता है।

अब हम इस टेम्पलेट के भीतर एम्बेडेड होने के लिए एक और व्यू बनाते हैं। application/views/ में content.php नाम की एक नई फ़ाइल बनाएं और इस सरल HTML को अंदर रखें:

अब हम एक कंट्रोलर के अंदर से टेम्पलेट वाले पेज व्यू को लोड करने के लिए तैयार हैं।

किसी भी कंट्रोलर मेथड के अंदर, default टेम्पलेट के भीतर, content व्यू प्रदर्शित करने के लिए निम्न कोड को रखें।

नोट: load मेथड को कॉल करने से पहले लाइब्रेरी में लोड होना चाहिए। प्रत्येक बार एक टेम्पलेट व्यू प्रदर्शित होने की आवश्यकता होती है,
अपने आप को लाइब्रेरी लोड होने के लिए,इसे application/config/autoload.php में लाइब्रेरी के array में जोड़कर क्लास को autoload करें।

यदि किसी व्यू फ़ाइल के बजाय, आप एक स्ट्रिंग को टेम्पलेट में एम्बेड करना चाहते हैं, तो बस के body का उपयोग करके $data array को स्ट्रिंग प्रदान करें, और लोड कॉल में दूसरे पैरामीटर के रूप में null पास करें।


क्विक टिप

मैंने पाया है कि कंट्रोलर द्वारा फ़ोल्डरों में ग्रुप व्यू फाइलें, और यहां तक कि मेथड, वे संबंधित हैं, मेरे विचारों को संगठित करने और ढूंढने में आसान रखने में मदद करते हैं।

इस तरह से अपने व्यूज को व्यवस्थित करने से controller/method के URL स्कीमा के निकट डायरेक्टरी संरचना में परिणाम सामने आते हैं।

उदाहरण के लिए, मान ले कि आपके प्रोजेक्ट में Members नाम का controller है, जिसमें list मेथड है।

list व्यू फ़ाइल के लिए उपयुक्त स्थान application/views/members, या application/views/members/list में होगा, यदि यह मेथड मल्टीप्ल व्यूज लोड करती है।

यह व्यू निम्न टेम्प्लेट के साथ हमारी लाइब्रेरी का उपयोग करके टेम्पलेट में एम्बेड किया जा सकता है:


निष्कर्ष

इस ट्यूटोरियल में चर्चा की गयी टेम्पलेटिंग समाधान CodeIgniter में टेम्पलेटिंग को प्राप्त करने के विभिन्न तरीकों में से एक है।

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

इस ट्यूटोरियल में चर्चा की गयी टेम्पलेटिंग समाधान CodeIgniter में टेम्पलेटिंग को प्राप्त करने के विभिन्न तरीकों में से एक है। कई अलग-अलग दृष्टिकोण हैं, और मैं आपको प्रोत्साहित करता हूं, पाठक, अन्य मेथड्स के शोध और यह निर्धारित करने के लिए कि आपके प्रोजेक्ट्स के लिए सबसे अच्छा कौन सा फिट बैठता है।

यदि आपके पास ट्यूटोरियल के बारे में कोई टिप्पणी या प्रश्न हैं, या विभिन्न टेम्पलेटिंग समाधानों पर कोई अंतर्दृष्टि है, तो कृपया नीचे एक कमेंट छोड़ें! पढ़ने के लिए धन्यवाद।

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.