क्षेत्र के अनुसार ब्लॉक के लिए थीम हुक सुझाव कैसे बनाया जाए?


14

Drupal 8 के बाद से यह एक विशिष्ट ब्लॉक टेम्प्लेट को लोड करने के लिए टेम्पलेट नामकरण सम्मेलनों के साथ संभव नहीं है, क्योंकि इसे इस क्षेत्र में रखा गया है ( "प्रति-क्षेत्र ब्लॉक मार्कअप और प्रति-क्षेत्र ब्लॉक टेम्प्लेटिंग फीचर हटा दिया गया" )। लेकिन अगर मुझे एक निश्चित क्षेत्र में रखा गया है, तो मुझे ब्लॉक के लिए अलग-अलग html रखना होगा। मैं इसे कैसे पूर्ण करूं?

मैंने MYMODULE_theme_suggestions_block_alter का उपयोग करने के बारे में सोचा है, लेकिन मुझे नहीं पता कि वर्तमान क्षेत्र कैसे प्राप्त करें।

जवाबों:


20

ब्लॉक एंटिटी मिलने पर आप क्षेत्र प्राप्त कर सकते हैं।

.Module या .theme फ़ाइल

use Drupal\block\Entity\Block;

function MODULE_theme_suggestions_block_alter(array &$suggestions, array $variables) {
  if (!empty($variables['elements']['#id'])) {
    $block = Block::load($variables['elements']['#id']);
    $suggestions[] = 'block__' . $block->getRegion() . '__' . $variables['elements']['#id'];
  }
  /* Use this 'else if' only if you are using page_manager module and want to know which region is the block */
  else if (isset($variables['elements']['#configuration']['region'])) {
    $suggestions[] = 'block__page_' . $variables['elements']['#configuration']['region'] . '__' . end(explode(':', $variables['elements']['#plugin_id']));
  }
  return $suggestions;
}

1 संपादित करें: page_manager मॉड्यूल मामले को कवर करें


लगभग आदर्श। आपको यह सुनिश्चित करने के लिए एक isset () जोड़ने की जरूरत है कि #id वास्तव में है। उदाहरण के लिए, यदि आप page_manager का उपयोग करते हैं और वहां ब्लॉक रखते हैं, तो आपके पास #id नहीं होगा।
बर्दिर

@ बर्डिर धन्यवाद;) मुझे लगता है कि इस मामले isset()में आवश्यकता नहीं है, क्योंकि यदि कोई नहीं है #id, तो यह कार्य करने के NULLलिए पास हो जाता ::loadहै, और बस वापस आ जाता है NULL। अंत में, $blockहै NULLऔर कुछ भी नहीं होगा। मेरे देव env Drupal 8.0.4 - page_manager-1.0-alp23 (पहले कभी भी इस मॉड्यूल का उपयोग नहीं किया गया) में परीक्षण किया गया।
Vagner

हाँ, isset () की आवश्यकता है। ऐसी सरणी कुंजी तक पहुँचना जिसके परिणाम PHP सूचना नहीं हैं। अपने लॉग की जाँच करें और आप देखेंगे। मैं हमेशा वर्बोज़ पर त्रुटि प्रदर्शन के साथ विकास करने की सलाह दूंगा, जो कि प्रदान की गई उदाहरण सेटिंग का डिफ़ॉल्ट है। पीपी।
बर्दिर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.