Можно ли определить функцию hook_preprocess на основе типа объекта, такого как profile2?

8

Я прошел через возможные хуки с помощью функции, hook_preprocess(&$vars, $hook)и только сущность была доступна для использования. Можно ли сделать что-то подобное hook_preprocess_profile2_entity()или мне нужно написать условие if для проверки типа объекта hook_preprocess_entity()?

Адам С
источник

Ответы:

15

Это адаптирует шаблон темы Zen для функций предварительной обработки узла к объектам:

<?php

/**
 * Implements template_preprocess_entity().
 *
 * Runs a entity specific preprocess function, if it exists.
 */
function MYTHEME_preprocess_entity(&$variables, $hook) {
  $function = __FUNCTION__ . '_' . $variables['entity_type'];
  if (function_exists($function)) {
    $function($variables, $hook);
  }
}

/**
 * Profile2 specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_profile2(&$variables, $hook) {
}

/**
 * Field Collection specific implementation of template_preprocess_entity().
 */
function MYTHEME_preprocess_entity_field_collection_item(&$variables, $hook) {
}
tim.plunkett
источник
Это круто. Я всегда забываю, что PHP позволяет делать такие вещи.
mpdonadio
Если вы хотите сделать это в родительской теме и наследовать / переопределить, вам придется копать глубже в hook_theme. Дзенская hook_theme - хороший пример (хотя и длинный).
Capi Etheriel
Я был бы благодарен, если бы кто-то показал мне, как я могу добиться чего-то похожего за пределами слоя темы!
Сводит