Ön işlem değişkenleri yalnızca belirli bloklar için


11

Ön işlem değişkenleri sadece belirli bloklar için mümkün müdür? Ben böyle bir fonksiyon yarattım: mytheme_preprocess_block__aggregator(&$vars)ama çalışmıyor.

-- DÜZENLE --

Drupal 8'de düzeltilmiş gibi görünüyor https://drupal.org/node/1751194


Yaptığınız düzenleme ve oraya yapıştırdığınız bağlantı yalnızca tema kanca önerileriyle ilgileniyor gibi görünüyor, değil mi?
leymannx

Yanıtlar:


20

Ne yazık ki, bunun böyle bir yolu yoktur (hook_form_alter () benzeri).

Bunu yapmanın en iyi yolu, yalnızca istediğiniz bloklara değişiklik uygulamak için $ değişkenleri ['block'] -> bid kullanmak olacaktır:

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 koduna baktım ve Drupal hook_preprocess_block_MODULE()ya da aramıyor THEME_preprocess_block_MODULE(). Örneğin, __işlev theme()çağrıldığında tema işlev adlarında yer alan belirli bir şekilde işler theme('links__contextual__node', ...).
kiamlaluno

Hmm, bilmek güzel!
Alex Weber

'block_id' genellikle bloğun makine adı doğru mu?
chrisjlee

2
'Block_id' o blok için benzersiz $variables['block']->bidolmadığından lütfen yararlanın $variables['block_id'].
Duncanmoo

3
Bence $variables['block']->deltaeğer şartlı olarak açmak için biraz dostça$variables['block']->module == 'MODULE'
Pete

3

Sadece onaylamak için, Drupal 8'de belirli bloklar için önişleme fonksiyonları yazabilirsiniz. Örneğin:

Drupal 8

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

Ancak hook_preprocess_block ve eklenti kimliğini de kullanabilirsiniz:

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

Alex'in belirttiği gibi, Drupal 7'de HOOK_preprocess_block ve kimlik kontrolüne bağlı kalmanız gerekir:

Drupal 7

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

Şu anda D8'de denedim, ne MYTHEME_preprocess_block__system_branding_block(&$vars)çalışıyor ne de yapıyor MYTHEME_preprocess_block__page_title_block(&$variables).
leymannx

2
mytheme_preprocess_block__{my_block_machine_name}(&$variables)D8.3 üzerinde çalışıyor
Tim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.