为什么这在 Smarty 中不起作用?
{my_function($test.'a1')}
显示以下错误:
致命错误:未捕获异常“SmartyCompilerException”并带有消息 '模板“test.tpl”第 1 行“{my_function($test.'a1')}”中存在语法错误 意外的“'a1'”,预期为以下之一:“{”,“$”,“identifier”,INTEGER'...
我只使用了一点 smarty,但我认为如果你用反引号包围你的连接,那么它会正确地评估它们。下面的例子:
{my_function(`$test.'a1'`)}
还有一个内置的 allocate 函数也可能很有用: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\plugins unction.concat.php
<?php
function smarty_function_concat($params){
return implode('', $params);
}
?>
{concat 1="字符串1" 2="第二个" 3="另一个字符串"}
这就是你需要的
{$variable_1 = "Green"}
{$variable_2 = "Red"}
{$combined = "`$variable_1`, `$variable_2`"}
{$combined}
这将返回绿色、红色