如何在Smarty中组合两个字符串?

时间:2011-09-10 07:46:18

标签: php smarty echo smarty3

为什么这不适用于Smarty?

{my_function($test.'a1')}

显示以下错误:

Fatal error: Uncaught exception 'SmartyCompilerException' with message
'Syntax Error in template "test.tpl" on line 1 "{my_function($test.'a1')}"
Unexpected "'a1'", expected one of: "{" , "$" , "identifier" , INTEGER' in...

4 个答案:

答案 0 :(得分:4)

我只使用了一点聪明,但我认为如果你用反引号包围你的连接,那么它会正确评估它们。示例如下:

{my_function(`$test.'a1'`)} 

还有内置赋值功能,也可能有用:http://www.smarty.net/docsv2/en/language.custom.functions.tpl#language.function.assign

最后,如果所有其他方法都失败,请在php中执行concat并将其分配给单个变量并将其传递给模板。


编辑,忽略上述建议,我认为您应该使用以下语法:

{my_function var="`$test`a1"}

http://www.smarty.net/docsv2/en/language.syntax.quotes.tpl

答案 1 :(得分:3)

如果您正在将其传递给函数,则可以执行捕获或分配

{capture assign="parameter"}{$test}a1{/capture} {my_function($parameter)}

{assign var="parameter" value=$test|cat:"a1"} {my_function($parameter)}

我没有尝试在函数的参数上使用修饰符。但你可以尝试一下。此外,由于它是一个自定义的智能功能,您可以添加第三个可选参数并连接函数旁边的值。

<?php

function smarty_function_my_function($params, $smarty) {
   $input = join('', $params);
}

答案 2 :(得分:0)

这是因为Smarty 不理解PHP语法。它使用它自己的语法described here并快速与PHP syntax here进行比较。 (我已经包含了后一个链接以强调这一点 - Smarty语法是Smarty语法。)

请参阅embedding vars in double quotes部分,该部分应该了解如何完成任务。 (提示:对于这种情况,必须使用 in 引号)。

快乐的编码。

答案 3 :(得分:0)

我找到了这段代码,对我来说很好用

位置 smarty \ plugins \ function.concat.php

<?php
function smarty_function_concat($params){
    return implode('', $params);
}
?>

关于.tpl代码:

  

{concat 1 =“string1”2 =“second”3 =“另一个字符串”}