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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.