दो प्रकार के ब्लॉक हैं, और दो को रेंडर करने का तरीका थोड़ा अलग है:
सामग्री ब्लॉक
सामग्री ब्लॉक वे ब्लॉक हैं जो आप इंटरफ़ेस में बनाते हैं। वे बहुत हद तक नोड्स कॉन्फ़िगर करने योग्य डेटा संरचनाओं जैसे फ़ील्ड्स आदि के साथ हैं। यदि आप इनमें से किसी एक को प्रस्तुत करना चाहते हैं, तो आप वह कर सकते हैं जो आप सामान्य रूप से संस्थाओं के साथ करते हैं, उन्हें लोड करते हैं और उन्हें व्यू बिल्डर के साथ प्रस्तुत करते हैं:
$bid = ??? // Get the block id through config, SQL or some other means
$block = \Drupal\block_content\Entity\BlockContent::load($bid);
$render = \Drupal::entityTypeManager()->
getViewBuilder('block_content')->view($block);
return $render;
प्लगइन ब्लॉक
ब्लॉक भी प्लगइन हो सकते हैं, विभिन्न मॉड्यूल में परिभाषित किए गए हैं। एक उदाहरण ब्रेडक्रंब ब्लॉक हो सकता है। यदि आप इन्हें रेंडर करना चाहते हैं, तो आपको ब्लॉक प्लगइन मैनेजर का उपयोग करना होगा।
$block_manager = \Drupal::service('plugin.manager.block');
// You can hard code configuration or you load from settings.
$config = [];
$plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config);
// Some blocks might implement access check.
$access_result = $plugin_block->access(\Drupal::currentUser());
// Return empty render array if user doesn't have access.
// $access_result can be boolean or an AccessResult class
if (is_object($access_result) && $access_result->isForbidden() || is_bool($access_result) && !$access_result) {
// You might need to add some cache tags/contexts.
return [];
}
$render = $plugin_block->build();
// In some cases, you need to add the cache tags/context depending on
// the block implemention. As it's possible to add the cache tags and
// contexts in the render method and in ::getCacheTags and
// ::getCacheContexts methods.
return $render;
संस्थाओं को कॉन्फ़िगर करें
दो प्रकारों के लिए साझा किए गए ब्लॉक हैं, यह है कि एक बार जब आप उन्हें एक क्षेत्र में सम्मिलित करते हैं, तो आप एक कॉन्फ़िगरेशन इकाई बनाएंगे जिसमें ब्लॉक के लिए सभी सेटिंग्स होती हैं। कुछ मामलों में यह विन्यास संस्थाओं से अधिक उपयोगी होगा। चूंकि एक ही ब्लॉक को विभिन्न क्षेत्रों में और अलग-अलग कॉन्फ़िगरेशन के साथ रखा जा सकता है, इसलिए यह ब्लॉक कॉन्फ़िगरेशन संस्थाओं का उपयोग करके अधिक पेचीदा हो सकता है। अच्छी बात यह है कि आप विशिष्ट कॉन्फ़िगरेशन वाले ब्लॉक को रेंडर करना चाहते हैं, बुरी बात यह है कि इंटरफ़ेस के साथ गड़बड़ करके कॉन्फिग आईडी बदल सकते हैं, इसलिए उपयोगकर्ताओं को ब्लॉक इंटरफ़ेस का उपयोग करने देने के बाद कोड काम नहीं कर सकता है।
$block = \Drupal\block\Entity\Block::load('config.id');
$render = \Drupal::entityTypeManager()
->getViewBuilder('block')
->view($block);
return $render;