ググらずには前へ進めないフロントエンドエンジニアが書く、次はググらなくてもできますように…とメモを残すブログです!

Smarty で n回繰り返しのエントリーを div とかで囲む、包む!

2012/01/17
⚠️投稿日または最終更新日から11年以上経過している内容です。

ほぼ一年前の記事 (MovableTypeでn回繰り返しのエントリーをdivとかで囲む、包む!) のSmartyのtplでの書き方のメモです。

プログラム的なことは分からないのですが、これぐらいならやってみようと思い、考えてみました。

html
{section name=entry loop=$entries}
	{if $smarty.section.entry.first}<div class="entryCover">{/if}
		~中身~
	{if $smarty.section.entry.last}</div>{else}{if $smarty.section.entry.iteration % 3 == "0"}</div><div class="entryCover">{/if}{/if}
{sectionelse}
	<p class="noentry">エントリーありません。</p>
{/section}

こんな感じです。 上は3回繰り返すとdivで包むようになっています。

まず、sectionの名前を決めます。nameですね。 loop=$entries の $entries はループする配列が入っています。

html
{section name=entry loop=$entries}

とりあえず、entryにしました。(なんでもいいんです。) すると次に、

html
{if $smarty.section.entry.first}<div class="entryCover">{/if}

ループの最初だけに実行されるfirstを記述することで、始めのdivを出力できます。 同じく次に、

html
{if $smarty.section.entry.last}</div>{/if}

ループの最後だけに実行されるlastを記述することで、最後のdivを出力できます。

次に最後ではない場合、の処理を設定します。 最後ではない、なので、lastのif文にelseを置き、

html
{if $smarty.section.entry.iteration % 3 == "0"}</div><div class="entryCover">{/if}

現在のループ数(iteration)をn回繰り返し後に包みたいdivの数字で割り算します。 割り算した結果、それが0ならば閉じdivと、次の始めのdivを出力するようになります。

今のところ、これで問題ないのですが、何か問題がありましたらご教授お願いしたいと思います!

section関数などは http://www.hazymoon.jp/php/Smarty/05.html のサイト様を参考に致しました。 大変ありがとうございました!