为什么这在 Smarty 中不起作用?
{my_function($test.'a1')}
它显示以下错误:
致命错误:带有消息的未捕获异常“SmartyCompilerException” '第 1 行的模板“test.tpl”中的语法错误“{my_function($test.'a1')}” 意外的“'a1'”,应为以下之一:“{”、“$”、“标识符”、INTEGER' in...
我只使用了一点 smarty,但我认为如果你用反引号包围你的串联,那么它会正确评估它们。下面的例子:
{my_function(`$test.'a1'`)}
还有一个内置功能也可能有用:http ://www.smarty.net/docsv2/en/language.custom.functions.tpl#language.function.assign
最后,如果所有其他方法都失败了,请在 php 中执行 concat 并将其分配给单个变量并将其传递给模板。
编辑,忽略上述建议,我认为您应该使用以下语法:
{my_function var="`$test`a1"}
如果您正在将其传递给函数,则可以进行捕获或分配
{capture assign="parameter"}{$test}a1{/capture} {my_function($parameter)}
{assign var="parameter" value=$test|cat:"a1"} {my_function($parameter)}
我没有尝试在函数的参数上使用修饰符。但是你可以试一试。此外,由于它是一个自定义的 smarty 函数,您可以添加第三个可选参数并连接函数侧的值。
<?php
function smarty_function_my_function($params, $smarty) {
$input = join('', $params);
}
这是因为 Smarty不懂 PHP 语法。它使用这里描述的自己的语法,并与这里的 PHP 语法进行快速比较。(我已经包含了后一个链接来强调这一点——Smarty 语法就是 Smarty 语法。)
请参阅在双引号中嵌入变量的部分,该部分应该给出如何完成任务的想法。(提示:在这种情况下,必须在引号内使用反引号)。
快乐编码。
我找到了这段代码,对我来说很好用
位置smarty\plugins\function.concat.php
<?php
function smarty_function_concat($params){
return implode('', $params);
}
?>
在 .tpl 代码上:
{concat 1="string1" 2="second" 3="an other string"}