किसी भी टेम्पलेट में ब्लॉक सम्मिलित करना (drupal insert block into template)
Drupal 8
Twig टेम्पलेट में PHP कोड को सीधे कॉल नहीं किया जा सकता, इसलिए हमें पहले से तैयार ब्लॉक को टेम्पलेट में पास करना होता है। अगर आप किसी नोड टेम्पलेट (node template) में ब्लॉक दिखाना चाहते हैं, तो आप थीम में themename_preprocess_node() फ़ंक्शन का उपयोग कर सकते हैं। यदि आप ब्लॉक को पेज टेम्पलेट में जोड़ना चाहते हैं, तो इसके लिए themename_preprocess_page() का उपयोग करें। इस फ़ंक्शन में वेरिएबल पास करें और फिर Twig टेम्पलेट में उसे प्रदर्शित करें।
एडमिन पैनल के माध्यम से बनाए गए ब्लॉक
$block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block);
उदाहरण के लिए, themename_preprocess_node() (नोड टेम्पलेट) में यह कोड इस प्रकार लिखा जा सकता है:
function themename_preprocess_node(&$variables) { $block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block); }
अब node.html.twig टेम्पलेट में आप ब्लॉक को इस तरह दिखा सकते हैं:
{{ block_output }}
प्लगइन के माध्यम से बनाए गए ब्लॉक
ऐसे ब्लॉक भी लगभग उसी तरह दिखाए जा सकते हैं जैसे एडमिन के माध्यम से बनाए गए ब्लॉक, केवल कोड थोड़ा अलग होता है:
$block_manager = \Drupal::service('plugin.manager.block'); // यहाँ आप ब्लॉक के लिए अपनी सेटिंग्स जोड़ सकते हैं। $config = []; $plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config); // कुछ ब्लॉक्स में देखने की अनुमति (access) अलग-अलग हो सकती है। $access_result = $block_plugin->access(\Drupal::currentUser()); // अगर एक्सेस नहीं है तो खाली ऐरे लौटाएगा। if ($access_result->isForbidden()) { return []; } $render = $plugin_block->build(); // यहाँ आप कैश टैग्स या कॉन्टेक्स्ट्स जोड़ सकते हैं। return $render;
वही कोड बिना टिप्पणियों के:
$block_manager = \Drupal::service('plugin.manager.block'); $config = []; $plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config); $access_result = $block_plugin->access(\Drupal::currentUser()); if ($access_result->isForbidden()) { return []; } $render = $plugin_block->build(); return $render;
Drupal 7
Drupal 7 में यह फ़ंक्शन लगभग वही है, केवल पैरामीटर थोड़े अलग हैं। दो पैरामीटर (block, view) की जगह एक block_view पैरामीटर का उपयोग किया जाता है:
print render(module_invoke('block', 'block_view', '12'));
यदि आप Views ब्लॉक सम्मिलित करना चाहते हैं, तो यह कोड उपयोग करें:
print render(module_invoke('views', 'block_view', 'feedbacks-block'));
Drupal 7 में Views ब्लॉक को इस तरह जोड़ा जाता है — ध्यान दें कि अब पहले ब्लॉक की डेल्टा में संख्या नहीं लिखी जाती, केवल feedbacks-block नाम दिया जाता है।
Drupal 6
यदि आपको किसी भी स्थान पर ब्लॉक सम्मिलित करना है, तो module_invoke() फ़ंक्शन का उपयोग करें:
$block = module_invoke('views', 'block', 'view', 'block_name'); print $block['content'];
उदाहरण के लिए, यदि आप एडमिन के माध्यम से बनाए गए ब्लॉक को जोड़ना चाहते हैं, तो यह कोड उपयोग करें:
$block = module_invoke('block', 'block', 'view', 12); print $block['content'];
यहाँ 12 ब्लॉक की डेल्टा (ID) है।
अगर आप Views ब्लॉक सम्मिलित कर रहे हैं, तो ऐसा करें:
$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1'); print $block['content'];
यहाँ feedbacks-block_1 ब्लॉक का नाम है, feedbacks — view का नाम है, और block_1 — उस view में डिस्प्ले का नाम है।