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

问题描述 投票:0回答:5

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

{my_function($test.'a1')}

显示以下错误:

致命错误:未捕获异常“SmartyCompilerException”并带有消息
'模板“test.tpl”第 1 行“{my_function($test.'a1')}”中存在语法错误
意外的“'a1'”,预期为以下之一:“{”,“$”,“identifier”,INTEGER'...
php smarty echo smarty3
5个回答
4
投票

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

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


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);
}

0
投票

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

请参阅“在双引号中嵌入变量”部分,其中应该给出如何完成任务的想法。 (提示:对于这种情况,必须在引号内使用反引号)。 快乐编码。

我找到了这段代码并且对我来说效果很好

0
投票
位置

smarty\plugins unction.concat.php

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

在 .tpl 代码上:

{concat 1="字符串1" 2="第二个" 3="另一个字符串"}

这就是你需要的

0
投票
{$variable_1 = "Green"} {$variable_2 = "Red"} {$combined = "`$variable_1`, `$variable_2`"} {$combined}

这将返回绿色、红色
    

© www.soinside.com 2019 - 2024. All rights reserved.