Страница 1 из 1

[3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 29.08.2019 7:58
rxu
Для чего переходить на синтаксис Twig в расширениях?

1. Синтаксис шаблонов phpBB преобразуется ядром в синтаксис TWIG в фоновом режиме, поэтому, если расширение уже использует TWIG, данное преобразование не требуется, что экономит ресурсы.

2. Twig является наиболее распространенным синтаксисом шаблонов для PHP, поэтому любая популярная среда разработки (IDE) или редакторы кодов умеют его распознавать, подсвечивать, производить автозаполнение, проверку и выявление ошибок и т.д. Поэтому написание кода будет проще в части читабельности и проверки.

3. Twig - это будущее phpBB. Хотя стиль prosilver всё ещё использует старый синтаксис phpBB, в новых стилях для будущих релизов (4.х и старше) будет использоваться Twig. Новый код, добавляемый в prosilver, также использует только синтаксис Twig.

4. С Twig можно реализовать намного больше идей, чем с синтаксисом phpBB.

Основные примеры соответствия синтаксисов phpBB и Twig:

Переменные шаблона
phpBB

Код: Выделить всё

{FOO_BAR}
Twig

Код: Выделить всё

{{ FOO_BAR }}

Языковые переменные шаблона
phpBB

Код: Выделить всё

{L_FOO_BAR}
Twig

Код: Выделить всё

{{ lang('FOO_BAR') }}
Переменные шаблона в коде JavaScript
phpBB

Код: Выделить всё

{LA_ESCAPED_FOR_JAVASCRIPT}
Twig

Код: Выделить всё

{{ lang('ESCAPED_FOR_JAVASCRIPT')|e("js") }}
или
{{ lang('ESCAPED_FOR_JAVASCRIPT')|addslashes }}

Логические структуры
phpBB

Код: Выделить всё

<!-- IF S_FOO -->
    ... hello ...
<!-- ELSE -->
    ... world...
<!-- ENDIF -->
Twig

Код: Выделить всё

{% if S_FOO %}
    ... hello ...
{% else %}
    ... world ...
{% endif %}
https://twig.sensiolabs.org/doc/2.x/tags/if.html


Циклы
phpBB

Код: Выделить всё

<!-- IF .users -->
    <!-- BEGIN users -->
        This is {users.VALUE}
    <!-- BEGINELSE -->
        no values
    <!-- END users -->
<!-- ENDIF -->
Twig

Код: Выделить всё

{% if users %}
    {% for user in users %}
        This is {{ user.VALUE }}
    {% else %}
        no values
    {% endfor %}
{% endif %}
https://twig.sensiolabs.org/doc/2.x/tags/for.html
Для примера приведена переменная [c]user[/c], можно использовать любое другое имя.


Вложенные циклы

Код: Выделить всё

{% for item in items %}
	{% for action in item.actions %}	
		{{ action.U_ACTION }}
	{% endfor %}
{% endfor %}

Подключение файлов
phpBB

Код: Выделить всё

<!-- INCLUDE overall_header.html -->
<!-- INCLUDECSS @foo_bar/style.css -->
<!-- INCLUDEJS @foo_bar/script.js -->
Twig

Код: Выделить всё

{% include 'overall_header.html' %}
{% INCLUDECSS '@foo_bar/style.css' %}
{% INCLUDEJS '@foo_bar/script.js' %}
https://twig.sensiolabs.org/doc/2.x/tags/include.html


События шаблона
phpBB

Код: Выделить всё

<!-- EVENT foo_template_event_location -->
Twig

Код: Выделить всё

{% EVENT foo_template_event_location %}

Задание значений переменным шаблона
phpBB

Код: Выделить всё

<!-- DEFINE $FOO = 'foo' -->
<!-- IF $FOO neq '' -->
    {$FOO}
<!-- ENDIF -->
Twig

Код: Выделить всё

{% DEFINE FOO = 'foo' %}
{% if definition.FOO != '' %}
    {{ definition.FOO }}
{% endif %}

{# если переменная вообще не используется в контексте синтаксиса шаблонов phpBB: #}

{% set bar = 'bar' %}
{% if bar != '' %}
    {{ bar }}
{% endif %}
https://twig.sensiolabs.org/doc/2.x/tem ... -variables


Комментарии
phpBB

Код: Выделить всё

<!-- Это комментарий -->
Twig

Код: Выделить всё

{# Это комментарий #}

Также можно работать с массивами следующим образом:

Код: Выделить всё

<?php	
$template->assign_var('CURRENCIES', array(
	'USD' => 'U.S. Dollar $',
	'AUD' => 'Australian Dollar $',
	'CAD' => 'Canadian Dollar $',
));

Код: Выделить всё

{% for value, label in CURRENCIES %}
	<option value="{{ value }}">{{ label }}</option>
{% endfor %}

Оригинал темы: https://www.phpbb.com/community/viewtop ... &t=2424606

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 30.08.2019 9:18
romaamor
Так есть уже расширение Twig Converter. https://www.phpbb.com/community/viewtop ... +Converter

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 30.08.2019 10:16
rxu
romaamor писал(а): 30.08.2019 9:18 Так есть уже расширение Twig Converter
И что?

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 30.08.2019 14:12
romaamor
rxu писал(а): 30.08.2019 10:16И что?
Поставил себе. Переделал файлы. Я к тому что уже можно использовать. А не ждать -
rxu писал(а): 29.08.2019 7:58 в новых стилях для будущих релизов (4.х и старше) будет использоваться Twig

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 30.08.2019 14:22
Siava
А кто-нибудь измерял насколько велика разница времени генерации страниц со стандартным и TWIG-шаблоном?

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 30.08.2019 15:24
Pazh
Siava, боюсь такую эталонную и ничем другим не загруженную систему построить не получится

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 30.08.2019 16:13
Nekstati
Старый шаблонизатор
{FOO_BAR}
Новый шаблонизатор
{{ FOO_BAR }}
Без шаблонизатора
<?= $FOO_BAR ?>

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 30.08.2019 16:20
rxu
Сильно упрощенно, да :)

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 16.09.2019 19:37
Sumanai
Nekstati писал(а): 30.08.2019 16:13 Без шаблонизатора
Исправил уязвимость, не благодари

Код: Выделить всё

<?= addcslashes($FOO_BAR) ?>

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 07.10.2020 23:13
Татьяна5

Код: Выделить всё

<!-- INCLUDEJS {T_ASSETS_PATH}/javascript/editor.js?assets_version={T_ASSETS_VERSION} -->
Переписываю строчку на twig - перестают работать переменные, путь к файлу становится некорректным

Код: Выделить всё

Fatal error: Uncaught Twig\Error\LoaderError: Unable to find template "{{ T_ASSETS_PATH }}/javascript/editor.js"
Пробовала варианты:

Код: Выделить всё

{% INCLUDEJS '{T_ASSETS_PATH}/javascript/editor.js?assets_version={T_ASSETS_VERSION}' %}
{% INCLUDEJS '{{ T_ASSETS_PATH }}/javascript/editor.js?assets_version={{ T_ASSETS_VERSION }}' %}
{% INCLUDEJS "{T_ASSETS_PATH}/javascript/editor.js?assets_version={T_ASSETS_VERSION}" %}
{% INCLUDEJS "{{ T_ASSETS_PATH }}/javascript/editor.js?assets_version={{ T_ASSETS_VERSION }}" %}
Так как переписать строчку?

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 08.10.2020 8:34
rxu
Видимо, так

Код: Выделить всё

{% INCLUDEJS T_ASSETS_PATH ~ '/javascript/editor.js?assets_version=' ~ T_ASSETS_VERSION %}
Хотя неясно, зачем здесь T_ASSETS_VERSION, так как INCLUDEJS добавляет это автоматически. должно быть достаточно этого

Код: Выделить всё

{% INCLUDEJS T_ASSETS_PATH ~ '/javascript/editor.js' %}
Примечание: тильда ~ выполняет конкатенацию строк.

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 11.03.2023 21:51
hd321kbps
В документации Twig видел, что можно передать параметры в подключаемый файл.

Код: Выделить всё

  {% INCLUDE 'ads_top.html' with {'ads_id': '120989-1'} %} 
Вроде код не выдает ошибок.

Пробовал вывести переменную ads_id в шаблоне ads_top.html не выводит значение

Код: Выделить всё

{{ads_id}}
Подскажите можно ли это сделать вообще в phpBB и как?

Re: [3.2] Использование синтаксиса шаблонов TWIG

Добавлено: 12.03.2023 6:25
rxu
hd321kbps, проверил, работает. Пробелы поставьте вокруг имени переменной при выводе: {{ ads_id }}