2011-09-10 7 views
2

Почему это не работает в 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... 

ответ

4

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

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

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

Наконец, если все остальное не делать CONCAT в PHP и назначить его на одну переменную и мимоходом, что к шаблону.


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

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

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

+0

Спасибо, но добавление backticks не помогает ... его отображение той же ошибки ... – user861587

+0

Текущая версия smarty - v3, это документы для v2. –

+0

Практически то же самое для v3: http://www.smarty.net/docs/en/language.syntax.quotes.tpl – grahamrb

0

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

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

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

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

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

Расположение умник \ Plugins \ function.concat.php

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

На .tpl код:

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

Смежные вопросы