Как переопределить функцию темы в drupal?

Я искал это, но нашел только результаты, связанные с .файлы tpl.Я хочу переопределить функцию темы (например, theme_user_list) из моего модуля.Как я могу это сделать?

4 ответов


вам нужно будет изменить реестр с помощью hook_theme_registry_alter () и переопределить используемую функцию. Как только вы переопределите функции индекс для рассматриваемой функции и, что важно, очистите кэш, функция замены вашего модуля-mymodule_foo () - должна вступить в силу.

см http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_theme_registry_alter/7 для получения дополнительной информации.


согласно документации на http://api.drupal.org/api/drupal/modules--system--theme.api.php/group/themeable/7:

темы, использующие движок, будут иметь их хорошо названные тематические функции автоматически регистрируется для них. Хотя это может варьироваться в зависимости от тема двигателя, стандартный набор phptemplate-это функции темы должно быть названо THEMENAME_HOOK. Для например, для темы по умолчанию Drupal (Бартик) для осуществления "стол" крюк, phptemplate.двигатель найти bartik_table().

Так что в вашем случае, вы можете переопределить, создав .


вы можете переопределить функцию темы для отдельного вывода с помощью предложений. Сделайте это, когда вы вызываете функцию темы, добавьте два подчеркивания и имя, а затем скопируйте исходную функцию темы в свой .файл модуля, и переименовать его мифологемы_оригинал_функция_имя__имя Е. Г.

<?php
...
$vars['test'] = array(
  '#theme' => 'image_formatter__SOMENAME',
  '#item' => $item,
  '#image_style' => 'large',
);
...
?>

<?php
function MYTHEME_image_formatter__SOMENAME($variables) {
  /* my custom code */
}
?>

после очистки кэшей вы должны увидеть это в реестре тем, чтобы затем вы могли использовать theme_registry_alter, чтобы заменить его, используя имя модуля вместо темы имя.


user491844 ответ правильный, хотя есть более простой: редактировать шаблон темы.РНР.

просто скопируйте всю оригинальную функцию темы в шаблон.php замените "тему" на ваше имя темы в объявлении функции. Так, например, это :

function theme_lt_unified_login_page($variables) {[...]}

стать этот:

function MYTHEMENAME_lt_unified_login_page($variables) {[...]}

затем пустая тема registery (или очистить все кэши).

единственный недостаток в том, что все ваши настройки будут накапливаться в одном файле (шаблон.php) что делает его не таким аккуратным на больших проектах.