以前はバージョン4.15の名で出ていたMT4.2ですが、正式リリースが確か・・・今月中?末?だったでしょうか?
そんな事もあって、機能のチェックを細々とやってます。
そしたら、検索機能周りで大幅強化が施されてるような。。。
■MT4.15 で強化されたブログ内検索を活用する様々な検索構文 | MovableType.jp
そんな中で目に留まったのは「カテゴリ」と「ユーザ」の文字。
ふむ・・・?どうやらinput要素を用いてフィルタリング出来るみたいです。
ちなみに、以前は「コメント」と「エントリー文」内で分けた検索を行う事が可能でした。
このサイトは、検索の絨毯爆撃に遭う事が多く(多過ぎ)て、代替としてGoogle検索を用いてます。
ので、見せらんなくてごめんなさい。
カテゴリ検索を備えてみる
試しにちょっとやってみました。が、これで良いのかなぁ?って不安。
デフォルトで備わってるWidgetを久しぶりに触りましたー。
検索フォームを表示させてるWidgetに、プルダウンでカテゴリ指定をくっつけてみただけです。
<div class="widget-search widget">
<h3 class="widget-header">検索</h3>
<div class="widget-content">
<form method="get" action="<$mt:CGIPath$><$mt:SearchScript$>">
<input type="text" id="search" class="ti" name="search" value="<$mt:SearchString$>" />
<mt:If name="search_results">
<input type="hidden" name="IncludeBlogs" value="<$mt:SearchIncludeBlogs$>" />
<MTCategories><input type="hidden" name="category" value="<mt:categorylabel>" /></MTCategories>
<mt:Ignore>
<!-- use these options only with MT::App::Search::Legacy -->
<ul class="search-options">
<li><input type="checkbox" name="CaseSearch" /> 大文字/小文字を区別する</li>
<li><input type="checkbox" name="RegexSearch" /> 正規表現</li>
</ul>
</mt:Ignore>
<mt:Else>
<input type="hidden" name="IncludeBlogs" value="<$mt:BlogID$>" />
</mt:If>
<input type="hidden" name="limit" value="<$mt:SearchMaxResults$>" />
<select name="category">
<option value="0">全カテゴリーから検索</option>
<MTCategories><option value="<mt:categorylabel>"><$MTCategoryLabel$></option></MTCategories>
</select>
<input type="submit" accesskey="4" value="検索" />
</form>
</div>
</div>
2つ3つくらいのカテゴリ、2つ3つくらいのエントリーでしか試してないですけど。
mt:categoriesかmt:toplevelcategories使うかは好み・目的の仕様で調節で。
あとがき
ユーザ別のフィルタリングも出来るみたいですが、そちらはまだ試してないです。
投稿者が少数ならチェックボックスとかラジオボタンで。
多数になるならプルダウンにするとか。。。かな?
~~さんが投稿した~~カテゴリに絞り込んでの検索結果表示、とか出来るようにしてみたいです。
input要素には「or」も使えたりするようなので、まだより良い指定の仕方とかありますね。
MT4.2が出たら、検索周りの情報もたくさん出て来ると良いなぁ。。。
4.2はまだ候補版なので、正式にはどうなるのかな?ってとこです。
続報が楽しみなMTはこちらよりー。
■Movable Type 4.2 ベータ | Movable Type ベータ
追記:2008/07/19 10:47:23:困惑な事態
ちょっと見直してて、<mt:If name="search_results"> の中に
<MTCategories><input type="hidden" name="category" value="<mt:categorylabel>" /></MTCategories>
が入ってるのはおかしいのではなかろうか?
と思って、上記をifの外に出してみたんだけど、そしたらカテゴリ検索出来ません。
あれ?え、だってこれがないといけないんじゃ・・・?(汗
困惑しつつ上記を ignore で括って消してみました。するとカテゴリ検索出来る。
・・・これ要らないの?
<div class="widget-search widget">
<h3 class="widget-header">検索</h3>
<div class="widget-content">
<form method="get" action="<$mt:CGIPath$><$mt:SearchScript$>">
<input type="text" id="search" class="ti" name="search" value="<$mt:SearchString$>" />
<mt:If name="search_results">
<input type="hidden" name="IncludeBlogs" value="<$mt:SearchIncludeBlogs$>" />
<mt:Ignore>
<!-- use these options only with MT::App::Search::Legacy -->
<ul class="search-options">
<li><input type="checkbox" name="CaseSearch" /> 大文字/小文字を区別する</li>
<li><input type="checkbox" name="RegexSearch" /> 正規表現</li>
</ul>
</mt:Ignore>
<mt:Else>
<input type="hidden" name="IncludeBlogs" value="<$mt:BlogID$>" />
</mt:If>
<input type="hidden" name="limit" value="<$mt:SearchMaxResults$>" />
<select name="category">
<option value="0">全カテゴリーを検索</option>
<MTTopLevelCategories>
<MTSubCatIsFirst></MTSubCatIsFirst><MTIfNonZero tag="MTCategoryCount">
<option value="<mt:categorylabel>"><$MTCategoryLabel$> [<$MTCategoryCount$>]</option>
</MTIfNonZero><MTSubCatsRecurse><MTSubCatIsLast></MTSubCatIsLast>
</MTTopLevelCategories>
</select>
<input type="submit" accesskey="4" value="検索" />
</form>
</div>
</div>
ど、どういうこと・・・?(;「・ω・)「
あ、それとWidget内でのMTカテゴリタグの動き方が判んなくなっちゃった。あはは(汗
だってmt:topcategories使ってもサブカテゴリが出て来なくてゴニョゴニョ・・・。
この書き方だとサブカテゴリも出て来てOKかな。
更に追記:2008/07/20 18:19:40
ラジオボタンを用いて絞り込んでみたり、プルダウンにサイズ付けてみたり、ユーザ指定も加えてみたり。
およ?と思ってのは、ユーザ指定の際に「<$MTAuthorName$>」を用いずに「<$MTAuthorDisplayName$>」を利用するところ。
細かいところだけど、DisplayNameを利用してるのが良く考えてあるなぁ、と思いました。
これで一応「~~さんが書いた~~カテゴリに属するエントリを検索」ってのが出来た・・・かな?
checkedのvalueの値が空なのは「0」(ゼロ)とか入れといても良いかもしんないですね。
Authorの値が0で有効になるかは判んないです。
・・・・・Author=0って、以前に何かの指定で使われてたような気がするけどなんだったっけ。
/( -ω-)\ ウー
Formとか苦手なんで、アドバイスとか気付いた点あったらぜひ教えて下さい。