Drupal 7 hook_block_info() और hook_block_view() — ब्लॉक में जानकारी प्रदर्शित करना
पिछले पाठ में हमने Drupal 7 के लिए एक मॉड्यूल बनाया था। इस पाठ में हम अपने मॉड्यूल की क्षमताओं को और बढ़ाएंगे। हम hook_block_view() और hook_block_info() हुक्स का उपयोग करके एक ब्लॉक जोड़ेंगे। इस ब्लॉक में साइट पर हाल ही में पंजीकृत उपयोगकर्ताओं की जानकारी होगी, जिसमें उनकी प्रोफ़ाइल पेज की लिंक भी शामिल होगी।
आइए hook_block_info() के विवरण से शुरू करें:
यह मॉड्यूल द्वारा बनाए गए सभी ब्लॉकों को परिभाषित करता है।
यह हुक Drupal को बताता है कि मॉड्यूल कौन-कौन से ब्लॉक प्रदर्शित करेगा और उनके आउटपुट के लिए सेटिंग्स का विवरण दे सकता है।
hook_block_info() में, आपके मॉड्यूल का प्रत्येक ब्लॉक एक अद्वितीय पहचानकर्ता "delta" प्राप्त करता है (यह लौटाए गए ऐरे की कुंजियाँ होती हैं)। delta का मान आपके मॉड्यूल में अद्वितीय होना चाहिए और निम्नलिखित उद्देश्यों के लिए उपयोग किया जाता है:
- इसे अन्य हुक्स में तर्क (argument) के रूप में पास किया जाता है ताकि यह पहचान की जा सके कि कौन सा ब्लॉक कॉन्फ़िगर और प्रदर्शित किया जा रहा है।
- HTML टेम्पलेट्स बनाने के लिए उपयोग किया जाता है, जैसे “block-MODULE-DELTA”, जो Drupal द्वारा संसाधित प्रत्येक ब्लॉक पर लागू होता है (यह CSS या JavaScript लिखने में सहायक होता है)।
- गहन थीमिंग के लिए block__MODULE__DELTA थीमिंग फ़ंक्शन को परिभाषित करने के लिए उपयोग किया जाता है।
- hook_block_info_alter() और अन्य हुक्स में आपके ब्लॉक की पहचान के लिए उपयोग किया जाता है।
delta का मान स्ट्रिंग या संख्या हो सकता है। इसकी अधिकतम लंबाई 32 बाइट होती है।
वापसी मान (Return Values)
यह एक एसोसिएटिव ऐरे होता है जिसमें प्रत्येक ब्लॉक की delta कुंजी होती है, और उसका मान उस ब्लॉक का विवरण होता है। प्रत्येक ब्लॉक का विवरण एक एसोसिएटिव ऐरे के रूप में भी लिखा जा सकता है, जिसमें निम्नलिखित कुंजी-मूल्य जोड़े होते हैं:
'info': (आवश्यक) एडमिन पैनल में प्रदर्शित होने वाला ब्लॉक का नाम। यह जानकारी "ब्लॉक्स" अनुभाग में ब्लॉक की पहचान के लिए उपयोग की जाती है और साइट के फ्रंटएंड पर प्रदर्शित नहीं होती।
'cache': (वैकल्पिक) ब्लॉक के कैश व्यवहार का वर्णन करता है। Drupal में कैशिंग के निम्नलिखित प्रकार होते हैं:
- DRUPAL_CACHE_PER_ROLE (डिफ़ॉल्ट): ब्लॉक का कंटेंट उपयोगकर्ता की भूमिका पर निर्भर करता है।
- DRUPAL_CACHE_PER_USER: ब्लॉक का कंटेंट उपयोगकर्ता-विशिष्ट होता है।
- DRUPAL_CACHE_PER_PAGE: ब्लॉक का कंटेंट पृष्ठ के अनुसार भिन्न हो सकता है।
- DRUPAL_CACHE_GLOBAL: ब्लॉक सभी उपयोगकर्ताओं और पृष्ठों के लिए समान रहता है।
DRUPAL_NO_CACHE: ब्लॉक को कैश नहीं किया जाएगा।
'properties': (वैकल्पिक) ब्लॉक से संबंधित अतिरिक्त मेटाडेटा का ऐरे।
सामान्य properties में शामिल हैं:
'administrative': Boolean जो बताता है कि ब्लॉक प्रशासनिक संदर्भ (administrative context) में उपयोग किया जाएगा या नहीं।
'weight': (वैकल्पिक) ब्लॉक के वजन (weight) का प्रारंभिक मान निर्धारित करता है।
'status': (वैकल्पिक) ब्लॉक की स्थिति निर्धारित करता है (1 = सक्रिय, 0 = निष्क्रिय)।
'region': (वैकल्पिक) यह तय करता है कि ब्लॉक किस क्षेत्र (region) में प्रदर्शित होगा।
- 'visibility': (वैकल्पिक) ब्लॉक की दृश्यता निर्धारित करता है। संभावित मान:
- BLOCK_VISIBILITY_NOTLISTED: सभी पृष्ठों पर दिखाएँ, सिवाय सूचीबद्ध पृष्ठों के।
- BLOCK_VISIBILITY_LISTED: केवल सूचीबद्ध पृष्ठों पर दिखाएँ।
- BLOCK_VISIBILITY_PHP: दृश्यता निर्धारित करने के लिए कस्टम PHP कोड का उपयोग करें।
- 'pages': (वैकल्पिक) दृश्यता पैरामीटर के लिए पृष्ठ पथों की सूची।
आइए अब एक ब्लॉक जोड़ें:
<?php function sitemade_block_info(){ $blocks = array(); $blocks[1]['info'] = 'उपयोगकर्ताओं की सूची'; return $blocks; } ?>
अब यह ब्लॉक एडमिन पैनल में दिखाई देगा। आइए इसे बाएँ साइडबार में जोड़ें:
अब जब हमने ब्लॉक जोड़ लिया है, तो इसका कंटेंट hook_block_view() के माध्यम से प्रदर्शित करें।
hook_block_view($delta = '')
:
पैरामीटर
$delta — यह बताता है कि कौन सा ब्लॉक हुक द्वारा संसाधित किया जा रहा है। यह पहचानकर्ता hook_block_info() में परिभाषित किया गया होता है।
वापसी मान (Return Value)
एक ऐरे लौटाया जाता है, जिसमें निम्नलिखित तत्व होते हैं:
subject: ब्लॉक का शीर्षक। यदि ब्लॉक में कोई डिफ़ॉल्ट शीर्षक नहीं है, तो NULL लौटाया जाएगा।
content: ब्लॉक की सामग्री। यह एक रेंडर ऐरे (render array) या HTML स्ट्रिंग हो सकती है।
अब हम यह हुक जोड़ते हैं:
<?php function sitemade_block_view($delta = ''){ $block = array(); // खाली ब्लॉक ऐरे प्रारंभ करें switch ($delta){ case 1: // वही delta जो हमने hook_block_info() में लौटाई थी $block['subject'] = 'उपयोगकर्ता'; // ब्लॉक का शीर्षक $block['content'] = ''; // कंटेंट वेरिएबल इनिशियलाइज़ करें $query = db_select('users', 'u') // उपयोगकर्ताओं की चयन क्वेरी ->fields('u', array('uid', 'name')) // आवश्यक फील्ड्स चुनें ->orderBy('u.uid', 'DESC') // घटते क्रम में क्रमबद्ध करें ->range(0, 5) // केवल पाँच उपयोगकर्ता चुनें ->execute(); // क्वेरी चलाएँ $users = $query->fetchAll(PDO::FETCH_ASSOC); // परिणामों को ऐरे में प्राप्त करें foreach($users as $user){ $block['content'] .='<div><a href="' . base_path() . 'user/' . $user['uid'] . '">' . $user['name'] . '</a></div>'; // base_path() — यह फ़ंक्शन साइट की रूट डायरेक्टरी का पथ लौटाता है } break; } return $block; } ?>
परिणामस्वरूप, हम साइट पर हाल के 5 पंजीकृत उपयोगकर्ताओं की सूची प्राप्त करेंगे, जिनके नाम उनकी प्रोफ़ाइल पृष्ठों से जुड़े होंगे। निश्चित रूप से, लिंक बनाने के लिए l() फ़ंक्शन का उपयोग करना बेहतर होता है, लेकिन इसके लिए एक अलग पाठ आवश्यक है।