Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекращает поддержку phpBB версии 3.2.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2020 года.
С учетом этого, а также того, что версия 3.2.x больше не будет получать обновлений, за исключением связанных с проблемами безопасности
(только при их наличии и только до 7 ноября 2020 года), рекомендуется обновить конференции до версии 3.3.x.

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

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15238
Стаж: 14 лет 5 месяцев
Откуда: Красноярск
Благодарил (а): 395 раз
Поблагодарили: 1795 раз

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

Сообщение 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
Изображение
Аватара пользователя
romaamor
phpBB 3.0.0 RC4
Сообщения: 1635
Стаж: 8 лет 6 месяцев
Откуда: Одесса
Благодарил (а): 560 раз
Поблагодарили: 134 раза

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

Сообщение romaamor »

Так есть уже расширение Twig Converter. https://www.phpbb.com/community/viewtop ... +Converter
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15238
Стаж: 14 лет 5 месяцев
Откуда: Красноярск
Благодарил (а): 395 раз
Поблагодарили: 1795 раз

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

Сообщение rxu »

romaamor писал(а): 30.08.2019 9:18 Так есть уже расширение Twig Converter
И что?
Изображение
Аватара пользователя
romaamor
phpBB 3.0.0 RC4
Сообщения: 1635
Стаж: 8 лет 6 месяцев
Откуда: Одесса
Благодарил (а): 560 раз
Поблагодарили: 134 раза

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

Сообщение romaamor »

rxu писал(а): 30.08.2019 10:16И что?
Поставил себе. Переделал файлы. Я к тому что уже можно использовать. А не ждать -
rxu писал(а): 29.08.2019 7:58 в новых стилях для будущих релизов (4.х и старше) будет использоваться Twig
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4529
Стаж: 15 лет 9 месяцев
Откуда: Питер
Благодарил (а): 136 раз
Поблагодарили: 556 раз

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

Сообщение Siava »

А кто-нибудь измерял насколько велика разница времени генерации страниц со стандартным и TWIG-шаблоном?
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.5.x)
Аватара пользователя
Pazh
Former team member
Сообщения: 2194
Стаж: 10 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 455 раз

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

Сообщение Pazh »

Siava, боюсь такую эталонную и ничем другим не загруженную систему построить не получится
форум ЖК Вестердам Помощь в ЛС/email только за WM или ЯД
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 2890
Стаж: 11 лет 7 месяцев
Благодарил (а): 24 раза
Поблагодарили: 1043 раза

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

Сообщение Nekstati »

Старый шаблонизатор
{FOO_BAR}
Новый шаблонизатор
{{ FOO_BAR }}
Без шаблонизатора
<?= $FOO_BAR ?>
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15238
Стаж: 14 лет 5 месяцев
Откуда: Красноярск
Благодарил (а): 395 раз
Поблагодарили: 1795 раз

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

Сообщение rxu »

Сильно упрощенно, да :)
Изображение
Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1668
Стаж: 5 лет 11 месяцев
Благодарил (а): 268 раз
Поблагодарили: 220 раз

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

Сообщение Sumanai »

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

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

<?= addcslashes($FOO_BAR) ?>
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 10202
Стаж: 9 лет 2 месяца
Благодарил (а): 181 раз
Поблагодарили: 2860 раз

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

Сообщение Татьяна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 }}" %}
Так как переписать строчку?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15238
Стаж: 14 лет 5 месяцев
Откуда: Красноярск
Благодарил (а): 395 раз
Поблагодарили: 1795 раз

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

Сообщение rxu »

Видимо, так

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

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

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

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

Вернуться в «Для авторов»