说我的TPL文件中有以下内容:
{$a}
我希望将某些PHP本机函数(例如strip_tags)应用于该Smarty变量。这可能在TPL中吗?如果是这样,怎么样?
答案 0 :(得分:17)
您可以通过以下方式在智能模板中使用任何php函数:
{$a|php_function_name}
或
{$a|php_function_name:param2:param3:...}
在第二个例子中,你可以为php函数指定其他参数(在我们的例子中,第一个参数总是$ a)。
例如:
当smarty编译时,{$a|substr:4:3}
会产生类似substr($_tpl_vars['a'],4,3);
的内容。
答案 1 :(得分:6)
非常好的问题,我花了一段时间才完全弄明白这一点。
调用函数,传递一个参数:
{"this is my string"|strtoupper}
// same as:
strtoupper("this is my string")
{$a:strtoupper}
// same as:
strtoupper($a)
调用函数,传递多个参数
{"/"|str_replace:"-":"this is my string"}
// same as:
str_replace("/", "-", "this is my string")
{"/"|str_replace:"-":$a}
// same as:
str_replace("/", "-", $a)
答案 2 :(得分:5)
最好的方法可能是为Smarty创建自己的插件和modifiers。对于您的具体示例,Smarty已经有strip_tags modifier。像这样使用它:
{$a|strip_tags}
答案 3 :(得分:3)
或者你可以使用它:(直接调用函数)
{rand()}
答案 4 :(得分:0)
模板系统的重点是从底层语言中抽象出视图的创建。换句话说,您的变量应该在传递给模板引擎之前准备好显示,并且您不应该在模板本身中使用任何PHP函数。
答案 5 :(得分:0)
Smarty已经内置了语言修饰符。
{$a|strip_tags}
您不需要已经集成到插件系统中的Native功能
http://www.smarty.net/docsv2/en/language.modifier.strip.tags.tpl
其他人在这里: