プロが教えるわが家の防犯対策術!

Smartyで以下のような処理がしたいのですがうまくいきません・・・(横にセルを5コ並べた後に改行したい)
どのように記述したらよいか教えて頂けますでしょうか。

<table>
<tr>
{$i = 0}
{foreach item=item_list from=$item_list}
<td>{$item_list.hoge|escape}</td>
{$i = $i + 1}
{if $i mod 4 eq 0}
</tr><tr>
{/if}
{/foreach}
</table>

A 回答 (1件)

Smartyでは、PHPのように $i = 0 のような書き方はできません。


変数に値を入れたいのであれば、{assign var=i value=$i+1}のようになります。

foreachの場合は、iterationがあるので、インクリメントをする必要は無く、
<table>
<tr>
{foreach item=item_list from=$item_list name=item_loop}
<td>{$item_list.hoge|escape}</td>
{if $smarty.foreach.item_loop.iteration % 5 ep 0}
{* 5つ目の値なら行を閉じて次の行を始める *}
</tr><tr>
{/if}
{/foreach}
</table>
のような書き方で動きます。
ただし、これではテーブルの構造をちゃんと作れない(最後の行を</tr>で閉じることができない)ので、少し変更する必要があると思います。

その辺を気になさらないのであれば、以下は無視してくださって結構です。
<table>
<tr>
{foreach item=item_list from=$item_list name=item_loop}
<td>{$item_list.hoge|escape}</td>
{if $smarty.foreach.item_loop.iteration % 5 ep 0}
{* その行で5つ目のデータなら</tr>を入れる *}
</tr>
{if not $smarty.foreach.item_loop.last}
{* それが最後のデータじゃなかったら次の行を始める *}
<tr>
{/if}
{/if}
{if $smarty.foreach.item_loop.last and $smarty.foreach.item_loop.total % 5 neq 0}
{* 最後のデータで、その行の5つ目じゃない(</tr>が入っていない)場合は</tr>を入れてあげる *}
{* ここに<td></td>を必要な数だけ入れた方がいいですが、なくてもそんなにおかしくはないです *}
</tr>
{/if}
{/foreach}
</table>

参考URL:http://sky.freespace.jp/smarty/SmartyManual_2-6- …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!