「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
変数処理を改良するプラグイン(その2)
昨日は、「変数処理を改良するプラグイン」として、VarHandler.plのインストールと、それによって追加されるテンプレートタグを解説しました。
今日はその続きで、VarHandlerプラグインを使った具体的な事例を紹介します。
1.連番の表示
まず、簡単な事例として、「連番」を取り上げます。
例えば、エントリーのタイトル一覧を表示したいとしましょう。そして、個々エントリーの先頭には、1から始まる連番をつけたいとします。
この場合だと、以下のようにテンプレートタグを組み合わせます。
<MTSetVar name="number" value="1"> <MTEntries> <p><$MTGetVar name="number"$>.<$MTEntryTitle$></p> <MTAddVar name="number" value="1"> </MTEntries>
1行目のMTSetVarタグで、変数numberの値を1にしています。
次に、3行目のMTGetVarタグで、エントリーのタイトルの前に変数numberの値を表示しています。
そして、4行目のMTAddVarタグで、変数numberの値を1増やしています。
このタグは、エントリーが1つ出力されるごとに処理されますので、順に番号が1つずつ増えていくことになります。
ちなみに、MT標準のテンプレートタグには、コメントに連番をつけるものはあります(MTCommentOrderNumberタグ)。
しかし、エントリーやトラックバックに連番をつけるタグはありません。
そのようなことをしたい場合は、上記の手順を利用すると良いでしょう。
2.奇数件目と偶数件目で処理を変える
エントリーなどの一覧を出力する際に、奇数件目と偶数件目で出力を変えたい場合があります。
例えば、スタイルシートのfloatプロパティを使ってエントリーを2段組で表示する場合、偶数件目のエントリーの後でfloatを解除することが必要です。
こういったことも、変数処理を応用すれば行うことができます。
具体的には、以下のようにします。
<MTSetVar name="flag" value="0"> <MTEntriesなどの一覧出力タグ> <MTIfNumVar name="flag" value="0"> 偶数件目のエントリー等の前に出力する部分 <MTElse> 奇数件目のエントリー等の前に出力する部分 </MTElse> </MTIfNumVar> エントリー等の情報を出力する部分 <MTIfNumVar name="flag" value="0"> 偶数件目のエントリー等の後に出力する部分 <MTSetVar name="flag" value="1"> <MTElse> 奇数件目のエントリー等の後に出力する部分 <MTSetVar name="flag" value="0"> </MTElse> </MTIfNumVar> </MTEntriesなどの一覧出力タグ> <MTIfNumVar name="flag" value="1"> 一覧に出力した件数が奇数件だった場合に、最後に出力する部分 </MTIfNumVar>
変数「flag」の値が0か1で、偶数件目か奇数件目かを判断するようにします。
また、エントリー等を1件出力したら、flagの値を逆に(0なら1に、1なら0に)します。これによって、偶数/奇数の判断が入れ替わります。
さらに、エントリー等の件数が奇数件だった場合、後処理が必要になることもあります。
例えば、偶数件目のエントリー等を出力したときに、終了タグを出力するようにする場合、エントリー等が奇数件だと、最後の終了タグが出力されません。
そこで、エントリー等の件数が奇数件の場合は、後処理も入れるようにしています。
以下のリストは、エントリーを2段組で出力する例です。
「para」というクラスで、floatの指定がしてあるものとしています。
<MTSetVar name="flag" value="0"> <MTEntries> <MTIfNumVar name="flag" value="0"> <!-- flagの値が0(偶数件目)の時は、先頭のdivタグを出力する --> <div> </MTIfNumVar> <!-- エントリーのタイトルと概要を出力する --> <div class="para"> <h2><$MTEntryTitle$></h2> <p><$MTEntryExcerpt$></p> </div> <MTIfNumVar name="flag" value="0"> <!-- flagの値が0(偶数件目)の場合は、flagの値を1に変える --> <MTSetVar name="flag" value="1"> <MTElse> <!-- flagの値が1(奇数件目)の場合は、flagの値を0に変え、最後の/divタグを出力して、floatを解除する --> <MTSetVar name="flag" value="0"> </div> <br style="clear : both;"> </MTElse> </MTIfNumVar> </MTEntries> <MTIfNumVar name="flag" value="1"> <!-- エントリーが奇数件だった場合、最後のfloat解除の処理が行われないので、それを行う --> </div> <br style="clear : both;" /> </MTIfNumVar>