ブログ記事詳細検索プラグイン(その25・検索フォーム/検索結果表示の事例・カテゴリのAND検索)

昨日はカテゴリのOR検索を行う方法を解説しました。
それと同じような手法で、AND検索を行うこともできます。
今日はその手順を解説します。

以下のような事例を基に解説します。

  • 昨日の記事の冒頭の画面のように、検索フォームにカテゴリの一覧を表示し、チェックボックスでカテゴリを選べるようにします。
  • 検索結果表示用のテンプレートモジュールには、「詳細検索結果」という名前を付けるものとします。

1.検索フォームの作成

検索フォームは、OR検索の場合とまったく同じ方法で作ることができます。
複数選択可能なselectか、name属性が同じチェックボックスを複数使って、カテゴリを複数選択できるようにします。
具体的なフォームの作り方は、昨日の記事を参照してください。

2.検索結果テンプレートの作成

検索結果テンプレートも、OR検索の場合と似た手順で作ることができます。
ただし、MTSearchConditionCategoryタグの使い方が異なります。

OR検索の場合は、MTSearchConditionCategoryタグのcategoryモディファイアに、検索対象のカテゴリ名が入った配列を指定しました。
一方、AND検索の場合は、カテゴリ毎にMTSearchConditionCategoryタグを実行します。

昨日解説したように、フォームで選択されたカテゴリは、「qp_name属性_a」のような名前の配列変数に代入されます。
MTLoopタグを使ってこの配列からカテゴリ名を1つずつ順に取り出し、それをMTSearchConditionCategoryタグに指定するようにします。

ここまでの話に基づいて、検索結果テンプレートの主要部分を作ると、以下のようになります。

<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
  <mt:If name="qp_cat_a">
    <mt:SearchConditionCategorySection>
      <mt:Loop name="qp_cat_a">
        <$mt:SearchConditionCategory category="$__value__"$>
      </mt:Loop>
    </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>

5~7行目のMTLoopタグで、フォームで選択されたカテゴリを1つずつ取り出します。
そして、6行目のMTSearchConditionCategoryタグで、各カテゴリを検索条件に指定し、カテゴリ間のAND検索を行います。

なお、上記の部分を含むテンプレートの例は、以下のリンクからダウンロードすることができます。

カテゴリでAND検索する場合の検索結果表示テンプレートの例

3.SearchEntriesプラグイン関係の記事の一覧

SearchEntriesプラグイン関係のその他の記事は、以下のリンクから参照できます。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください