「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
エントリー内の画像をリストアップするプラグイン(その7)
「エントリー内の画像をリストアップするプラグイン」を使って、以下のようなことを行いたいというご要望がありました。
各カテゴリーから1件ずつ画像を取り出し、表組みにして表示したい。
このプラグインだけでは、カテゴリーをまたがって表組みにすることはできません。
しかし、拙作のVarHandlerプラグインを組み合わせればできますので、その例を紹介します。
1.考え方
カテゴリーをまたがって表組みにする場合、「変数」を利用して列の番号を管理するようにします。
例えば、3列の表組みにしたい場合、以下のように処理するようにします。
1.列の番号が1の時は、行の先頭なので、<tr>タグを出力する
2.画像を1つ出力する
3.列の番号が3の時は、行の最後なので、</tr>タグを出力する
4.列の番号を1つ増やし、その値が4になったら行が変わったことになるので、列の番号を1に戻す
また、カテゴリーの数によっては、行の途中(1列目や2列目)で表の出力が終わってしまい、表の最後の行で行末の</tr>タグが出力されません。
例えば、カテゴリーが7個の場合、1行目と2行目に3カテゴリーずつ出力され、3行目に1カテゴリーだけ出力されて、あと2列が出力されません。
そこで、各カテゴリーの画像を出力し終わったら、行の途中で出力が止まっているかどうかを判断して、空白のセルと、行末の<tr>タグを出力するようにします。
2.例
上記の話に基づいて、3列の表組みにする例を作ってみました。
「col_count」という変数を使って、列の番号を管理しています。
なお、前述したように、この例ではVarHandlerプラグインで拡張したタグを使っていますので、このプラグインもインストールする必要があります。
<MTSetVar name="col_count" value="1">
<table class="image-list" cellspacing="0" cellpadding="0">
<MTSubCategories>
<MTEntriesIfHaveImages>
<MTIfNumVar name="col_count" value="1"><tr></MTIfNumVar>
<MTEntryImages img_lastn="1">
<td>
<table>
<tr>
<td class="image-list-item"><a href="<$MTEntryImageSrc regex="s/(.*)-thumb\.(.*)/$1.$2/"$>" target="_blank"><img src="<$MTEntryImageSrc$>" width="<$MTEntryImageWidth cell_size="120,90"$>" height="<$MTEntryImageHeight cell_size="120,90"$>" alt="<$MTEntryImageAlt$>" /></a></td>
</tr>
<tr>
<td><MTEntryImageEntry><a href="<$MTEntryPermalink$>"><$MTCategoryLabel$>:<$MTEntryTitle$></a></MTEntryImageEntry></td>
</tr>
</table>
</td>
</MTEntryImages>
<MTIfNumVar name="col_count" value="3"></tr></MTIfNumVar>
<MTAddVar name="col_count" value="1">
<MTIfNumVar name="col_count" value="4"><MTSetVar name="col_count" value="1"></MTIfNumVar>
</MTEntriesIfHaveImages>
<MTSubCatsRecurse>
</MTSubCategories>
<MTIfNumVar name="col_count" value="2"><td></td><MTAddVar name="col_count" value="1"></MTIfNumVar>
<MTIfNumVar name="col_count" value="3"><td></td></tr><MTAddVar name="col_count" value="1"></MTIfNumVar>
</table>
