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()?

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.