2011-09-10 64 views
2

Smartyでこれが動作しないのはなぜですか?Smartyで2つの文字列を結合するには?

{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

を私はSmartyの少しを使用しているだけでなく、私はあなたがバッククォートを使用して連結を囲むならば、それはそれらを適切に評価すると思います。以下の例:http://www.smarty.net/docsv2/en/language.custom.functions.tpl#language.function.assign最後に

、他のすべては、PHPで連結を行うと、単一の変数に割り当て失敗していることを渡した場合:

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

も有用である可能性がある機能に建てられた割り当てもありテンプレートに追加します。


編集は、上記の提案を無視し、私はあなたが、次の構文を使用する必要があると思う:SmartyのはPHPの文法を理解していないため

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

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

+0

ありがとうございますが、バックティックを追加しても同じエラーが表示されません... – user861587

+0

smartyの現在のバージョンはv3であり、それはv2のドキュメントです。 –

+0

v3とほぼ同じです:http://www.smarty.net/docs/en/language.syntax.quotes.tpl – grahamrb

0

それはあります。それは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)} 

を割り当てることができます関数に渡し、それをやっている場合は、私は、関数にパラメータに修飾子を使用して試していません。しかし、あなたはそれを試すことができます。また、カスタムスマート関数から、オプションの3番目のパラメータを追加し、その値を関数の横に連結することもできます。

<?php 

function smarty_function_my_function($params, $smarty) { 
    $input = join('', $params); 
} 
0

私はこのコードを発見し、私のための.tplコードに

場所のsmarty \プラグイン\ function.concat.php

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

を正常に動作しています

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

関連する問題