Smarty получает подстроку переменной с strpos в качестве начала и strlen в качестве конца
У меня проблемы с форматированием переменных в Smarty. Мне было интересно, что это лучший способ сделать это. В основном у меня есть строка "ABC | DEFGH", я хочу, чтобы smarty получил подстроку "DEFGH". Как мне это сделать?
{$var|substr:strpos:"|":strlen}
не работает
4 ответа
Просто решил эту проблему, не устанавливая 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 перед отправкой в шаблон. Или вы можете написать свой собственный плагин smarty для функции split. Или используйте теги {php} в шаблоне, но я бы избегал этого решения, поскольку оно противоречит "духу" и цели использования умности, разделения представления и логики и т. Д. И т. Д.
При использовании как Джимби:
{$var|substr:$bar_at+1}
Я добавляю скобки или круглые скобки, чтобы это работало.
{$var|substr:($bar_at+1)}