como definir a função de pré-processo da entidade

10

Meu módulo personalizado define uma entidade personalizada, que estende a classe EntityAPIController. Eu consegui fazê-lo funcionar basicamente, ou seja, exibindo campos etc. através do meu arquivo tpl.php personalizado. Mas eu gostaria de criar uma mymodule_preprocess_entityfunção (como sugerido aqui ) para adicionar variáveis ​​personalizadas ao arquivo tpl.php. Mas essa função não está em execução (não é chamada).

Além disso, quando exibi essa entidade, notei que a função template_preprocess_entity(&$variables)de entity.module também não está em execução.

O que mais precisa ser definido para fazer com que o pré-processo funcione para a entidade personalizada que está sendo chamada?

camcam
fonte
o seu uso mymodule - os usos sugestão Mytheme
rémy

Respostas:

9

Eu criei uma mymodule_preprocess(&$variables, $hook)função geral e ela mostrou que o nome da função específica deveria ser mymodule_preprocess_myentity. Onde myentityé o nome próprio da entidade.

Portanto, este código está funcionando para mim:

function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
    $function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
    if (function_exists($function)) {
      $function($variables, $hook);
    }
  }
}

function mymodule_preprocess_myentity(&$vars) {
  ...
}
camcam
fonte
2

Uma abordagem mais genérica:

/**
 * Implements hook_preprocess().
 */
function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) {
    $myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
    $modules = module_implements($myhook);

    foreach ($modules as $module) {
      $function = "{$module}_{$myhook}";
      $function($variables);
    }
  }
}

Infelizmente module_implements(), não verifica se o tema ativo implementa o gancho de pré-processo.

fireh
fonte