Smarty Получение подстроения VAR со strpos в качестве старта и strlen как конец

StackOverflow https://stackoverflow.com/questions/4389978

  •  10-10-2019
  •  | 
  •  

Вопрос

У меня есть переменные форматирования проблем в 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>

Это будет печатать:

  • ABC | 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, прежде чем отправлять в шаблон. Или вы можете написать свой собственный плагин Split Function Smarty. Или используйте {php} теги в шаблоне, но я бы избежал этого решения, поскольку оно противоречит «духу» и цели использования Smarty, разделения презентации и логики и т. Д. И т. Д.

    При использовании как Джимби:

    {$var|substr:$bar_at+1}
    

    Я добавляю скобки или круглый кронштейн, чтобы заставить его работать.

    {$var|substr:($bar_at+1)}
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top