Smarty Получение подстроения VAR со strpos в качестве старта и strlen как конец
Вопрос
У меня есть переменные форматирования проблем в Smarty. Мне было интересно, как лучше всего это сделать. В основном у меня есть строка "ABC | defgh" Я хочу, чтобы Smarty получил подстроение "Defgh" Как я бы сделал это?
{$var|substr:strpos:"|":strlen}
не работает
Решение
Просто решил это без установки VAR обратно в PHP и используя встроенные обертки функций.
Предполагая, что: $ var = "abc | defgh";
{assign var="bar_at" value=$var|strpos:"|"}
<li>{$var}</li>
<li>{$var|substr:0:$bar_at}</li>
<li>{$var|substr:$bar_at+1}</li>
Это будет печатать:
Другие советы
Некоторая информация о Smarty 3 на случай, если кто -то захочет достичь этого в Smarty 3, а не в Smarty 2:
Первое, что вам нужно добавить скобки, чтобы они работали. substr:$bar_at+1
не сработает, но substr:($bar_at+1)
заработает.
Но на самом деле вы можете использовать более простой синтаксис:
{assign var="var" value="ABC | DEFGH"}
{$var|substr:($var|strpos:"|"+1)}
Это даст вам DEFGH
с пространством в начале (до и |
Пробелы внутри VAR в вашем вопросе и в моем примере) и, как вы хотите получить строку без места, вы должны использовать в этом случае +2
вместо +1
:
{$var|substr:($var|strpos:"|"+2)}
Те, кто выше был протестирован в Smarty 3.1.19
.
Вы также должны знать, что в предыдущих версиях (до Smarty 3.1), если у вас есть в своей строке utf-8, вы предпочитаете использовать mb_
функции.
Как Smarty 3.1 в случае, если mbstring
Расширение установлено, Smarty автоматически использует mb_
Функции в этом случае, поэтому не будет никаких проблем с символами UTF-8.
Вы можете прочитать больше о Smarty UTF-8 Кодирование
Эти функции не существуют в Smarty. Вам придется разделить его на PHP, прежде чем отправлять в шаблон. Или вы можете написать свой собственный плагин Split Function Smarty. Или используйте {php} теги в шаблоне, но я бы избежал этого решения, поскольку оно противоречит «духу» и цели использования Smarty, разделения презентации и логики и т. Д. И т. Д.
При использовании как Джимби:
{$var|substr:$bar_at+1}
Я добавляю скобки или круглый кронштейн, чтобы заставить его работать.
{$var|substr:($bar_at+1)}