केवल कुछ ब्लॉकों के लिए प्रीप्रोसेस चर


11

क्या यह केवल कुछ ब्लॉकों के लिए प्रीप्रोसेस चर संभव है? मैंने ऐसा फंक्शन बनाया है: mytheme_preprocess_block__aggregator(&$vars)लेकिन यह काम नहीं करता है।

- संपादित करें -

यह Drupal 8 https://drupal.org/node/1751194 में तय किया गया लगता है


आपके द्वारा संपादित किया गया लिंक और आपके द्वारा वहां लिंक किया गया लिंक केवल थीम हुक सुझावों से संबंधित है, है ना?
20

जवाबों:


20

दुर्भाग्य से, ऐसा करने का कोई तरीका नहीं है (हुक_फॉर्म_ल्टर () के समान)।

ऐसा करने का सबसे अच्छा तरीका $ चर ['ब्लॉक'] -> बोली को केवल उन ब्लॉकों में लागू करना होगा जो आप चाहते हैं:

function mytheme_preprocess_block(&$variables) {
  if ($variables['block']->bid === 'target_block_id') {
    // do something for this block
  } else if ($variables['block']->bid === 'other_target_block_id') {
    // do something else for this other block
  }
}

4
मैंने Drupal कोड को देखा, और Drupal के लिए hook_preprocess_block_MODULE()या नहीं दिखता है THEME_preprocess_block_MODULE()। यह एक विशेष तरीके से __विषय फ़ंक्शन नामों में निहित है, जब उदाहरण के लिए, के theme()रूप में लागू किया गया है theme('links__contextual__node', ...)
kiamlaluno

हम्म, जानकर अच्छा लगा!
एलेक्स वेबर

'block_id' आमतौर पर ब्लॉक का मशीन नाम सही है?
क्रिसली

2
कृपया का उपयोग करें $variables['block']->bidऔर नहीं के $variables['block_id']रूप में 'block_id' उस ब्लॉक के लिए अद्वितीय नहीं है।
डंकनमो

3
मुझे लगता है कि अपने एक छोटे से दोस्ताना सशर्त स्विच करने के लिए पर $variables['block']->deltaअगर$variables['block']->module == 'MODULE'
पीट

3

बस पुष्टि करने के लिए, ड्रुपल 8 में आप विशिष्ट ब्लॉकों के लिए प्रीप्रोसेस फ़ंक्शन लिख सकते हैं। उदाहरण के लिए:

द्रुपाल al

mytheme_preprocess_block__system_branding_block(&$vars) {
  // Make changes to the the system branding block
}

लेकिन आप हुक_परप्रोसेसर_ब्लॉक और प्लगइन आईडी का भी उपयोग कर सकते हैं:

function mytheme_preprocess_block(&$vars) {
  if ($vars['plugin_id'] == 'system_branding_block') {
    // Make changes to the the system branding block
  }
}

जैसा कि एलेक्स ने बताया, ड्रुपल 7 में आपको HOOK_preprocess_block, और एक आईडी चेक के साथ रहना होगा।

द्रुपाल al

mytheme_preprocess_block(&$vars) {
  if ($vars['block']->bid === 'target_block_id') {
    // make changes to this block
  }
}

इसे अभी D8 पर आज़माया, न तो MYTHEME_preprocess_block__system_branding_block(&$vars)काम करता है और न ही करता है MYTHEME_preprocess_block__page_title_block(&$variables)
लेमनैक्स

2
mytheme_preprocess_block__{my_block_machine_name}(&$variables)D8.3 पर काम करता है
टिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.