Переменные предварительной обработки только для определенных блоков

drupal.stackexchange https://drupal.stackexchange.com/questions/2006

  •  16-10-2019
  •  | 
  •  

Вопрос

Возможна ли предварительная обработка переменных только для определенных блоков?Я создал такую ​​функцию: mytheme_preprocess_block__aggregator(&$vars) но это не работает.

-- РЕДАКТИРОВАТЬ --

Кажется, это исправлено в Drupal 8.https://drupal.org/node/1751194

Это было полезно?

Решение

К сожалению, нет способа сделать это таким образом (аналогичноook_form_alter()).

Лучший способ сделать это — использовать $variables['block']->bid, чтобы применять изменения только к нужным блокам:

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
  }
}

Другие советы

Просто для подтверждения: в Drupal 8 вы можете писать функции предварительной обработки для определенных блоков.Например:

Друпал 8

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

Но вы также можете использоватьook_preprocess_block и идентификатор плагина:

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

Как упоминал Алекс, в Drupal 7 вам придется использовать HOOK_preprocess_block и проверку идентификатора:

Друпал 7

mytheme_preprocess_block(&$vars) {
  if ($vars['block']->bid === 'target_block_id') {
    // make changes to this block
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top