Как переопределить функцию темы в drupal? - PullRequest
6 голосов
/ 02 июля 2011

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

Ответы [ 4 ]

10 голосов
/ 18 июля 2011

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

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

1 голос
/ 05 июля 2011

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

темам, использующим движок, будут автоматически зарегистрированы их именованные функции тем.Хотя это может варьироваться в зависимости от механизма тем, стандартным набором phptemplate является то, что функции тем должны называться THEMENAME_HOOK.Например, для стандартной темы Drupal (Bartik) для реализации хука 'table', phptemplate.engine найдет bartik_table ().

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

0 голосов
/ 29 апреля 2014

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

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

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

Станьте так:

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

затем зарегистрируйте пустую тему (или очистите все кэши).

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

0 голосов
/ 12 апреля 2012

Вы можете переопределить функцию темы для индивидуального вывода, используя предложения. Сделайте это, когда вы вызываете функцию темы, добавляете два подчеркивания и имя, затем копируете оригинальную функцию темы в ваш файл .module и переименовываете ее в MYTHEME_original_function_name__ANAME Например.

<?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, чтобы заменить его, используя имя вашего модуля вместо имени темы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...