Використання Twig у Drupal 8

15.12.2015
Використання Twig у Drupal 8
Автор:

Після релізу стає все більше бажаючих вивчати новинки Drupal 8. Запрошуємо дізнатися більше про одну з них — шаблонізатор Twig — у новому блозі нашого розробника, автора популярних постів про конфігурацію в Drupal 8 та поради для розробників на Drupal 8. Що ж, поїхали!

Як відомо, у Drupal 8 шаблонізатор Twig використовується замість PHPTemplate. Тепер замість звичних нам *.tpl.php файлів шаблонів використовуються *.html.twig файли.

Twig vs PHPTemplate

Отож, давайте розглянемо основні особливості Twig та його відмінності від PHPTemplate.

Виведення змінної:

PHPTemplate:Twig:
 <?php print $variable; ?>
 {{ variable }}

Оператор If:

PHPTemplate:Twig:
 <?php  
 if ($variable_1 == “1”): ?>  <div>
 <?php print $variable_2; ?>
     </div>
<?php endif; ?>
 {% if variable_1 %}
  <div>
{{ variable_2 }}
  </div>
{% endif %}
 <?php if (!empty($variable)):
$variable2 = ‘value’;
 endif; ?>
 {% if variable is not empty %}
set variable2 = ‘value ’
{% endif %}
 <?php if (isset($variable)):
$variable2 = ‘value’;
 endif; ?>
 {% if variable is defined %}
set variable2 = ‘value ’
{% endif %}
 <?php if ($variable < 0):
$variable2 = ‘value’;
 endif; ?>
 {% if variable < 0 %}
set variable2 = ‘value’
{% endif %}

Надання змінній значення:

PHPTemplate:Twig:
<?php $variable = ’some_value’; ?>
 {% set variable = ‘some_value ’%}

Створення масиву:

PHPTemplate:Twig:
 <?php $my_array = array(1,2,3,4,); ?>
 {% set my_array = [1,2,3,4,]%}
 <?php $my_array = array('!element1'=>$var1, '!element2'=>$var2); ?>
 {% set my_array = {'!element1': var1, '!element2': val2} %}

Цикли:

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

Фільтри у Twig шаблонах

У Twig-шаблонах можна використовувати різноманітні фільтри, тобто змінювати формат виведення змінних безпосередньо у шаблоні.

Доступні такі фільтри:

abs — повертає абсолютне значення.

Приклад:

 {# number = -5 #}
{{ number|abs }}
{# outputs 5 #}

batch

Приклад:


{% set items = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] %} <table> {% for row in items|batch(3, 'No item') %} <tr> {% for column in row %} <td>{{ column }}</td> {% endfor %} </tr> {% endfor %} </table>

Результат:

 <table>
    <tr>
        <td>a</td>
        <td>b</td>
        <td>c</td>
    </tr>
    <tr>
        <td>d</td>
        <td>e</td>
        <td>f</td>
    </tr>
    <tr>
        <td>g</td>
        <td>No item</td>
        <td>No item</td>
    </tr>
</table>

capitalize — трансформує перший символ до верхнього регістру, усі інші — до нижнього.

Приклад:

{{ 'twig in Drupal 8'|capitalize }}

Результат:

 Twig in drupal 8

date — форматує дату за заданим форматом.

Приклад:

 {{ '1447337804'|date("m/d/Y") }}

Результат:

 11/12/2015

json_encode — повертає JSON-представлення даних.

Використовується PHP функція json_encode.

first — повертає перший елемент масиву або рядка.

Приклад:

 {{ [1, 2, 3, 4]|first }}
{# outputs 1 #}

{{ { a: 1, b: 2, c: 3, d: 4 }|first }}
{# outputs 1 #}

{{ '1234'|first }}
{# outputs 1 #}

length — повертає кількість елементів масиву або довжину рядка.

lower — трансформує значення до нижнього регістру.

number_format — фільтр для форматування чисел.

Детальнішу інформацію можна знайти тут.

Приклад:

 {{ 9800.333|number_format(2, '.', ',') }}

Результат:

 9,800.33

Для того, щоб обробити змінну через функцію t(), потрібно використати фільтр t.

Виглядає це так:

 <a href="{{ url('<front>') }}" title="{{ 'Home'|t }}" rel="home" class="site-logo"></a>

Список усіх фільтрів можна знайти за посиланням.

Дебагінг Twig-шаблонів

Для того, щоб увімкнути можливість дебажити twig шаблони, необхідно у файлі services.yml у блоці налаштувань twig.config параметру debug надати значення true. Для зручності розробки можна також параметру cache встановити значення false. В цьому разі не потрібно буде після змін у шаблонах робити очищення кешу.

 twig.config:
    debug: true
    cache: false

Встановлення власного шаблону для елемента

Розглянемо, як виглядає встановлення власного шаблону для елемента:

 function my_theme_theme($existing, $type, $theme, $path) {
  return array(
    'block__system_menu_block' => array(
      'template' => 'custom-menu-template',
     ),
  );
}

де block__system_menu_block — елемент, для якого потрібно використати шаблон;

custom-menu-template — назва шаблону (ім’я файлу шаблону буде виглядати так: custom-menu-template.html.twig).

Сподіваємось, ця інформація буде корисною для вас. Розробляйте на Drupal 8 легко і з задоволенням! :)

4 votes, Рейтинг: 5

Також по темі

1

У Drupal 8 зміни не оминули систему для зберігання даних конфігурації. Нова система полегшує імпорт та експорт конфігурації. Детальніше про це - у новому блозі від нашого розробника. Ми також...

2

Ще зовсім недовго лишилося чекати до виходу Drupal 8, але вже зараз є можливість використовувати його бета версію. Отож, давайте разом вивчати Drupal 8.

3

Він популярний, безкоштовний, гнучкий, потужний. Він — це Drupal! В цієї системи управління контентом (CMS) було вже 7 офіційних основних релізів, і 8-й відбудеться дуже скоро. Всіх цікавлять нові...

4

Бета-версія Drupal 8 вже побачила світ. Зараз команда InternetDevels розробляє перший проект на «вісімці». Працюючи з Drupal 8, ми дізналися багато цікавого і підготували огляд його інновацій.

Subscribe to our blog updates