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

 

 Twigсниппет

В ряде сценариев, например, при разработке и отладке шаблонов оформления, постоянное использование 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, не должна вызывать проблем.