Est-il possible de définir une fonction hook_preprocess en fonction du type d'entité tel que profile2?

8

J'ai parcouru les crochets possibles en utilisant la fonction hook_preprocess(&$vars, $hook)et seule l'entité était disponible à utiliser. Est-il possible de faire quelque chose comme hook_preprocess_profile2_entity(), ou dois-je écrire une condition if pour archiver le type d'entité hook_preprocess_entity()?

Adam S
la source

Réponses:

15

Cela adapte le modèle de thème Zen pour les fonctions de prétraitement de nœud aux entités:

<?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
la source
C'est génial. J'oublie toujours que PHP vous permet de faire des choses comme ça.
mpdonadio
Si vous voulez le faire dans un thème parent et hériter / remplacer, vous devrez creuser plus profondément dans hook_theme. Le hook_theme de Zen est un bon exemple (bien que long).
Capi Etheriel
Je serais reconnaissant si quelqu'un me montrait comment je pouvais réaliser quelque chose de similaire en dehors de la couche thème! Me
rendre