「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
ブログ記事詳細検索プラグイン(その24・検索フォーム/検索結果表示の事例・カテゴリのOR検索)
検索フォームで、ブログ記事が属するカテゴリを条件に指定したい場合もあります。
今回はその場合の検索フォームと検索結果表示テンプレートの作り方を解説します。
以下のような事例を基に解説します。
- 冒頭の画面のように、検索フォームにカテゴリの一覧を表示し、チェックボックスでカテゴリを選べるようにします。
- 検索結果表示用のテンプレートモジュールには、「詳細検索結果」という名前を付けるものとします。
1.検索フォームの作成
複数のカテゴリのOR検索を行えるようにしたい場合、MTTopLevelCategories等のタグを使って、カテゴリを選択する欄を出力します。
各カテゴリの選択欄は、以下のどちらかの方法で作ります。
- 複数選択可能なselectを使う(multiple属性を付ける)
- カテゴリ毎にチェックボックスを作り、すべてのチェックボックスのname属性を同じ値にする
また、フォームからCGIに送信する値(selectやチェックボックスのvalue属性)として、カテゴリの名前か、カテゴリのIDを使います。
ここでは例として、冒頭の画面のように、カテゴリをチェックボックスで選択できるようにします。
また、フォームからCGIにカテゴリ名を送信するようにします。
この場合、MTTopLevelCategoriesタグのブロックでカテゴリを順に取り出し、カテゴリ毎にチェックボックスを出力します。
また、チェックボックスのvalue属性をカテゴリ名(MTCategoryLabelタグ)にして、CGIにカテゴリ名が送信されるようにします。
実際に検索フォームを組むと、以下のようになります。
7/17行目のMTTopLevelCategoriesタグでカテゴリを順に出力し、11行目でチェックボックスを出力します。
<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="詳細検索結果"$>" /> <div> <label for="entry_price">カテゴリ</label> <div id="cattree_div"> <mt:SortedTopLevelCategories> <mt:SubCatIsFirst> <ul class="cattree"> </mt:SubCatIsFirst> <li><input type="checkbox" name="cat" value="<$mt:CategoryLabel$>" /><$mt:CategoryLabel><br /> <$mt:SubCatsRecurse$> </li> <mt:SubCatIsLast> </ul> </mt:SubCatIsLast> </mt:SortedTopLevelCategories> </div> </div> <p> <input type="submit" value="送信" /> </p> </form>
なお、上のフォームでは、カテゴリの階層が分かるように、カテゴリをul/li要素で出力しています。
適宜スタイルシートを指定して、要素の書式も設定するようにします。
このフォームを含むテンプレートの例は、以下のリンクからダウンロードすることができます。
2.検索結果テンプレートの作り方
次に、検索結果テンプレートを作ります。
フォーム側で複数選択のselectを使うか、name属性が同じチェックボックスを多数使った場合、検索結果テンプレートでMTGetQueryParamsToVarsタグを実行すると、select/チェックボックスで選択された項目が、「qp_name属性_a」のような名前の配列変数に代入されます。
例えば、1.で作ったフォームだと、チェックボックスのname属性を「cat」にしていました。
この場合だと、MTGetQueryParamsToVarsタグによって、チェックボックスで選択された個々のカテゴリが、「qp_cat_a」という名前の配列変数に代入されます。
この配列を、MTSearchConditionCategoryタグのcategoryモディファイアや、MTSearchConditionCategoryIDタグのinclude_cat_idsモディファイアに指定します。
ただし、フォームでカテゴリが1つも選択されていない場合、MTSearchConditionCategory/MTSearchConditionCategoryIDタグがエラーになります。
そこで、MTSearchConditionCategorySectionタグを、「<mt:If name="qp_name属性_a">」~「</mt:If>」のタグで囲んで、カテゴリが選択されていない時にはMTSearchConditionCategorySectionタグのブロックを実行しないようにします。
ここまでの話に基づいて、検索結果テンプレートの主要部分を作ると、以下のようになります。
4~6行目のMTSearchConditionCategorySectionタグで、フォームで選択されたカテゴリを元に、ブログ記事を検索しています。
<$mt:GetQueryParamsToVars$> <mt:SearchConditions> <mt:If name="qp_cat_a"> <mt:SearchConditionCategorySection> <$mt:SearchConditionCategory category="$qp_cat_a"$> </mt:SearchConditionCategorySection> </mt:If> </mt:SearchConditions> <mt:IfNonZero tag="SearchLoadedEntryCount"> <p><$mt:SearchLoadedEntryCount$>件</p> <mt:Entries> <$mt:Include module="ブログ記事の概要"$> </mt:Entries> <mt:Else> <p>条件に合う記事がありませんでした。</p> </mt:IfNonZero>
なお、上記の部分を含むテンプレートの例は、以下のリンクからダウンロードすることができます。
3.SearchEntriesプラグイン関係の記事の一覧
SearchEntriesプラグイン関係のその他の記事は、以下のリンクから参照できます。
- ブログ記事詳細検索プラグイン(その1・概要/インストール/ライセンス)
- ブログ記事詳細検索プラグイン(その2・「ブログ記事のフィールドの値が○○に等しい」場合の検索)
- ブログ記事詳細検索プラグイン(その3・「ブログ記事のフィールドの値に○○を含む」場合の検索)
- ブログ記事詳細検索プラグイン(その4・「ブログ記事のフィールドの値が○○以上」等の場合の検索)
- ブログ記事詳細検索プラグイン(その5・ブログ記事のフィールドどうしでのOR検索)
- ブログ記事詳細検索プラグイン(その6・カテゴリのOR検索)
- ブログ記事詳細検索プラグイン(その7・カテゴリのAND検索)
- ブログ記事詳細検索プラグイン(その8・タグの検索)
- ブログ記事詳細検索プラグイン(その9・カスタムフィールドでの検索の基本)
- ブログ記事詳細検索プラグイン(その10・カスタムフィールドでの検索の応用)
- ブログ記事詳細検索プラグイン(その11・各種の検索条件の指定)
- ブログ記事詳細検索プラグイン(その12・ブログ記事の並べ替え)
- ブログ記事詳細検索プラグイン(その13・検索結果の一部を読み込む)
- ブログ記事詳細検索プラグイン(その14・複雑なOR検索)
- ブログ記事詳細検索プラグイン(その15・検索結果の件数の出力)
- ブログ記事詳細検索プラグイン(その16・検索フォーム作成の基本)
- ブログ記事詳細検索プラグイン(その17・検索結果表示テンプレート作成の基本)
- ブログ記事詳細検索プラグイン(その18・検索を動作させるための設定)
- ブログ記事詳細検索プラグイン(その19・検索フォーム/検索結果表示の事例・1つの数値で検索)
- ブログ記事詳細検索プラグイン(その20・検索フォーム/検索結果表示の事例・数値の範囲で検索)
- ブログ記事詳細検索プラグイン(その21・検索フォーム/検索結果表示の事例・数値の範囲をselectで選択)
- ブログ記事詳細検索プラグイン(その22・検索フォーム/検索結果表示の事例・日付で検索)
- ブログ記事詳細検索プラグイン(その23・検索フォーム/検索結果表示の事例・期間で検索)
- ブログ記事詳細検索プラグイン(その24・検索フォーム/検索結果表示の事例・カテゴリのOR検索)
- ブログ記事詳細検索プラグイン(その25・検索フォーム/検索結果表示の事例・カテゴリのAND検索)
- ブログ記事詳細検索プラグイン(その26・検索フォーム/検索結果表示の事例・タグのOR検索)
- ブログ記事詳細検索プラグイン(その27・検索フォーム/検索結果表示の事例・タグのAND検索)
- ブログ記事詳細検索プラグイン(その28・検索フォーム/検索結果表示の事例・ドロップダウン/ラジオボタンのカスタムフィールドの検索)
- ブログ記事詳細検索プラグイン(その29・検索結果のページ分割/静的な検索の場合)
- ブログ記事詳細検索プラグイン(その30・検索結果のページ分割/動的な検索の場合)
- ブログ記事詳細検索プラグイン(その31・検索結果のページ分割/PHPによるキャッシュ)
- SearchEntriesプラグインでMore Custom FieldsプラグインのCheckbox Groupを検索する(静的編)
- SearchEntries プラグインでMore Custom FieldsプラグインのCheckbox Groupを検索する(動的編)
- SearchEntriesプラグイン不具合修正