「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
SearchContentsプラグイン(その15・検索フォームと検索結果出力テンプレートの例)
SearchContentsプラグインで、検索フォームを使って検索結果を出力する例を紹介します。
1.取り上げる例
「商品」というコンテンツタイプがあり、「商品名」というテキスト型のフィールドと、「単価」という数値型のフィールドがあるものとします。
この状況で、「商品名に○○を含み、単価が△△円以上□□円未満」という条件で検索するようなフォームを作るとします。
また、検索結果は単価の安い順に並べ替えるとします。
2.検索フォーム
検索フォームを表示するページのテンプレートに、以下のような部分を追加します。
3つのinput要素を使って、商品名/価格の下限/上限の条件を入力できるようにしています。
なお、3行目の「テンプレート名」のところは、実際の検索結果表示テンプレートモジュールの名前に置き換えます。
<form method="get" action="<$mt:RealtimeRebuildCGIPath$>">
<input type="hidden" name="blog_id" value="<$mt:BlogID$>" />
<input type="hidden" name="tmpl_id" value="<$mt:GetTemplateID tmpl_name="テンプレート名"$>" />
<input type="hidden" name="first_time" value="1" />
<p>
<label for="item_name">商品名</label> <input type="text" id="item_name" name="item_name" />
</p>
<p>
<label for="min">価格の下限</label> <input type="text" id="min" name="min" />
<label for="min">上限</label> <input type="text" id="max" name="max" />
</p>
<p>
<input type="submit" value="送信" />
</p>
</form>
3.検索結果表示テンプレートモジュール
検索結果表示テンプレートモジュールは、以下のように組みます。
・
・(HTMLのヘッダーなど)
・
<$mt:GetQueryParamsToVars$>
<mt:SearchContents content_type="商品">
<mt:If name="qp_item_name">
<$mt:SearchContentContain content_field="商品名" values="$qp_item_name"$>
</mt:If name="qp_item_name">
<mt:If name="qp_min">
<$mt:SearchContentCompare content_field="単価" ge="$qp_min"$>
</mt:If>
<mt:If name="qp_max">
<$mt:SearchContentCompare content_field="単価" lt="$qp_max"$>
</mt:If>
<$mt:SearchContentSort content_field="単価"$>
</mt:SearchContents>
<mt:If tag="SearchContentLoadedCount">
<p><$mt:SearchContentLoadedCount$>件見つかりました</p>
<mt:SearchFoundContents>
<mt:If name="__first__">
<table>
<tr><th>商品名</th><th>単価</th></tr>
</mt:If>
<tr>
<td><a href="<$mt:ContentPermalink$>"><mt:ContentField content_field="商品名"><$mt:ContentFieldValue$></mt:ContentField></a></td>
<td><mt:ContentField content_field="単価"><$mt:ContentFieldValue$></mt:ContentField></td>
</tr>
<mt:If name="__last__">
</table>
</mt:If>
</mt:SearchFoundContents>
<mt:Else>
<p>条件にあう商品はありません</p>
</mt:If>
・
・(フッターなど)
・
前半では、フォームから送信された条件を元に、MTSearchContentsタグのブロックで検索を行っています。
フォームのそれぞれの欄に値を入力されないこともありますので、空欄かどうか(=変数に値があるかどうか)をMTIfタグで判断し、値があるときだけ条件として使うようにしています。
そして、後半では、検索されたコンテンツデータをtableとして出力しています。
