Czy można zdefiniować funkcję hook_preprocess na podstawie typu jednostki, takiej jak profil2?

8

Przeszedłem przez możliwe haki za pomocą funkcji hook_preprocess(&$vars, $hook)i tylko istota była dostępna do użycia. Czy można zrobić coś takiego hook_preprocess_profile2_entity(), czy też muszę napisać warunek if, aby sprawdzić typ jednostki hook_preprocess_entity()?

Adam S.
źródło

Odpowiedzi:

15

To dostosowuje wzór motywu Zen dla funkcji wstępnego przetwarzania węzła do encji:

<?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
źródło
To jest niesamowite. Zawsze zapominam, że PHP pozwala robić takie rzeczy.
mpdonadio
Jeśli chcesz to zrobić w motywie nadrzędnym i odziedziczyć / zastąpić, musisz głębiej zagłębić się w hook_theme. Hook_theme Zen jest dobrym przykładem (choć długim).
Capi Etheriel,
Byłbym wdzięczny, gdyby ktoś pokazał mi, jak mogę osiągnąć coś podobnego poza warstwą motywu!
Doprowadza