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

検索フォームを使って、タグのAND検索を行うこともできます。
今回は、タグのAND検索を行う場合の検索フォームと、検索結果表示テンプレートの作り方を解説します。

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

  • 検索フォームにタグを入力する欄を表示します。
  • 検索結果表示用のテンプレートモジュールには、「詳細検索結果」という名前を付けるものとします。

1.検索フォームの作成

検索フォームの作成方法は、OR検索の場合と同じです。
フォームに、タグを入力するためのテキスト入力欄を1つ作ります。
フォームの作り方は、OR検索の記事を参照してください。

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

次に、検索結果テンプレートを作ります。

AND検索を行う場合、MTSearchConditionsTagSectionタグのブロックの中で、ANDで結ぶ条件毎に、MTSearchConditionTagタグを実行します。
そこで、フォームで入力されたタグの並びを、1つ1つのタグに分解して、MTSearchConditionTagタグを順次実行するようにします。

2-1.MTGetParamSplitタグ

フォームで入力された文字列を、コンマで区切って分解するには、GetQueryParamプラグインの「MTGetParamSplit」というテンプレートタグを使います。
fieldモディファイアで、フォームの入力要素のname属性の値を指定します。

また、このタグはブロックタグになっています。
区切られた個々の文字列は、変数__value__に代入されるようになっています。

<mt:GetParamSplit field="入力要素のname属性の値">
  変数__value__で、入力された個々の値を処理
</mt:GetParamSplit>

例えば、フォームのタグの入力欄に、「りんご,みかん」と入力したとします。
また、入力欄のname属性を「tag」にしているとします。
この場合、「<mt:GetParamSplit field="tag">」~「</mt:GetParamSplit>」のタグのブロックを実行すると、繰り返し毎に、変数__value__には「りんご」と「みかん」が代入されます。

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

MTGetParamSplitタグを使って、検索結果テンプレートの主要部分を作ると、以下のリストのようになります。

<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
  <mt:If name="qp_tag">
    <mt:SearchConditionTagSection>
      <mt:GetParamSplit field="tag">
        <$mt:SearchConditionTag tag="$__value__"$>
      </mt:GetParamSplit>
    </mt:SearchConditionTagSection>
  </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行目のMTGetParamSplitタグで、フォームに入力されたタグの並びを、コンマで区切って分割します。
そして、6行目のMTSearchConditionTagタグで、個々のタグを条件に指定しています。
また、3/9行目のMTIfタグで、タグが全く入力されなかった場合にはMTSearchConditionTagSectionタグのブロックを実行しないようにして、タグの条件を指定しないようにしています。

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

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

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

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

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