- Twig теперь основа темизации для Drupal 8, обработчик шаблонов PHP Template бывший одним из основных для Druapl темизации в течение многих лет, ушёл.
- Как и в большинстве последних major версиях Drupal, API для Drupal 8 снова изменился и это прямо влияет на то как вы делаете что-то в контексте темизации.
Темизация и Twig
Что всё это значит? Во-первых, вы больше не можете использовать PHP-код в темизации, это всё Twig. Twig упрощает темизацию и облегчает понимание. В Drupal 8 старый файл template.php теперь становится файлом .theme вашей темы, содержащий специальный PHP-код, который рендерится из Twig переменных в twig шаблон. Синтаксис Twig легко понять.
Например, в page.tpl.php Drupal 7 у нас есть базовый код, который отображает блок в регионе:
<?php if (!empty($page['preface_first'])): ?>
<?php print render($page['preface_first']); ?>
<?php endif; ?>
С Twig и Drupal 8, в нашем шаблоне page.html.twig, мы можем сделать это так:
{% if page.preface_first %}
{{ page.preface_first }}
{% endif %}
Итак, как вы видите, с Twig больше нет «tipple fips» (.tpl.php файлов). Наименование .html.twig теперь постоянно для всех шаблонов тем. В общем Twig значительно упрощает путь обработки переменных. Итак, теперь там где вы использовали
print render($page['some_var'])
или
print render($content['some_var'])
теперь просто используйте
{{ page.some_var }}
или просто
{{ some_var }}
в зависимости от использования и расположения.
Вот ключевые соглашения об именах файлов, которые были изменены в Drupal 8:
Drupal 7 > Drupal 8
- MYTHEME.info > MYTHEME.info.yml
- template.php > MYTHEME.theme
- template_name.tpl.php > template_name.html.twig
Я был удивлён тому, что theme-settings.php не был переименован и как это работает рука об руку с тем, что раньше было template.php. Также не многое изменилось в theme-settings.php, обычно это работает из Drupal 7 без изменений, хотя я не мог найти страницу с описанием API function system_theme_settings для Drupal 8.
Другое большое изменение в шаблонах это то, что массивы атрибутов и классов были объединены вместе в объект атрибутов. Перед тем, как рендерить глобальные классы и атрибуты для body, нод и комментариев как:
class="<?php print $classes; ?>"<?php print $attributes; ?>
… если преобразовать которые слово в слово для Twig, то получится:
class="{{ classes }}"{{ attributes }}
Однако, это не совсем рабочий вариант, на самом деле по новому это объявляется так:
class="{{ attributes.class }}" {{ attributes }}
Для краткости, вы можете просто сделать так:
{{ attributes }}
… без вывода конкретных классов, эта одна переменная делает всё. Я предпочитаю первый метод, так как это позволяет задать тегу свои собственные классы темы, если хотите, такие как clearfix или любой другой.
info файл темы
Другим важным изменением относящемся к темизации в Drupal 8, является оформление info файла. Теперь он оформляется в YAML стиле и анализируется компонентом Symfony YAML. Преобразование info файла для Drupal 7 было довольно тривиально. Я взглянул на реализацию в Bartik и использовал его в качестве руководства, что бы узнать достаточно для преобразования Gratis. Например, что было раньше:
; Stylesheets
stylesheets[all][] = css/style.css
теперь будет выглядеть так:
stylesheets:
all:
- css/style.css
Ещё одна проблема с которой я столкнулся при портировании Gratis, это то, что казалось было много конфликтных совпадений классов между новой админ панелью Drupal 8 и Gratis. Кажется, что админ панель использует для темизации некоторые весьма общие классы, такие как ul.menu. В конце концов, я просто указал более конкретные классы в своей теме, чтобы избежать конфликтов.
В общем, я не нашёл полноценной документации по темизации в Drupal 8, мне пришлось покопаться в файлах основных тем Drupal 8, что бы понять как это всё работает.
Изменения в API
Конвертирование шаблонов тем в Twig довольно тривиально, обновление пользовательского кода template.php в MYTHEME.theme не очень. Основа преобразования этих функций в том, что некоторые их них не рекомендуются, они по прежнему работают, но в конце концов от этого уйдут. Другие функции просто не будут работать и будут выбрасывать ошибки, как изменилось для них API — полностью или есть новые функции, на которые их нужно заменить. PhpStorm имеет приятный визуальный индикатор устаревших в Drupal 8 функций, это действительно очень удобно.
Например drupal_add_js и drupal_add_css являются устаревшими, так что вы должны будете использовать #attached метод для добавления любого пользовательского JS для вашей темы. Drupal 8 теперь очень «худой», что означает то, что он по умолчанию не загружает много Javascript для анонимных пользователей, так что теперь вы должны будете использовать hook_library_info для создания зависимостей для загрузки вещей типа jQuery.once или даже drupal.js.
P.S.
Это мой вольный перевод статьи Danny Englander — Porting a Contrib Theme to Drupal 8: Get Twig-gy With It
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.
Комментариев нет:
Отправить комментарий