「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
繰り返しを途中で抜ける
昨日公開したプラグインを使うと、繰り返しを途中で抜けるようなテンプレートを組むこともできます(ただし、あまりエレガントではありません)。
1.考え方
多くのプログラム言語では、繰り返しを途中で中断して繰り返しから抜ける命令があります。
Perlならlastですし、PHPやJavaScriptならbreakです。
本当なら、lastやbreakに相当することを、テンプレートタグ1つでできるようにしたいところです。
ただ、Movable Typeのコアのテンプレート解析処理を見た限りでは、lastやbreakに相当するテンプレートタグを作ることはできなさそうでした。
そこで、MTUntilタグと条件判断を組み合わせて、以下のような方法でlast等に相当する処理を行うようにします。
- 途中で抜けることを表すために、フラグの変数を1つ用意し、その値を0(偽)にしておきます。
- MTUntilタグに「name="フラグ変数名"」のモディファイアを指定し、フラグ変数の値が真になったら繰り返しを終えるようにします。
- MTUntilタグのブロックの中で、繰り返しから脱出するかどうかをMTIfタグで判断します。
- 条件が成立したら、フラグ変数の値を1(真)にします。
- 条件が成立しなかったら、繰り返しの続きの処理を行います。
2.テンプレートの組み方
ここまでの話に基づいて、実際にテンプレートを組むと、以下のようになります。
フラグ変数の名前を「flag」にしています。
<$mt:SetVar name="flag" value="0"$> <mt:Until name="flag"> 繰り返し処理の前半 <mt:If 条件> <$mt:SetVar name="flag" value="1"$> <mt:Else> 繰り返し処理の後半 </mt:If> </mt:Until>
3.例
以下のリストは、繰り返しの5回目になったら(変数__counter__の値が5になったら)、繰り返しを抜けて、繰り返しの後半の処理を行わないようにする例です。
<$mt:SetVar name="flag" value="0"$> <mt:Until name="flag"> <$mt:GetVar name="__counter__"$>回目の繰り返し処理の前半 <mt:If name="__counter__" eq="5"> <$mt:SetVar name="flag" value="1"$> <mt:Else> <$mt:GetVar name="__counter__"$>回目の繰り返し処理の後半 </mt:If> </mt:Until>
このテンプレートを再構築すると、以下のような出力が得られます(実際には、スペースや改行が含まれます)。
5回目の繰り返し処理の後半が行われず、繰り返しから途中で抜ける形になっていることが分かります。
1回目の繰り返し処理の前半 1回目の繰り返し処理の後半 2回目の繰り返し処理の前半 2回目の繰り返し処理の後半 3回目の繰り返し処理の前半 3回目の繰り返し処理の後半 4回目の繰り返し処理の前半 4回目の繰り返し処理の後半 5回目の繰り返し処理の前半