Работа с шаблонами Twig
Drupal позволяет вам переопределить все шаблоны, которые используются для создания разметки HTML, чтобы вы могли полностью контролировать разметку, которая отображается как вывод в пользовательской теме. Существуют шаблоны для каждого элемента страницы, начиная с HTML высокого уровня и заканчивая небольшими полями.
Переопределение шаблонов
Вы можете переопределить основные шаблоны Drupal, добавив в папку темы шаблоны, соответствующие определенному соглашению об именах.
Чтобы переопределить шаблоны, вам необходимо:
1. Найдите шаблон, который вы хотите переопределить.
2. Скопируйте файл шаблона из его базового расположения в папку вашей темы.
3. (необязательно) Переименуйте шаблон в соответствии с соглашениями об именах, чтобы нацелить более конкретное подмножество областей, где используется шаблон.
4. Измените шаблон по своему вкусу.
Как только вы скопируете файл шаблона в свою тему и очистите кеш, Drupal начнет использовать ваш экземпляр файла шаблона вместо базовой версии.
Вы можете узнать, какие шаблоны используются для любой части страницы, используя инструменты отладки Twig.
Тема hook предложения
Иногда вы хотите внести изменения в файл шаблона, но только для некоторых мест, где он используется. Типичным примером является внесение изменений в файл шаблона узла только для узлов определенного типа. Тематический слой Drupal позволяет вам ориентироваться на конкретные случаи использования файла шаблона, следуя определенному соглашению об именах. При визуализации узла статьи Drupal сначала ищет файл шаблона node - article.html.twig и использует его, если он существует. Если этого не произойдет, Drupal обратится к стандартному шаблону node.html.twig. Процесс, с помощью которого Drupal определяет, какие возможные имена может использовать файл шаблона, называется рекомендациями по подбору темы.
Предложения хуков тем позволяют вам реализовать целевые переопределения в вашей теме для файлов шаблонов с определенным соглашением об именах.
Все слои из ядра, модулей, движков тем и тем могут предоставить предложения. Вы можете добавлять или изменять предложения, используя хуки:
- hook_theme_suggestions_HOOK(array $variables)
- hook_theme_suggestions_alter(array &$suggestions, array $variables, $hook)
- hook_theme_suggestions_HOOK_alter(array &$suggestions, array $variables)
Восстановить кеш
При работе с предложением перехвата темы есть вероятность, что Drupal использует свой кеш, а не новые шаблоны, как было предложено. Очистите кеш, если у вас возникла эта проблема. Чтобы очистить кеш, выберите один из методов, описанных в разделе Очистка кеша Drupal.
Исходная информация
Вы можете рассматривать предложения как подсказки именования, указывающие системе выбирать, основываясь на правильных обстоятельствах.
Шаблонные предложения устанавливаются через зацепки для тематических предложений, которые могут быть изменены. Эти хуки позволяют любому модулю или теме предоставлять альтернативные функции темы или предложения по именам шаблонов и переупорядочивать или удалять предложения, предоставляемые hook_theme_suggestions_HOOK() или более ранними вызовами этой хуки.
Как Drupal определяет подсказки для темы страницы на основе пути
Вот еще одно объяснение, основанное на функции theme_get_suggestions():
Список возможных шаблонов для данной страницы генерируется Drupal с помощью функции theme_get_suggestions(), которая вызывается функцией system_theme_suggestions_page().
Путь к странице в Drupal сначала разбивается на его компоненты. Как упомянуто выше, путь Drupal не является ни одним из его псевдонимов: для страницы существует один и только один путь Drupal. Для примеров "http://www.example.com/node/1/edit" и "http://www.example.com/mysitename?q=node/1/edit" путь Drupal - это node/1/edit, и его компонентами являются "node", 1, и "edit"
Далее префикс устанавливается на «page». Затем для каждого компонента применяется следующая логика:
1. Если компонент представляет собой число, добавьте префикс плюс «__%» в список предложений.
2. Независимо от того, является ли компонент числом или нет, добавьте префикс плюс «__» плюс компонент в список предложений.
3. Если компонент не является числом, добавьте «__» плюс компонент к префиксу.
После повторения списка компонентов, если страница является главной страницей (как установлено в "Administration > Configuration > System > Site information.", то «page__front» добавляется в список предложений.
Обратите внимание, что в конечном итоге, чтобы превратить предложение в фактическое имя файла, «__» превращается в «-», а «.html.twig» добавляется к предложению. Таким образом, для node/1/edit мы получаем следующий список предложений:
1. page.html.twig (это всегда предложение)
2. page--node.html.twig (и префикс установлен в page__node)
3. page--node--%.html.twig
4. page--node--1.html.twig (префикс не изменяется, поскольку компонент является числом)
5. page--node--edit.html.twig (и префикс установлен в page__node__edit)
6. page--front.html.twig (но только если node / 1 / edit является первой страницей)
Когда страница действительно отображается, проверяется последнее предложение. Если это существует, то это предложение используется. В противном случае проверяется следующее предложение и так далее. Конечно, если ни одно из основных предложений не существует, page.html.twig является последним предложением. Это также объясняет, почему page--front.html.twig, если он существует, переопределяет любое другое предложение для главной страницы: это всегда последнее предложение для страницы, обозначенной как главная страница.
Отличия от Drupal 7
Ранее, чтобы изменить предложения шаблона, вы изменили $variable['theme_hook_suggestion'] и $variable['theme_hook_suggestions'] в функциях предварительной обработки, чтобы ввести предложения темы. В Drupal 8 модули и темы теперь определяют и изменяют предложения тем в своих собственных специальных хуках.
Больше информации
Изменить запись Новые хуки для тематических предложений
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.