Я хотел бы обеспечить реализацию шаблона в моем модуле и позволить темам переопределить его. По сути, я добавляю предложение с помощью этого упрощенного кода:
function attach_preprocess_node(&$vars) {
$vars['theme_hook_suggestions'][] = 'node__test';
}
(Я не хочу использовать hook_theme , чтобы добавить новую тему , потому что я хочу , чтобы повторно использовать Preprocess функции узла. Название темы громоздки , но я не хочу писать node_ присоединять _% , чтобы избежать путаницы с типом узла.)
Затем я использую hook_theme_registry_alter (), чтобы добавить путь к модулю:
function attach_theme_registry_alter(&$theme_registry) {
$path = drupal_get_path('module', 'attach') . '/themes';
$theme_registry_copy = $theme_registry;
_theme_process_registry($theme_registry_copy, 'phptemplate', 'theme_engine', 'node', drupal_get_path('module', 'node'));
$theme_registry += array_diff_key($theme_registry_copy, $theme_registry);
if (!isset($theme_registry['node']['theme paths'])) {
$theme_registry['node']['theme paths'] = array();
}
if (!isset($theme_registry['node']['theme paths'])) {
$first_element = array_shift($theme_registry['node']['theme paths']);
if ($first_element) {
array_unshift($theme_registry['node']['theme paths'], $first_element, $path);
}
else {
array_unshift($theme_registry['node']['theme paths'], $path);
}
}
}
Однако это не работает. Это означает: файл themes / node - super.tpl.php не используется. Он используется только если я скопировал его в папку темы.
Ответы:
По сути, вы можете избавить себя от головной боли, внедрив
hook_theme()
вместо изменения реестра.Я предлагаю взглянуть на theming_example в проекте « Примеры» , который легко воспроизвести на этой странице документации API , возможно, с особенно полезным кодом на этой странице .
Это все для Drupal 7.
источник
hook_theme
должна дать вам$existing
параметр, который позволяет вам изменять объект, не переопределяя его. Если это не так, то, возможно, вы попали в ошибку.Может быть, это работает:
Важным здесь является ключ « базовый крюк ».
источник
base hook
: drupal.org/node/2106635Мне нравится решение dashohoxha по реализации hook_theme, но я не смог заставить его работать. После еще одного поиска в Google я нашел вариант, который работал хорошо для меня:
Примечания: мой пользовательский модуль называется «mymodule», а мой пользовательский тип контента называется «blog_post». Используемый мной tpl.php называется «node - blog_post.tpl.php» и находится в подпапке «templates» моего модуля.
источник
Вот мой фрагмент для объявления шаблонов представлений, хранящихся в папке «template» моего «custom_module»:
Надеюсь, это поможет кому-то.
источник
Я спросил это однажды на переполнении стека . По сути, вы должны реализовать,
hook_theme_registry_alter()
чтобы ваш путь был добавлен к пути шаблона ловушки темы; затемhook_enable()
вы вызываете drupal_theme_rebuild (), чтобы очистить кэш реестра тем и просканировать ваш путь на наличие шаблонов.источник
hook_enable()
вызывается, когда модуль включен; если модуль уже включен, его необходимо отключить, а затем снова включить.