У меня есть шаблон ветви, где я бы хотел проверить, начинается ли элемент с определенного значения
{% if item.ContentTypeId == '0x0120' %} <td><a href='?parentId={{ item.Id }}'>{{ item.BaseName }}</a><br /></td> {% else %} <td><a href='?{{ item.UrlPrefix }}'>{{ item.LinkFilename }}</a></td> {% endif %}
0x0120 может выглядеть так или более сложным, как этот 0x0120D52000D430D2B0D8DD6F4BBB16123680E4F78700654036413B65C740B168E780DA0FB4BX. Единственное, что я хочу сделать, это убедиться, что он начинается с 0x0120.
Идеальное решение было бы решить это с помощью регулярного выражения, но я не знаю, поддерживает ли Twig это?
благодаря
Да, Twig поддерживает регулярные выражения в сравнении: http://twig.sensiolabs.org/doc/templates.html#comparisons
В вашем случае это будет:
{% if item.ContentTypeId matches '/^0x0120.*/' %} ... {% else %} ... {% endif %}
Вы можете сделать это прямо сейчас в Twig:
{% if 'World' starts with 'F' %} {% endif %}
«Ends with» также поддерживается:
{% if 'Hello' ends with 'n' %} {% endif %}
Существуют и другие удобные ключевые слова:
Сложные сравнения строк:
{% if phone matches '{^[\\d\\.]+$}' %} {% endif %}
(Примечание: двойная обратная косая черта преобразуется в одну обратную косую черту по ветке)
Строка содержит:
{{ 'cd' in 'abcde' }} {{ 1 in [1, 2, 3] }}
См. Дополнительную информацию здесь: http://twig.sensiolabs.org/doc/templates.html#comparisons
Вы можете использовать фильтр slice
. Просто выполните:
{% if item.ContentTypeId[:6] == '0x0120' %} {% endif %}
Вы всегда можете сделать свой собственный фильтр, который выполняет необходимое сравнение.
Согласно документам :
При вызове Twig, вызываемый PHP получает левую часть фильтра (перед каналом |) в качестве первого аргумента и дополнительные аргументы, переданные фильтру (в круглых скобках ()) в качестве дополнительных аргументов.
Итак, вот модифицированный пример.
Создание фильтра так же просто, как связать имя с вызываемым PHP:
// an anonymous function $filter = new Twig_SimpleFilter('compareBeginning', function ($longString, $startsWith) { /* do your work here */ });
Затем добавьте фильтр в среду Twig:
$twig = new Twig_Environment($loader); $twig->addFilter($filter);
И вот как использовать его в шаблоне:
{% if item.ContentTypeId | compareBeginning('0x0120') == true %} {# not sure of the precedence of | and == above, may need parentheses #}
Я не парень PHP, поэтому я не знаю, как PHP выполняет регулярные выражения, но анонимная функция выше предназначена для возврата true, если $longString
начинается с $startsWith
. Я уверен, что вы найдете это тривиальным для реализации.