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

検索フォームで、ブログ記事につけたタグを条件に指定したい場合もあります。
今回は、タグのOR検索を行う場合の検索フォームと、検索結果表示テンプレートの作り方を解説します。

タグで検索するフォーム

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

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

1.検索フォームの作成

まず、検索フォームを作成します。
このフォームには特に難しい点はなく、単にタグを入力するためのinput要素を作るだけです。
例えば、タグ入力のinput要素で、name属性を「tag」にするなら、フォームは以下のように組みます。

<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="詳細検索結果"$>" />
  <p>
    <label for="tag">タグ</label>
    <input type="text" name="tag" id="tag" />
  </p>
  <p>
    <input type="submit" value="送信" />
  </p>
</form>

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

タグでOR検索する場合の検索フォームテンプレートの例

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

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

タグで検索する場合、検索結果テンプレートにMTSearchConditionTagSectionタグのブロックを入れ、その中にMTSearchConditionTagタグを書いて、タグの条件を指定します。
1.の手順で作ったフォームだと、入力欄のname属性が「tag」だったので、変数「qp_tag」の値をMTSearchConditionTagタグのtagモディファイアに指定するようにします。

ただし、タグを全く入力されていない場合は、タグでの検索を行わないようにします。
それには、変数qp_tagに値があるときだけ、MTSearchConditionTagSectionタグのブロックを実行するようにします。

<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
  <mt:If name="qp_tag">
    <mt:SearchConditionTagSection>
      <$mt:SearchConditionTag tag="$qp_tag"$>
    </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>

4~6行目のMTSearchConditionTagSectionタグのブロックで、タグの検索条件を指定しています。
また、3/7行目のMTIfタグで、タグの条件が入力されている(変数qp_tagに値がある)時だけ、検索が動作するようにしています。

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

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

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

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

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