Как переопределить функцию темы в 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) что делает его не таким аккуратным на больших проектах.