Views संदर्भात्मक फ़िल्टर और रिलेशनशिप्स — आर्गुमेंट्स और संबंध (लिंक्स)
इस पाठ में मैं विशेष रूप से Views में arguments (तर्कों) के साथ काम करने पर ध्यान दूँगा। Arguments कहलाते हैं URL के वे हिस्से, उदाहरण के लिए:
node/15 पहला argument होगा node, दूसरा 15। taxonomy/term/10 पहला argument taxonomy, दूसरा term, तीसरा 10। user/67 पहला argument user, दूसरा 67।
मुझे लगता है कि ये उदाहरण पर्याप्त रूप से स्पष्ट हैं और अतिरिक्त व्याख्या की आवश्यकता नहीं है।
Arguments को आप arg() फ़ंक्शन की मदद से प्राप्त कर सकते हैं:
<?php print arg(0) . '<br />'; print arg(1); ?>
यदि URL था node/15, तो आउटपुट होगा:
node 15
arg() फ़ंक्शन में argument की संख्या 0 से शुरू होती है। अब देखते हैं कि Views मॉड्यूल में कौन से तैयार समाधान मौजूद हैं।
उपयोगकर्ता की नोड्स प्रदर्शित करना
मान लीजिए हम पृष्ठ user/1 पर हैं और हमें uid = 1 वाले उपयोगकर्ता की नोड्स दिखानी हैं। इसके लिए हम URL से argument का उपयोग करेंगे।
एक नया View जोड़ें। Output के रूप में block चुनें, फ़ील्ड्स में नोड का शीर्षक (title) प्रदर्शित करें, केवल प्रकाशित (published) नोड्स दिखाएँ, और उन्हें पोस्ट की तारीख (post date) के अनुसार क्रमबद्ध करें।
शीर्षक:
user_nodes
फ़ॉर्मेट:
Unformatted list | सेटिंग्स
दिखाएँ: Fields | सेटिंग्स
Fields:
सामग्री: शीर्षक
Filter criteria:
सामग्री: प्रकाशित (हाँ)
Sort criteria:
सामग्री: Post date (desc)
Pager:
Use pager: एक निश्चित संख्या के आइटम दिखाएँ | 15 आइटम
More link: नहीं
अब Contextual filters (arguments, संदर्भ फ़िल्टर) में जाएँ और चुनें:
सामग्री: Author uid
इसके बाद चुनें:
When the filter value is NOT available Provide default value User ID from URL Provide default value
अब View सहेजें। ब्लॉक को आवश्यक क्षेत्र में रखें और उदाहरण के लिए पृष्ठ user/1 पर जाएँ — अब उस ब्लॉक में uid = 1 वाले उपयोगकर्ता की सभी नोड्स प्रदर्शित होंगी।
संबंधित नोड्स प्रदर्शित करना
अब उदाहरण को थोड़ा जटिल बनाते हैं। मान लीजिए हमें एक नोड से कई अन्य नोड्स को जोड़ना है। इसके लिए node reference फ़ील्ड्स का उपयोग किया जाता है। इन संबंध फ़ील्ड्स के लिए हमें References मॉड्यूल और उसका उप-मॉड्यूल Node References चाहिए।
http://drupal.org/project/references
Drupal 7 में संबंध फ़ील्ड्स की मदद से आप एक नोड से कई उपयोगकर्ता और कई नोड्स एक साथ जोड़ सकते हैं। यह node reference फ़ील्ड के माध्यम से किया जाता है। और क्योंकि Drupal 7 में आप किसी भी entity में फ़ील्ड जोड़ सकते हैं, अब आप किसी भी प्रकार की entity को आपस में जोड़ सकते हैं।
मेरी साइट पर 4 समाचार (news) हैं, और मैं दूसरी खबर को पहली और तीसरी से जोड़ना चाहता हूँ — मान लें कि ये एक ही विषय पर हैं।
कंटेंट टाइप “समाचार” की फ़ील्ड सेटिंग्स में जाएँ और node reference प्रकार की फ़ील्ड जोड़ें जिसमें ऑटो-कम्प्लीट (autocomplete) की सुविधा हो। इस फ़ील्ड को “समान समाचार” नाम दें। फिर चुनें कि कौन से कंटेंट टाइप इस फ़ील्ड के माध्यम से लिंक किए जा सकते हैं, और एक नोड में कितनी अन्य नोड्स जोड़ी जा सकती हैं। मैंने केवल “समाचार” चुना। फ़ील्ड सहेजें और दूसरी खबर के संपादन (edit) पेज पर जाएँ — वहाँ “समान समाचार” नाम की फ़ील्ड दिखाई देगी।
अब वे समाचार पहले से ही संबंधित नोड्स की सूची के रूप में दिखाई देंगे, लेकिन हमारा उद्देश्य View को सेटअप करना है। एक नया View बनाएँ, आउटपुट प्रकार के रूप में block चुनें।
शीर्षक:
similar_news
फ़ॉर्मेट:
Unformatted list | सेटिंग्स
दिखाएँ: Fields | सेटिंग्स
Fields:
सामग्री: शीर्षक
Filter criteria:
सामग्री: प्रकाशित (हाँ)
सामग्री: प्रकार (= समाचार)
Sort criteria:
सामग्री: Post date (desc)
Pager:
Use pager: एक निश्चित संख्या के आइटम दिखाएँ | 5 आइटम
अब एक Contextual filter (argument) जोड़ें — सामग्री: Nid। और इस बार विकल्प चुनें:
When the filter value is NOT available Provide default value Content ID from URL
साथ ही Relationships (संबंध) में जाएँ और एक नया संबंध जोड़ें — सामग्री: समान समाचार (field_similar)। (यदि आपकी फ़ील्ड का नाम अलग है, तो वही चुनें)। ध्यान दें कि वहाँ उसी नाम की एक और फ़ील्ड होती है जिसमें “reverse” लिखा होता है — इसका अर्थ है विपरीत संबंध, यानी यदि हम “समाचार 3” पृष्ठ पर हैं, तो ब्लॉक में “समाचार 2” दिखाई देगा (हालाँकि हमने “समाचार 2” में “समाचार 1” और “समाचार 3” को लिंक किया था)।
अंततः हमारे View में निम्नलिखित होंगे:
Contextual filters:
सामग्री: Nid
Relationships:
सामग्री: समान समाचार
अब फ़ील्ड सेटिंग्स में relation का चयन करें — “Do not use a relationship” के स्थान पर हमारे बनाए गए संबंध का नाम चुनें।
Fields:
(field_similar) सामग्री: शीर्षक
अब View सहेजें और ब्लॉक को इच्छित क्षेत्र में रखें।
अब “समाचार 2” पृष्ठ पर एक अलग ब्लॉक में “समाचार 1” और “समाचार 3” जैसी समान खबरें प्रदर्शित होंगी।