タグのOR検索
更新日:2024.02.01
検索フォームで、ブログ記事につけたタグを条件に指定したい場合もあります。
今回は、タグのOR検索を行う場合の検索フォームと、検索結果表示テンプレートの作り方を解説します。
以下のような事例を基に解説します。
- 冒頭の画面のように、検索フォームにタグを入力する欄を表示します。
- 検索結果表示用のテンプレートモジュールには、「詳細検索結果」という名前を付けるものとします。
検索フォームの作成
まず、検索フォームを作成します。
このフォームには特に難しい点はなく、単にタグを入力するための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>
検索結果テンプレートの作り方
次に、検索結果テンプレートを作ります。
タグで検索する場合、検索結果テンプレートに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に値がある)時だけ、検索が動作するようにしています。