É possível definir uma função hook_preprocess com base no tipo de entidade, como profile2?

8

Percorri os possíveis ganchos usando a função hook_preprocess(&$vars, $hook)e apenas a entidade estava disponível para uso. É possível fazer algo como hook_preprocess_profile2_entity(), ou eu tenho que escrever uma condição if para verificar o tipo de entidade hook_preprocess_entity()?

Adam S
fonte

Respostas:

15

Isso adapta o padrão de tema Zen para funções de pré-processamento de nó 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) {
}
tim.plunkett
fonte
Isso é incrível. Eu sempre esqueço que o PHP permite que você faça coisas assim.
mpdonadio
Se você deseja fazer isso em um tema pai e herdar / substituir, precisará aprofundar-se no tema hook_theme. O hook_theme do Zen é um bom exemplo (embora demorado).
Capi Etheriel 13/09/11
Ficaria agradecido se alguém me mostrasse como posso conseguir algo semelhante fora da camada de tema! Me deixando louco ...
NikLP