Вместо добавления файлов tpl (в данном случае media-youtube-video.tpl.php) в тему. Как я могу переопределить шаблоны полей из пользовательского модуля? В том числе, когда поле используется в представлении.
Я уверен, что должен быть более простой способ сделать это, но это то, что я обычно делаю:
1.
Зарегистрируйте основную реализацию темы в реестре тем Drupal. Итак, mymod_theme()
добавьте новый элемент. variables
Ключ должен совпадать с media_youtube_video
темой , т.е.
/**
* Implements hook_theme().
*/
function mymod_theme() {
return array(
'my_media_youtube_video' => array(
'variables' => array('uri' => NULL, ...), // see media_youtube_theme() for this
// bundle the template file with the module itself
// i.e. theme/my-media-youtube-video.tpl.php
'template' => 'my-media-youtube-video',
'path' => drupal_get_path('module', 'mymod') . '/theme
)
);
}
2. Добавьте обработчик препроцесса для исходной реализации темы и предложите свою новую реализацию здесь.
/*
* Implements hook_preprocess_media_youtube_video().
*
* Or more generally, hook_preprocess_THEME().
*/
function mymod_preprocess_media_youtube_video(&$variables) {
// If your overriding implementation is not a template but
// is implemented in a different file,
// then remember to include the file explicitly at this point..
$variables['theme_hook_suggestions'][] = 'my_media_youtube_video';
}
Предложения оцениваются системой тем в стиле LIFO . Вы можете прочитать больше об этом здесь .
Предположим, вы знаете, что другой модуль также использует тот же подход, что и этот, чтобы переопределить реализацию, тогда вы можете реализовать hook_module_implements_alter()
и заставить ваш hook_preprocess_THEME()
(см. Выше) быть вызванным последним. Вы можете прочитать о hook_module_implements_alter()
здесь .
Это верно и для Views. Таким образом, вам просто нужно узнать правильное уникальное имя исходной реализации темы, которую вы хотите переопределить (обычно это определяется в исходном модуле), добавить ловушку предварительной обработки и добавить туда свое предложение переопределения.
Вы также можете удалить новую тему из модуля следующим образом:
Затем поместите в каталог / template файл, который содержит шаблон поля, подобный этому (стандартному), и назовите его field - field-nameofyourfield.tpl.php:
После очистки кэша ваша тема будет использовать этот сохраненный шаблон, если он не переопределен самой темой, что означает, что вы можете переопределить этот шаблон в своей теме.
источник