Smarty получает подстроку переменной с strpos в качестве начала и strlen в качестве конца - PullRequest
9 голосов
/ 08 декабря 2010

У меня проблема с форматированием переменных в smarty.Мне было интересно, что это лучший способ сделать это.В основном, у меня есть строка «ABC | DEFGH», я хочу, чтобы smarty получил подстроку «DEFGH». Как мне это сделать?

{$var|substr:strpos:"|":strlen}

не работает

Ответы [ 4 ]

26 голосов
/ 14 декабря 2010

Только что решил эту проблему, не устанавливая 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>

Это напечатает:

ABC | DEFGH ABC DEFGH
5 голосов
/ 30 июля 2014

Некоторая информация о 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 кодировка

4 голосов
/ 08 декабря 2010

Эти функции не существуют в smarty.Вам придется разделить его на PHP перед отправкой в ​​шаблон.Или вы можете написать свой собственный плагин smarty для функции split.Или используйте теги {php} в шаблоне, но я бы избегал этого решения, поскольку оно противоречит «духу» и цели использования умности, разделения представления и логики и т. Д. И т. Д.

0 голосов
/ 19 сентября 2013

При использовании как Jimby:

{$var|substr:$bar_at+1}

Я добавляю скобки или круглые скобки, чтобы это работало.

{$var|substr:($bar_at+1)}
...