Я создал функциональный модуль, содержащий только вид и тип контента.
Прямо сейчас мои page-node-x.tpl.php
и мои views-view-y.tpl.php
файлы лежат в моем каталоге тем.
Можно ли переместить их в мой функциональный модуль?
Модуль, который реализует hook_preprocess_page()
или hook_preprocess_node()
может предлагать новые файлы шаблонов путем изменения переменной $variables['theme_hook_suggestions']
.
Код, содержащийся в template_preprocess_page (), который инициализирует эту переменную, выглядит следующим образом.
// Populate the page template suggestions.
if ($suggestions = theme_get_suggestions(arg(), 'page')) {
$variables['theme_hook_suggestions'] = $suggestions;
}
Каждое предложение темы должно совпадать с записью, возвращаемой hook_theme () .
В представлениях должна быть эквивалентная функция предварительной обработки для использования аналогичным образом или способ, hook_preprocess_page()
который позволяет функции понять, связана ли страница с представлением.
Решение по добавлению ключа 'template file' hook_views_api()
пока не работает в Drupal 7. Тем не менее, это работает как шарм:
/**
* Implements hook_theme().
*/
function bigtexas_theme() {
return array(
'views_view_fields__slideshow' => array(
'variables' => array('view' => NULL, 'options' => NULL, 'row' => NULL),
'template' => 'views-view-fields--slideshow',
'base hook' => 'views_view_fields',
'path' => drupal_get_path('module', 'bigtexas') . '/theme',
),
);
}
В реестре тем Drupal хранит всевозможную информацию о том, какие файлы шаблонов, функции темы и т. Д. Использовать. В дальнейшем это может привести к моментам WTF, поскольку все будет работать не так, как по умолчанию.
В любом случае, как и у всех друпалов, есть ловушка: hook_theme_registry_alter
вы можете использовать ее, чтобы изменить реестр тем, и это переместит ваши файлы шаблонов в модуль. Я бы не советовал делать это, поскольку это сделает обслуживание сайта более сложным. Но если вы хотите сделать это, вот как это делается.
Для представлений в теории существует механизм для шаблонов представлений (возможно, он работает для всех шаблонов).
Вы можете установить ключ "путь к шаблону" в вашей реализации hook_views_api вашего пользовательского модуля.
Как только у вас появятся эти представления, вы будете сканировать указанный каталог на наличие файлов шаблонов. К сожалению, самый простой в настоящее время не работает, так что эта функция, вероятно, еще не перенесена в drupal7, но если кто-то хочет попасть в него, смотрите _views_find_module_templates () в views.module.
источник
Самый простой способ - использовать
hook_theme_registry_alter()
и просто добавить путь вашего модуля к путям темы:источник
theme()
реализацию, не похоже, что этоtheme path
может быть массив. Вы уверены, что это работает? См. Api.drupal.org/api/drupal/includes%21theme.inc/function/theme/7theme paths
раньше работал в Drupal 6, но Drupal 7 изменил это поведение в drupal.org/node/678714 Из комментариев № 29 и № 31 в упомянутом выпуске кажется, что предложения тем из модулей должны быть объявлены в модуле hook_theme этого модуля, но как это сделать, оставлено читателю в качестве упражнения: /Как насчет слегка абстрагированного подхода с Context Theme?
http://drupal.org/project/context_reaction_theme
Оберните ваш контекст в функции, и это даже можно экспортировать. Но, возможно, это на самом деле вопрос гуру из Drupal, который хочет создать что-то более глубокое и узнать маршрут.
источник
Я начал с ответа googletorp и создал общую функцию:
Это позволяет не только перезаписывать позицию и имя узла и просматривать файлы tpl, но и предоставлять функцию предварительной обработки для представлений.
Так что если вы получили свой собственный модуль
mymodule
с файлом шаблона, напримерsites/all/modules/mymodule/templates/foo--variant.tpl.php
, теперь вы можете легко изменить реестр тем, чтобы использовать свой собственный каталог шаблонов:источник
Как сказал @jcsio, принятый ответ на этой странице работает, но шаблон не может быть переопределен темой.
http://www.metachunk.com/blog/adding-module-path-drupal-7-theme-registry предлагает решение, позволяющее добавить путь для сканирования вашего модуля (и подпапок) для всех видов файлов .tpl.php.
Я немного изменил его, так как он содержал переменную 'theme paths', которая, похоже, не использовалась в Drupal 7.
Я попробовал как принятый ответ, так и это решение, последнее у меня пока работает!
источник