Intereting Posts
Защищенные документы с помощью PHP Как взорвать целое число Как изменить формат даты в зависимости от страны Symfony2 – определить, находится ли пользователь в защищенном брандмауэре Отрицательный DateInterval Загрузите файл с помощью ajax-вызова PHP сортирует массив массивов в соответствии с индексом в массивах PHPExcel: как установить формат даты для ячейки Получите широту и долготу всего местоположения, которые находятся в радиусе 10 км от моего текущего местоположения с помощью карты google (с использованием PHP) Dropstrap Dropdown не работает – выпадающее меню не переключается Как показать php-файлы как обычный текст в Apache PHP: разрешение отклонено, несмотря на соответствующие разрешения Я хотел бы выбрать случайное видео YouTube из базы данных MySQL и отобразить его на моей веб-странице DOMXPath получает родного брата в зависимости от предыдущего значения брата Я хочу добавить 100 лет к отображаемым датам wordpress

«Начинается с» в шаблоне Twig

У меня есть шаблон ветви, где я бы хотел проверить, начинается ли элемент с определенного значения

{% 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 . Я уверен, что вы найдете это тривиальным для реализации.