9

我在 smarty 中格式化变量时遇到问题。我想知道最好的方法是什么。基本上我有一个字符串“ABC | DEFGH”,我想让 smarty 得到“DEFGH”的子字符串,我将如何去做呢?

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

不工作

4

4 回答 4

28

刚刚解决了这个问题,没有在 PHP 中设置 var,而是使用内置的函数包装器。

假设: $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
  • 于 2010-12-14T19:09:46.893 回答
    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在开始时为您提供空格(在您的问题和我的示例中,在 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 编码的更多信息

    于 2014-07-30T06:18:50.210 回答
    4

    smarty中不存在这些功能。在将其发送到模板之前,您必须在 PHP 中拆分它。或者您可以编写自己的拆分功能 smarty 插件。或者在模板中使用 {php} 标签,但我会避免使用该解决方案,因为它违背了“精神”和使用 smarty 的目的、表示和逻辑的分离等。

    于 2010-12-08T16:52:02.377 回答
    0

    像 Jimby 一样使用时:

    {$var|substr:$bar_at+1}
    

    我添加括号或圆括号以使其工作。

    {$var|substr:($bar_at+1)}
    
    于 2013-09-19T08:19:56.453 回答