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>

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

  • ABC | DEFGH
  • азбука
  • DEFGH
  • Немного информации о 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)}
    
    Другие вопросы по тегам