Drupal 7 मॉड्यूल किन तत्वों से बना होता है?
अपने मॉड्यूल को बनाना शुरू करने से पहले, आइए Drupal API की संभावनाओं के बारे में थोड़ा और जानें। API टैक्सोनॉमी, नोड्स, उपयोगकर्ताओं, और डेटाबेस से डेटा इनपुट/आउटपुट के साथ काम करने के लिए विस्तृत सुविधाएँ प्रदान करता है। Drupal में मॉड्यूल्स और कोर के बीच, साथ ही विभिन्न मॉड्यूल्स के बीच परस्पर संबंध बनाए रखने के लिए एक विशेष प्रणाली होती है — जिसे hook system कहा जाता है।
Hook वास्तव में एक “callback function” (प्रतिवर्ती फ़ंक्शन) है — यानी जब Drupal का कोड किसी विशेष बिंदु पर पहुँचता है जहाँ हुक बुलाया गया है, तो वह हमारे मॉड्यूल में लिखे गए संबंधित फ़ंक्शन को चलाता है। इस प्रकार, हम उपयोगकर्ता डेटा, मेनू, टैक्सोनॉमी, और विभिन्न प्रकार के कंटेंट नोड्स को संसाधित कर सकते हैं।
आप निम्नलिखित पृष्ठ पर हुक्स की पूरी सूची पा सकते हैं:
http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7
यह सूची Drupal कोर के सभी hooks को दिखाती है। ध्यान दें कि प्रत्येक Drupal संस्करण में हुक्स की सूची अलग होती है। हम Drupal 7 के लिए मॉड्यूल बनाएंगे, इसलिए हम सातवें संस्करण के अनुरूप हुक्स का उपयोग करेंगे।
Drupal में हुक्स का स्वरूप इस प्रकार होता है:
मॉड्यूल_का_नाम_हुक_का_नाम
अर्थात् जहाँ भी हुक के नाम में “hook” लिखा होता है, वहाँ आपको अपने मॉड्यूल का नाम रखना होता है — उस मॉड्यूल के नाम से जिसमें यह हुक उपयोग किया जा रहा है।
अब मॉड्यूल बनाने की प्रक्रिया शुरू करें:
1. सबसे पहले, sites/all/modules
फ़ोल्डर में अपने मॉड्यूल के नाम से एक नया फ़ोल्डर बनाएँ। उदाहरण के लिए, मैं इसे site-made नाम दूँगा।
2. इस फ़ोल्डर में दो फ़ाइलें बनानी होंगी — मॉड्यूल_का_नाम.info
और मॉड्यूल_का_नाम.module
। मेरे मामले में यह होंगे: sitemade.info
और sitemade.module
।
3. अब sitemade.info
फ़ाइल में निम्नलिखित लिखें:
;$Id$ // यह टिप्पणी drupal.org पर मॉड्यूल अपलोड करना आसान बनाती है name = Sitemade module // हमारे मॉड्यूल का नाम (मॉड्यूल्स की सूची में प्रदर्शित) package = sitemade // उस पैकेज का नाम जिसमें मॉड्यूल शामिल है core = 7.x // Drupal संस्करण जिसके लिए मॉड्यूल बनाया जा रहा है files[] = sitemade.module // PHP कोड वाली फ़ाइल को सूचीबद्ध करें
अब sitemade.module
फ़ाइल में PHP कोड की शुरुआत करें:
<?php // टैग को बंद करना आवश्यक नहीं है //$Id$ // यह भी drupal.org पर अपलोड सुविधा के लिए जोड़ा गया है
अब आपका मॉड्यूल अन्य मॉड्यूल्स की सूची में दिखाई देगा। आइए इसे सक्रिय करें:
अब जब मॉड्यूल सक्रिय हो गया है, हम कोड जोड़ना शुरू कर सकते हैं। उदाहरण के लिए, हम उपयोगकर्ता प्रोफ़ाइल पेज से “History” (इतिहास) ब्लॉक हटाएँगे:
इसके लिए हमें hook_user_view की आवश्यकता होगी:
http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view/7
इस हुक का अर्थ यह है कि जब Drupal उपयोगकर्ता प्रोफ़ाइल पृष्ठ को प्रदर्शित करने के लिए आवश्यक कोड निष्पादित करता है, तो वह हमारे मॉड्यूल के इस हुक को भी शामिल करता है। हमारे मॉड्यूल में हम उपयोगकर्ता की “History” जानकारी को $account ऐरे से हटा देंगे। अपने sitemade.module
फ़ाइल को खोलें और निम्न कोड जोड़ें:
function sitemade_user_view($account, $view_mode, $langcode){ print_r($account); }
फ़ाइल सहेजें और Drupal कैश साफ़ करें ताकि हुक सक्रिय हो सके। अब उपयोगकर्ता पृष्ठ के ऊपर एक ऐरे दिखाई देगा:
वास्तव में, यह वही $account ऐरे है जिसे hook_user_view द्वारा प्रदान किया जाता है। print_r() फ़ंक्शन इस ऐरे की संरचना को स्क्रीन पर प्रदर्शित करता है। यदि आप Mozilla Firefox उपयोग करते हैं (जो विकास के लिए अनुशंसित है), तो CTRL+U दबाएँ ताकि आप पेज का सोर्स कोड देख सकें और समझ सकें कि इस ऐरे में क्या है।
यहाँ आप uid और name फ़ील्ड देख सकते हैं — इनमें क्रमशः उपयोगकर्ता ID और उपयोगकर्ता नाम होते हैं। ये मान अक्सर प्रोफ़ाइल या उपयोगकर्ता द्वारा बनाए गए कंटेंट से लिंक करने के लिए उपयोग किए जाते हैं।
जैसा कि आप देख सकते हैं, इस ऐरे में केवल उपयोगकर्ता की जानकारी है, “History” ब्लॉक की जानकारी नहीं है। अब हम दूसरा हुक आज़माएँगे — hook_user_view_alter:
http://api.drupal.org/api/drupal/modules--user--user.api.php/function/hook_user_view_alter/7
अब मॉड्यूल कोड को इस प्रकार बदलें:
function sitemade_user_view_alter($account, $view_mode, $langcode){ print_r($account); }
परिवर्तन सहेजें। अब प्रदर्शित ऐरे में बदलाव होगा — अब $account
केवल एक फ़ील्ड है, और summary
फ़ील्ड में “History” ब्लॉक की जानकारी होती है। चलिए इस जानकारी को हटाते हैं और परिणाम देखते हैं। हम जानकारी को unset() फ़ंक्शन का उपयोग करके हटाएँगे:
function sitemade_user_view_alter($account, $view_mode, $langcode){ unset($account['summary']); print_r($account); }
परिणामस्वरूप summary
फ़ील्ड हट गई, लेकिन “History” ब्लॉक अभी भी दिख रहा है — क्यों? इसका कारण यह है कि फ़ंक्शन में $account केवल एक स्थानीय वेरिएबल है (यह मूल वेरिएबल से जुड़ा नहीं है)। हमें इसे संदर्भ (reference) के रूप में पारित करना होगा ताकि परिवर्तन मूल वेरिएबल में भी परिलक्षित हों। इसके लिए हमें वेरिएबल से पहले & चिह्न जोड़ना होगा।
function sitemade_user_view_alter(&$account, $view_mode, $langcode){ unset($account['summary']); print_r($account); }
अब फ़ाइल सहेजें और कैश साफ़ करें। अब “History” ब्लॉक गायब हो जाएगा। यहाँ & चिह्न वेरिएबल $account का संदर्भ बनाता है, जिससे फ़ंक्शन के अंदर किए गए परिवर्तन मूल वेरिएबल पर भी लागू होते हैं। PHP में references के बारे में अधिक जानकारी के लिए किसी भी PHP प्रोग्रामिंग पुस्तक का संदर्भ लें।