Как объединить две строки в Smarty?


Почему это не работает в 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...
Author: user861587, 2011-09-10

4 answers

Я только немного использовал smarty, но я думаю, что если вы окружите свою конкатенацию обратными метками, то она правильно их оценит. Пример ниже:

{my_function(`$test.'a1'`)} 

Существует также встроенная функция assign, которая также может быть полезна: http://www.smarty.net/docsv2/en/language.custom.functions.tpl#language .функция. назначать

Наконец, если все остальное не удается, выполните объединение в php и назначьте его одной переменной и передайте ее шаблону.


Редактировать, игнорируйте приведенные выше предложения, я думаю, вам следует использовать следующий синтаксис:

{my_function var="`$test`a1"}

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

 4
Author: grahamrb, 2011-09-10 08:25:26

Если вы делаете это, переходя в функцию, вы можете выполнить захват или назначить

{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);
}
 3
Author: Logan Bailey, 2011-09-10 08:34:33

Это потому, что Smarty не понимает синтаксис PHP. Он использует свой собственный синтаксис, как описано здесь и быстро сравнивается с синтаксисом PHP здесь. (Я включил последнюю ссылку, чтобы подчеркнуть эту мысль - Умный синтаксис - это умный синтаксис.)

Смотрите раздел о встраивании переменных в двойные кавычки, который должен дать представление о том, как выполнить задачу. (Подсказка: в этом случае обратные галочки должны использоваться внутри кавычек).

Счастлив кодирование.

 0
Author: , 2011-09-10 08:33:50

Я нашел этот код и он отлично работает для меня

Местоположение smarty\plugins\function.concat.php

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

Код On.tpl:

{объединение 1="строка 1" 2="вторая" 3="другая строка"}

 0
Author: Hamidreza, 2012-07-03 14:58:58