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として出力しています。