为什么这不适用于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...
答案 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"}
答案 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 =“另一个字符串”}