「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
ブロックの出力対象がなかったときの処理
Movable Typeでは、記事の一覧を出力したり、条件によって処理を分けたりなど、ブロック内を繰り返したり条件判断したりする際に、「ブロックタグ」を使います。
場合によっては、ブロック内で出力対象になるものが何もない場合があります。
例えば、記事がないブログでMTEntriesタグのブロックを使うと、何も出力されません。
このような「出力がなかった時」の処理を行う方法を紹介します。
1.MTElseタグで処理する
多くのブロックタグでは、ブロック内にMTElseタグの部分を入れることができます。
ブロックで何も出力されなかったときに、MTElseタグの部分が出力されます。
<mt:XXX> 記事等の情報を出力する部分 <mt:Else> ブロック内で何も出力するものがなかったときに出力する部分 </mt:XXX>
例えば、記事の一覧を出力する際に、記事がない場合に「記事がありませんでした」と出力する場合は、以下のようにテンプレートを組みます。
<mt:Entries> <mt:EntriesHeader><ul></mt:EntriesHeader> <li><$mt:EntryTitle$></li> <mt:EntriesFooter></ul></mt:EntriesFooter> <mt:Else> <p>記事がありませんでした</p> </mt:Entries>
2.条件判断で処理する
ブロックタグによっては、MTElseタグを使う書き方に対応していないものもあります。
その場合は、「ブロック内を処理したかどうか」を、条件判断するようにします。
書き方は以下のようになります。
<$mt:SetVar name="flag" value="0"$> <mt:XXX> 記事等の情報を出力する部分 <$mt:SetVar name="flag" value="1"$> </mt:XXX> <mt:Unless name="flag"> ブロック内で何も出力するものがなかったときに出力する部分 </mt:Unless>
ブロックに入る前に、変数flagの値を0にしておきます(1行目)。
ブロック内で何かが出力されたときには、4行目のMTSetVarタグで、変数flagの値が1に変わります。
一方、ブロック内で何も出力されなかったときには、4行目のMTSetVarタグは実行されないので、変数flagの値は0のままです。
ブロックの処理が終わった後に、MTUnlessタグを使って、変数flagの値が0かどうかを判断します。
上の話より、ブロック内で何も出力されていなければ、変数flagの値は0ですので、条件が成立します。
したがって、「ブロック内で何も出力するものがなかったときに出力する部分」が出力されます。
一方、ブロック内で何かを出力したときには、変数flagの値は1です。
したがって、条件は成立せず、MTUnlessタグのブロック内は出力されません。
例えば、MTEntryPreviousタグで、前の記事へのリンクを出力したいとします。
ただし、前の記事がないときには、「前の記事はありません」という出力したいとします。
この場合は、以下のようにテンプレートを組みます。
<$mt:SetVar name="flag" value="0"$> <mt:EntryPrevious> <a href="<$mt:EntryPermalink encode_html="1"$>" title="<$mt:EntryTitle encode_html="1"$>">前の記事</a> <$mt:SetVar name="flag" value="1"$> </mt:EntryPrevious> <mt:Unless name="flag"> 前の記事はありません </mt:Unless>