2010-12-08 3 views
8

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

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

не работает

+0

Что вы получите в качестве вывода? – BoltClock 2010-12-08 16:51:14

+0

Возможный дубликат: http://stackoverflow.com/questions/4325283/smarty-substr-a-variable – 2010-12-08 16:53:16

+0

См. [Это] (http://www.smarty.net/forums/viewtopic.php?p=48137) Smarty тема. – 2010-12-08 16:53:27

ответ

25

Только что решил это без установки 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
  • 4

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

    0

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

    {$var|substr:$bar_at+1} 
    

    добавить скобки или круглую скобку сделать это Работа.

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

    Некоторая информация о 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 с пространством в начале (до и | пробелы внутри вар в вашем вопросе и в моем примере), и как вы хотите чтобы получить строку без пробелов, вы должны использовать в этом случае +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 encoding

    Смежные вопросы