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

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.