是否可以基于诸如profile2之类的实体类型定义hook_preprocess函数?


8

我通过使用函数遍历了可能的钩子hook_preprocess(&$vars, $hook),只有实体可供使用。是否可以做类似的事情hook_preprocess_profile2_entity(),还是我必须编写一个if条件来检查其中的实体类型hook_preprocess_entity()

Answers:


15

这将Zen主题模式用于节点预处理功能适应实体:

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

这太棒了。我总是忘记了PHP可以让您做这样的事情。
mpdonadio

如果要在父主题中进行继承和覆盖,则必须更深入地研究hook_theme。Zen的hook_theme是一个很好的例子(虽然冗长)。
Capi Etheriel 2011年

如果有人向我展示了如何在主题层之外实现类似的功能,我将不胜感激!让我发疯……
NikLP 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.