Переменные предварительной обработки только для определенных блоков
Вопрос
Возможна ли предварительная обработка переменных только для определенных блоков?Я создал такую функцию: 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
}
}