dimayakovlev.ru


Контролируемое использование Twig тега spaceless

В ряде сценариев, например, при разработке и отладке шаблонов оформления, постоянное использование Twig тега spaceless является нежелательным. Для того, чтобы не вносить постоянные изменения в код шаблонов, добавляя и удаляя пары тегов spaceless, следует предусмотреть возможность контролируемого управления их использованием на основании задаваемого условия.

На первый взгляд кажется совершенно логичным управлять использованием Twig тега spaceless с помощью следующей конструкции, где значение переменной use_spaceless включает или отключает минификацию генерируемого блока HTML кода.


{% set use_spaceless = true %}
{% if use_spaceless %}{% spaceless %}{% endif %}
{# Здесь ваш код, генерирующий HTML вывод #}
{% if use_spaceless %}{% endspaceless %}{% endif %}

Однако выполнение этого кода приведёт к возникновению ошибки: Twig_Error_Syntax: Unexpected “endif” tag (expecting closing tag for the “spaceless” tag defined near line 1).

Такая ситуация возникает в случаях, когда пары Twig тегов разделены между собой условными выражениями. Необходимо помнить об этом ограничении и всегда учитывать его на этапе проектирования логики модулей шаблона оформления!

В случае с тегом spaceless, описанное ограничение можно обойти, прибегнув к предварительной буферизации вывода. Используя тег set в шаблоне Twig это может быть сделано следующим образом.


{% set use_spaceless = true %}
{% set output %}
{# Здесь ваш код, генерирующий HTML вывод #}
{% endset %}

{% if use_spaceless %}
     {% spaceless %}{{ output }}{% endspaceless %}
{% else %}
    {{ output }}
{% endif %}

Используя в качестве примера этот фрагмент кода, собственная реализация контролируемого управления минификацией вывода с помощью Twig тега spaceless, не должна вызывать проблем.