ブログ記事詳細検索プラグイン(その20・検索フォーム/検索結果表示の事例・数値の範囲で検索)

検索フォーム/検索結果表示テンプレートの事例の1つとして、「フィールドの値が○○以上□□以下」など、2つの数値で条件を指定して検索する場合を取り上げます。

数値の範囲で検索

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

  • 商品の価格を表すために、「entry_price」というベースネームのカスタムフィールドを作っているものとします。
  • 検索結果表示用のテンプレートモジュールには、「詳細検索結果」という名前を付けるものとします。
  • 「価格が○○円以上□□円以下」という条件で検索できるようにします。

1.検索フォーム側

検索フォーム側には、上限/下限の2つの数値を入力するために、テキスト入力欄を2つ作ります。
下限/上限のテキスト入力欄のname属性を、それぞれ「entry_price_min」「entry_price_max」にするなら、テンプレートの検索フォーム部分は以下のように組むことが考えられます。

<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="entry_price_min">価格が</label>
    <input type="text" name="entry_price_min" id="entry_price_min" size="10" />円以上
    <input type="text" name="entry_price_max" id="entry_price_max" size="10" />円以下
  </p>
  <p>
    <input type="submit" value="送信" />
  </p>
</form>

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

数値の範囲で検索する場合の検索フォームテンプレートの例

2.検索結果表示テンプレート側

検索結果表示テンプレート側では、以下のような手順で、検索結果を出力します。

  • MTGetQueryParamsToVarsタグを使って、フォームから送信された値を変数に代入します。
  • MTSearchConditionCompareタグやMTSearchConditionCFSectionタグ/MTSearchConditionCFCompareタグを使って、数値での検索条件を指定します。

1.で作ったフォームだと、MTGetQueryParamsToVarsタグによって、入力された数値は「qp_entry_price_min」と「qp_entry_price_max」という変数に代入されます。
これらの変数を、検索条件の下限/上限に指定します。
また、カスタムフィールドで検索するので、MTSearchConditionCFSectionタグとMTSearchConditionCFCompareタグを使って条件を指定します。
上記の話に沿って、検索結果表示テンプレートの検索部分を作ると、以下のようになります。

<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_price">
    <$mt:SearchConditionCFCompare ge="$qp_entry_price_min" le="$qp_entry_price_max"$>
  </mt:SearchConditionCFSection>
</mt:SearchConditions>

4行目のMTSearchConditionCFCompareタグで、ge/leの2つのモディファイアを使って、範囲の下限と上限を指定しています。

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

数値の範囲で検索する場合の検索結果表示テンプレートの例

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

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

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