テンプレート内での文字列の連結
2008/04/22 | Smarty
Smartyテンプレート内で、変数に格納された文字列の結合をしたい場合がある(つまり「変数を結合したい」のだが)。
単に文字列を結合するだけならcat修飾子でいい。
{$str1|cat:’_add’}とか{$str1|cat:$str2}とか
結合した文字列を他の処理で使いまわしたいということはないだろうか。たとえば上記の処理で得られる文字列をキーとした配列中の値を取得したいとか・・・。
そんなときにはassign関数が使えるのだが、たいていの場合は期待通りの動作をしてくれない。しかし記述方法ひとつで、しっかりと動作してくれる。それは「バッククォート(`)」だ。
例えば変数$str1と$str2を結合した$strを作りたいときはこんな具合に記述する。
{assign var=str value=”`$str1“$str2`”}
仮に$str1=’abc’、$str2=’def’だとしたら、$strは’abcdef’になる。
こういうの、マニュアルに書いてあればいいのに。
2008/11/04 at 1:28 PM
{#VAR#}を使う場合は下のような感じでした
NG{assign var=str value=”#VAR#”}
NG{assign var=str value=”`#VAR#`”}
OK{assign var=str value=#VAR#}
NG{assign var=str value=#VAR#”$str”}
OK{assign var=str value=”`$smarty.config.VAR`”}
OK{assign var=str value=”`$smarty.config.VAR“$str`”}
あと{capture}という手もありますよ。
同じ事をやろうとした場合
{capture name=”str”}{$str1}{$str2}{/capture}
でできます。