2

为什么这在 Smarty 中不起作用?

{my_function($test.'a1')}

它显示以下错误:

致命错误:带有消息的未捕获异常“SmartyCompilerException”
'第 1 行的模板“test.tpl”中的语法错误“{my_function($test.'a1')}”
意外的“'a1'”,应为以下之一:“{”、“$”、“标识符”、INTEGER' in...
4

4 回答 4

4

我只使用了一点 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"}

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

于 2011-09-10T07:55:06.517 回答
3

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

{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);
}
于 2011-09-10T08:34:33.490 回答
0

这是因为 Smarty不懂 PHP 语法。它使用这里描述的自己的语法,并与这里的 PHP 语法进行快速比较。(我已经包含了后一个链接来强调这一点——Smarty 语法就是 Smarty 语法。)

请参阅在双引号中嵌入变量的部分,该部分应该给出如何完成任务的想法。(提示:在这种情况下,必须在引号使用反引号)。

快乐编码。

于 2011-09-10T08:28:15.257 回答
0

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

位置smarty\plugins\function.concat.php

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

在 .tpl 代码上:

{concat 1="string1" 2="second" 3="an other string"}

于 2012-07-03T14:58:58.853 回答