タグ検索結果を絞り込み!複数タグでAND検索(1)

Movable Typeのカスタマイズ ネタです。

このブログのタグ検索画面で表示されるタグのリンクを表示するように変更しました。また、リンクをクリックすると、表示中のタグとクリックしたタグのAND検索の結果が表示されるようになっています。

詳しいカスタマイズ方法は、こちらをご参照のこと。

小粋空間: タグ検索を絞り込む(その1)

↑タグ検索の絞り込みのメリットがわかります

小粋空間: タグ検索を絞り込む(その2:カスタマイズ)

↑具体的なカスタマイズ方法です

ここのブログでの変更場所は小粋空間さんで紹介の内容をアレンジしたもので、大きくは、検索結果の表示画面の2カ所を変更しています。

小粋空間さんの解説エントリーの通り、splitプラグインを導入しているのが前提になります。手を入れたテンプレートは、「2.1 4.2 以降の「既定のブログ」の場合」に相当すると思います。

1. システムテンプレート>検索結果

<mt:IfStraightSearch>

「<$mt:SearchString$>」の検索結果(<$MTCurrentPage$>/<$MTTotalPages$>)

</mt:IfStraightSearch>

<mt:IfTagSearch>

<mt:searchString setvar="tag_name" />

<mt:if name="tag_name" like=" AND ">

<mt:getVar name="tag_name" split=" AND " setvar="tag_list">

<mt:else>

<mt:setVarBlock name="tag_list[0]"><mt:getVar name="tag_name"></mt:setVarBlock>

</mt:if>

タグ「<mt:getVar name="tag_list" glue="," />」の検索結果(<$MTCurrentPage$>/<$MTTotalPages$>)

</mt:IfTagSearch>

タグ検索のときの、「<$MTSearchString$>」を変更したのは、タグ「aaa AND bbb AND ccc」となるのが好きじゃなかったので、というだけです。

上のテンプレートの状態なら、タグ「aaa, bbb, ccc」となります。

2. テンプレートモジュール>ブログ記事の概要

絞り込み用のタグの表示場所も、小粋空間さん指定の場所とは変えてしまいました。mtifでの条件設定もここのブログの状態にあわせてあります。あまりデフォルトと変わっていないと思いますが、このあたりは各自のブログで調整が必要な箇所になりますね。

<mt:IfTagSearch>

<mt:EntryIfTagged>

<mt:entryTags>

<mt:setVar name="tag_flag" value="0" />

<mt:loop name="tag_list">

<mt:if tag="TagName" eq="$__value__">

<mt:setVar name="tag_flag" value="1" />

</mt:if>

</mt:loop>

<mt:unless name="tag_flag">

<mt:setVarBlock name="tag_and_array" function="push"><a href="<mt:searchScript />?blog_id=<mt:blogID />&tag=<mt:searchString>%20AND%20<mt:tagName />&limit=20&IncludeBlogs=<mt:blogID />" rel="tag" title="<mt:getVar name="tag_list" glue=" ," />, <mt:tagName />のタグ一覧へ"><mt:tagName /></a></mt:setVarBlock>

<mt:else>

<mt:setVarBlock name="tag_and_array" function="push"><mt:tagName /></mt:setVarBlock>

</mt:unless>

</mt:entryTags>

<div class="entry-tags">

<h4>タグ<span class="delimiter">:</span></h4>

<ul>

<li><mt:getvar name='tag_and_array' glue='<span class="delimiter">,</span></li> <li>' /></li>

</ul>

<p>※リンクのあるタグをクリックすると、タグ検索結果をさらに絞り込めます。</p>

</div>

<mt:setVar name="tag_and_array" function="undef" />

</mt:EntryIfTagged>

</mt:IfTagSearch>

ここでは、1.でセットした tag_listという配列の変数を使っています。1.のカスタマイズをしない場合には、2.の前にtag_listをどこかでセットする必要があります。ここでは、バラバラにしてしまいましたが、小粋空間さんで解説されているのは、変数のセットから表示まで、1カ所へのコピペで動作するようになっています。2つに分けたのは、単なる私の好みで、別に必要なことではありません。

<追記 6/2>テンプレートのソースを変更しました。以前は変数で文字列の連結をしていたところで、配列を使っています。動作結果はほぼ同じです。</追記>

~~~~~

これで、AND検索へのクリックでのアクセスがずっとよくなったと思います。

いままで、グルーピングされた記事にアクセスしやすい方がいいかと、たとえば、「アドエス カスタマイズ」「アドエス バッテリー」「WILLCOM 03 カスタマイズ」「WILLCOM 03 バッテリー」なんて、長ったらしい複合語タグを付けてました。

これからは、クリック数は増えますが、

アドエス>カスタマイズ

アドエス>バッテリー

WILLCOM 03>カスタマイズ

WILLCOM 03>バッテリー

バッテリー>アドエス

バッテリー>WILLCOM 03

バッテリー>DMC-LX3

みたいな感じで、記事を絞り込んでいけるようになっています。

単語に近い言葉で、自然にタグ付けできる気持ちになりました。ああ、すっきり。

もうちょいやってみたいことがあるので、その気持ちを忘れないように、このエントリーは「(1)」にしておきます。