Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Предварительная обработка и изменение атрибутов в файле .theme

05/05/2020, by maria

Как и в Drupal 7, вы можете влиять на вывод определенного HTML с помощью функций предварительной обработки. Например, если вы хотите добавить класс в меню и предпочитаете делать это на уровне PHP, вы можете это сделать. Это хороший способ изменить разметку, относящуюся к теме, но если вы хотите сделать разметку, не зависящую от темы, лучше написать собственный модуль.

(Примечание: для целей документации здесь «mytheme» - это имя машины вашей темы; например, «bartik» - это имя машины темы.)

Для работы с функциями предварительной обработки:

1. Создайте или отредактируйте файл в каталоге вашей темы под названием mytheme.theme

2. Создайте функцию, такую ​​как mytheme_preprocess_HOOK, где HOOK ссылается на элемент, на который вы хотите повлиять*

3. Напишите свои изменения и сохраните

4. Перестройте кеш, чтобы ваши изменения были доступны (если у вас установлен drush, drush cr в командной строке)

* Имена HOOK следуют за рекомендациями шаблона twig. Чтобы создать хук для page.html.twig, вы создаете страницу mytheme_preprocess_page. Чтобы создать хук для узла - article.html.twig, вы создаете mytheme_preprocess_node__article (заменяя черты подчеркиванием). Чтобы узнать имена хуков, смотрите раздел «Поиск файлов шаблонов с отладкой».

Давайте предположим, что мы хотели добавить класс my-menu ко всем меню на вашем сайте. Предполагая, что ваша тема называется «mytheme», вы должны написать следующую функцию:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  // If there is not an existing class array, create an empty array.
  if (!isset($variables['attributes']['class'])) {
    $variables['attributes']['class'] = [];
  }
  // Merge with any classes that may have been set by other hook_preprocess_menu invocations
  $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-menu']);
}

Это очень похоже на Drupal 7 и помогает, если вы хотите настроить целевое меню.

Вы можете проверить объект $variable с условием, чтобы определить, с каким меню вы работаете. Элементы внутри $variables становятся доступными в twig после предварительной обработки темы.

Теперь, чтобы расширить наш пример, давайте предположим, что мы хотим добавить класс «my-main-menu» в главное меню вашего сайта. Это будет функция для этого:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  if ($variables['menu_name'] == 'main') {
    if (!isset($variables['attributes']['class'])) {
      $variables['attributes']['class'] = [];
    }
    $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-main-menu']);  }
}

Отличия от Drupal 7

Больше нет файла template.php. Этот файл был заменен mytheme.theme. Тем не менее, он все еще функционирует во многом таким же образом, позволяя хукам изменять вывод.

Другие полезные ссылки

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.