2016-08-03 3 views
2

Я работаю над довольно сложным многоязычным сайтом, который будет отображать различные частичные элементы на основе локали html.Twig Проверка на частичное существование до включения

У меня есть частичная структура, которая будет использовать локаль, добавленную к имени файла, чтобы выбрать правильный. Например;

{% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %} 

Хотя это работает, есть риск, если локаль выбран не имеет (пока) была его частичная создана, это вызовет ошибку. То, что я хотел бы сделать, это проверить наличие частичного, прежде чем пытаться его отобразить, и вернуться к умолчанию, если он еще не существует.

{% if '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' %} 
    {% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %} 
{% else %} 
    {% include '@BundleName/Layout/Text/_partial-name.html.twig' with {'title' : resource.title } %} 
{% endif %} 

Очевидно, что это не сработает, но это тот факт, что я после!

ответ

5

Вместо того, чтобы проверить, если парциальное существует вы можете использовать ignore missing:

{% include 'partial.html' ignore missing %} 

Если вы хотите, чтобы иметь запасной вариант, если файл отсутствует, вы можете передать массив в функцию включения. Это позволит сделать включать визуализации первый найденный шаблон в массиве

{% include [ 
       ('@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig'), 
       '@BundleName/Layout/Text/_partial-name.html.twig' 
      ] with {'title' : resource.title } %} 
+0

Отлично, это именно то, что мне нужно. – Alex

1

Вы можете использовать |default прут фильтр, чтобы определить значение по умолчанию для переменной, если значение не определено или пусто:

htmlLocale|default('en') 

You может также проверить, является ли переменная пустой и/или определена:

{% if htmlLocale is not empty and htmlLocale is defined %} 
    {% include '@BundleName/Layout/Text/_partial-name.' ~ htmlLocale ~ '.html.twig' with {'title' : resource.title } %} 
{% else %} 
    {% include '@BundleName/Layout/Text/_partial-name.html.twig' with {'title' : resource.title } %} 
{% endif %} 
+0

Я думаю, что вы, возможно, немного упустили точку вопроса; это не текст, если установлен языковой стандарт, его проверить, существует ли часть. @DarkBee в значительной степени – Alex

Смежные вопросы