我在smarty中遇到格式化变量问题。我想知道最好的方法是什么。基本上我有一个字符串“ABC | DEFGH”我想要聪明地获得“DEFGH”的子串我将如何去做这个?
{$var|substr:strpos:"|":strlen}
不起作用
答案 0 :(得分:26)
刚刚在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>
这将打印:
答案 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
提供空格(在|
之前是你的问题和我的例子中的var内的空格)并且因为你想获得没有空格的字符串你应该使用这种情况+2
代替+1
:
{$var|substr:($var|strpos:"|"+2)}
上述人员在Smarty 3.1.19
进行了测试。
你也应该知道在以前的版本中(在Smarty 3.1之前)如果你的字符串是UTF-8字符,你应该使用mb_
函数。
如果安装了mbstring
扩展名,则在Smarty 3.1中,Smarty会自动使用mb_
函数,因此utf-8字符不会出现任何问题。
您可以阅读有关 Smarty utf-8 encoding
的更多信息答案 2 :(得分:4)
这些功能在smarty中不存在。在将其发送到模板之前,您必须将其拆分为PHP。或者你可以编写自己的split function smarty插件。或者在模板中使用{php}标签,但我会避免使用该解决方案,因为它违背了“精神”以及使用智能,分离演示和逻辑等等的目的。
答案 3 :(得分:0)
像Jimby一样使用时:
{$var|substr:$bar_at+1}
我添加括号或圆括号以使其有效。
{$var|substr:($bar_at+1)}