Smarty 配列の要素をカンマ・スラッシュなどで区切って並べる

次のような配列を受け取るとする。

...
$list = ['たまねぎ','にんじん','じゃがいも'];
$smarty->assign('list', $list);
$smarty->display('test.tpl');

スラッシュで区切って並べることにする。

ループで回して単純に後に置くと、最後に余計な文字が残ってしまう。

{foreach from=$list item=item}
{$item|escape}/
{/foreach}
たまねぎ/ にんじん/ じゃがいも/

そこで、最後の要素でなければ後に置く。

{foreach from=$list item=item name=loop_name}
{$item|escape}{if not $smarty.foreach.loop_name.last}/{/if}
{/foreach}
たまねぎ/にんじん/じゃがいも

あるいは最初の要素でなければ前に置く。

{foreach from=$list item=item name=loop_name}
{if not $smarty.foreach.loop_name.first}/{/if}{$item|escape}
{/foreach}
たまねぎ /にんじん /じゃがいも

{foreach}内の改行がスペースに変換され余計な空白が入る。ただし{/if}の後では起きない。 最初の要素でなければ前に置くのように、行末が{/if}で終わらない場合は、改行しないでつなげる。

{foreach from=$list item=item name=loop_name}{if not $smarty.foreach.loop_name.first}/{/if}{$item|escape}{/foreach}