Ist es möglich, eine hook_preprocess-Funktion basierend auf dem Entitätstyp wie profile2 zu definieren?

8

Ich ging mit der Funktion durch die möglichen Hooks hook_preprocess(&$vars, $hook)und es stand nur eine Entität zur Verfügung. Ist es möglich, so etwas zu tun hook_preprocess_profile2_entity(), oder muss ich eine if-Bedingung schreiben, um den Entitätstyp einzuchecken hook_preprocess_entity()?

Adam S.
quelle

Antworten:

15

Dadurch wird das Zen-Designmuster für Knotenvorverarbeitungsfunktionen an Entitäten angepasst:

<?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
quelle
Das ist fantastisch. Ich vergesse immer, dass man mit PHP so etwas machen kann.
mpdonadio
Wenn Sie dies in einem übergeordneten Thema tun und erben / überschreiben möchten, müssen Sie sich eingehender mit hook_theme befassen. Zens hook_theme ist ein gutes Beispiel (obwohl langwierig).
Capi Etheriel
Ich wäre dankbar, wenn mir jemand zeigen würde, wie ich außerhalb der Themenebene etwas Ähnliches erreichen kann!
Mach