ブログ記事詳細検索プラグイン(その17・検索結果表示テンプレート作成の基本)

検索フォームの次に、フォームから送信された条件に沿って検索結果を表示するように、テンプレートを作ります。
その基本的な手順を解説します。

1.検索条件が動的に変化する

フォームを使って検索する場合も、検索結果を表示するテンプレートにMTSearchConditionsタグのブロックを入れて、検索条件を指定します。
ただ、これまでの事例とは異なり、フォームの入力内容によって、検索条件が動的に変化します。
その点に対応する必要があります。

例えば、「ブログ記事のタイトルに○○が含まれる」という条件で検索したい場合だと、MTSearchConditionsタグのブロックを以下のように書きます。

<mt:SearchConditions>
  <$mt:SearchConditionLike field="title" values="○○"$>
</mt:SearchConditions>

この「values="○○"」の部分を、フォームで入力されたキーワードに置き換えれば、フォームに沿った検索を行うことができます。

2.フォームで入力された内容を変数で表す

上で述べたように、検索フォームを使って検索する場合、フォームの内容に沿って検索条件を動的に変える必要があります。
そこで、フォームで入力された内容を変数に代入するようにします。
そして、MTSearchConditionsタグのブロックでは、変数を使って条件を指定するようにします。

フォームの入力内容を変数に代入するには、「MTGetQueryParamsToVars」というテンプレートタグを使います。
このタグは、GetQueryParamプラグインによって追加されます。

MTGetQueryParamsToVarsタグを実行すると、フォーム内の各入力要素の値が、「qp_要素のname属性」という名前の変数に代入されます。
例えば、以下のように、検索フォームに「title」というname属性の要素を入れたとします。

<input type="text" id="title" name="title" />

この場合だと、name属性は「title」です。
したがって、MTGetQueryParamsToVarsタグを実行すると、この要素で入力された値は、「qp_title」という名前の変数に代入されます。

3.MTSearchConditionsブロックの組み方の例

変数に代入された値を、検索条件のタグに指定すれば、フォームの入力内容に沿った検索を行うことができます。

例えば、「ブログ記事のタイトルに○○が含まれる」という条件で検索したいとします。
また、検索フォームでは、「○○」を入力するテキスト欄に、「title」というname属性を付けているとします。
この場合、MTSearchConditionsブロックを以下のように組みます。

<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
  <$mt:SearchConditionLike field="title" values="$qp_title"$>
</mt:SearchConditions>

1行目のMTGetQueryParamsToVarsタグによって、フォームで入力された内容が変数に代入されます。
そして、3行目のMTSearchConditionLikeタグで、valuesモディファイアに変数qp_title(フォームの「title」の欄に入力された値)を指定しています。

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

searchresult01.mtml

なお、検索結果のテンプレートの入力方法や、フォームから検索結果テンプレートを呼び出せるようにする手順は、次回に解説します。

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

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