smarty替换多个值

时间:2013-12-04 20:22:03

标签: replace smarty prestashop

我有这行的..tpl文件:

{$error|replace:"pno":"personal number error"}

我需要修改它,以便替换多个值,排序:

{$error|replace:"pno_error":"personal number error", "error_1":"1", "error_2":"2"}

我需要确保代码正确形成。我如何实现这一目标?

2 个答案:

答案 0 :(得分:7)

喜欢这样

{assign "find" array('pno', 'error_1', 'error_2')}
{assign "repl" array('personal number error', 1, 2)}
{assign "text" 'error_1 and pno and error_2 are friends'}
{$text|replace:$find:$repl}
顺便说一句:不要通过控制器和tpl文件使用最终值吗?

修改

  

如何让它替换完全匹配,例如,如果$ text是'pno',然后替换它,但如果$ text是'pnopno',那么什么都不做?

在这种情况下,您可以使用正则表达式,但是,在数组中是不可能的(据我所知)并且您需要一步一步地执行它,或者更确切地说是命令之后的命令。

关于替换pno而非pnopno,您需要找出适合自己需要的正则表达式。

{assign "text" 'error_1 and pno and error_2 are friends'}
{$text|regex_replace:"/(\s)(pno)(\s)/":"personal number error"|regex_replace:"/(error_1)/":"1"|regex_replace:"/(error_2)/":"2"}

答案 1 :(得分:0)

您还可以使用短代码:

{$text = "error_1 and pno and error_2 are friends"}
{$find = ['pno', 'error_1', 'error_2']}
{$repl = ['personal number error', 1, 2]}

{$text|replace:$find:$repl}