¿Es posible definir una función hook_preprocess basada en el tipo de entidad como profile2?


8

Recorrí los posibles ganchos usando la función hook_preprocess(&$vars, $hook)y solo la entidad estaba disponible para usar. ¿Es posible hacer algo como hook_preprocess_profile2_entity(), o tengo que escribir una condición if para registrar el tipo de entidad hook_preprocess_entity()?

Respuestas:


15

Esto adapta el patrón de tema Zen para funciones de preproceso de nodo a entidades:

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

Esto es asombroso Siempre olvido que PHP te permite hacer cosas como esta.
mpdonadio

Si desea hacerlo en un tema principal y heredar / anular, tendrá que profundizar en hook_theme. Zen's hook_theme es un buen ejemplo (aunque largo).
Capi Etheriel

¡Estaría agradecido si alguien me mostrara cómo puedo lograr algo similar fuera de la capa de tema!
Volviéndome
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.