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

Сравнение парадигм PHPTemplate и Twig

04/05/2020, by maria

О Twig

Twig - это скомпилированный язык шаблонов на основе PHP. Когда ваша веб-страница отображается, движок Twig берет шаблон и преобразует его в «скомпилированный» шаблон PHP, который хранится в защищенном каталоге по адресу sites/default/files/php/twig. Компиляция выполняется один раз, файлы шаблонов кэшируются для повторного использования и перекомпилируются при очистке кеша Twig.

Инициатива Drupal Twig имеет ту же мотивацию, что и инициатива Symfony: внедрить современный, мощный, основанный на ООП движок, который позволит разработчикам правильно сконцентрироваться на Drupal.

1. Docblock

PHPTemplate:

<?php 
/** 
 * @file
 * File description
 */
?>

Twig:

{# 
/** 
 * @file
 * File description
 */
#}

2. Имена файлов и функций

PHPTemplate file: node--article.tpl.php
Twig file: node--article.html.twig

PHPTemplate function: THEME_node_links()
Twig file: node-links.html.twig

3. Переменные

Печать переменной:

PHPTemplate: <div class="content"><?php print $content; ?></div>
Twig: <div class="content">{{ content }}</div>

Печать элемента хеш-ключа [1]

PHPTemplate: <?php print $item['#item']['alt']; ?>
Twig: {{ item['#item'].alt }} 

Назначение переменной:

PHPTemplate: <?php $custom_var = $content->comments; ?>
Twig: {% set custom_var = content.comments %}

Назначение массива:

PHPTemplate: <?php $args = array('@author' => $author, '@date' => $created); ?>
Twig: {% set args = {'@author': author, '@date': created} %}

4. Условия

PHPTemplate: <?php if ($content->comments): endif; ?>
Twig: {% if content.comments %} {% endif %}

PHPTemplate: <?php if (!empty($content->comments)): endif; ?>
Twig: {% if content.comments is not empty %} {% endif %}

PHPTemplate: <?php if (isset($content->comments)): endif; ?>
Twig: {% if content.comments is defined %} {% endif %}

PHPTemplate: <?php if ($count > 0): endif; ?>
Twig: {% if count > 0 %} {% endif %}

5. Контрольные структуры

PHPTemplate: <?php foreach ($users as $user) {} ?>
Twig: {% for user in users %} {% endfor %}

6. Фильтры

Экранированные специальные символы HTML:

PHPTemplate: <?php print check_plain($title); ?>
Twig[2]: {{ title }}

Необработанные значения:

PHPTemplate: <?php print $title; ?>
Twig: {{ title|raw }}

Перевести:

PHPTemplate: <? Php print t ('Home'); ?>
Twig: {{'Home' | t}}

Перевести с подстановками:

PHPTemplate: <?php print t('Welcome, @username', array('@username' => $user->name)); ?>
Twig: {{ 'Welcome, @username'|t({ '@username': user.name }) }}

Drupal 8 Twig (с расширением trans tag):

{% set username = user.name %}
{% trans %}
  Welcome, {{ username }}
{% endtrans %}

Развернуть список:

PHPTemplate: <? Php echo implode (',', $ usernames); ?>
Twig: {{usernames | присоединиться(', ') }}

Развернуть список с помощью разметки:

Twig: {{usernames | safe_join (',')}}

Пример PHPTemplate требует, чтобы $usernames был массивом строк. То же самое относится к примеру Original Twig, где «usernames» - это массив строк. С другой стороны, для примера Drupal 8 Twig требуется массив визуализируемых объектов. Это на самом деле принципиальная разница между Drupal 8 Twig и оригинальной Twig. Drupal 8 Twig "печатает" как простой текст, так и рендеринг массивов.

Другим аспектом этого примера является то, что ожидается, что все три примера выдадут одинаковый вывод, но это не так (по умолчанию). Возьмите этот пример:

  {% set numbers = [{'#markup': 'One'}, {'#markup':'Two'}, {'#markup':'Three'}] %}
  {{ numbers }}

Вышесказанное предполагает, что элементы печатаются через запятую. Но вывод: OneTwoThree

7. Управление пробелами

Twig имеет контроль над пробелами, который позволяет удалять пробелы, используемые для структурирования файла шаблона.

<div class="body">
  {{- block.content -}}
</div>

Это так же, как:

<div class="body">{{ block.content }}</div>

Внимание

  • Пример элемента ключа хеша может измениться в будущем
  • Во втором примере мы показываем, как Twig отвечает за очистку данных. Раньше это было до файла шаблона или функции предварительной обработки, чтобы справиться с этим. Это последнее изменение действительно важно для тех, кто надеется создать тему PHPTemplate для 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.