Movable Type/SearchEntriesプラグイン | エントリーを検索した結果を表示する http://www.ark-web.jp/sandbox/wiki/4518.html
概要 †
Movable Type(以下MT)に書いたエントリーの検索は、デフォルトの任意の文字入力で検索するしかない非力なもの。という印象でしたが、
SearchEntries プラグインとその他のプラグインを使うことで、タグやカテゴリなどを範囲で検索したり
あるフィールドの数値がx以上(またはx以下や、等しい)エントリーを検索したりできます。
詳しくはプラグイン制作者の書いた↓こちらの本に書いてあります。
MTOS 活用テクニック
http://www.amazon.co.jp/dp/4899772386
インストール †
- 今回利用しているMTのバージョンは4.26です。
- まずはSearchEntries プラグインをダウンロードします。
下記より、SearchEntries_0_90.zip をダウンロードしました。
http://www.h-fj.com/blog/mtplgdoc/searchentries.php
- mtのpluginディレクトリに展開して終わりです。
インストール後はMTの「システムメニュー」の「プラグイン」から Search Entries を探して利用可能であることを確認します。

記事構成 †
| タイトル | 本文 | 続き | タグ | キーワード | 公開日 |
| test1 title | test1 body part | test1 more part | tag1,tag2 | key1,key2 | 2009-01-18 |
| test2 title | test2 body part | test2 more part | tag1,tag2-1 | key1,key2-1 | 2009-02-18 |
| test3 title | test3 body part | test3 more part | tag1,tag3 | key1,key3 | 2009-03-18 |
| test4 title | test4 body part | test4 more part | tag4 | key4 | 2009-04-18 |
| test5 title | test5 body part | test5 more part | tag1 | key1 | 2009-05-18 |
| test6 title | test6 body part | test6 more part | 2009-06-18 |
静的に検索した結果を表示する †
とりあえず、上記の記事を検索して出してみる。
ここでは再構築をした場合にのみ検索結果が作られるので、静的にページを作る。ということ。
タイトルの検索 †
- タイトルが「test1 title」に一致するエントリーは?
<mt:SearchConditions> <mt:SearchConditionValues field="title" values="test1 title"> </mt:SearchConditions>
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result.html

- 「最近のブログ記事」という部分に1件出ました。
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result.html
- タイトルに「test」を含むするエントリーは?
<mt:SearchConditions> <mt:SearchConditionLike field="title" values="test"> </mt:SearchConditions>
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result2.html

- 「最近のブログ記事」という部分に3件降順で出ましたね。
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result2.html
結果件数の変更 †
- 上記と同じ条件で6件出したいよ
<mt:SearchConditions> <mt:SearchConditionLike field="title" values="test"> <mt:SearchLimit limit="10"> </mt:SearchConditions>
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result2-2.html

- あれ? 失敗。SearchLimitではなくテンプレート側で制御している様子。
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result2-2.html
- 「最近のブログ記事」のテンプレートを修正して6件出したいよ
- 「テンプレート」の「ウィジェット」の「最近のブログ記事 (拡張)」を編集します。
<mt:If tag="BlogEntryCount"> <mt:Entries lastn="3" unique="1"> <mt:EntriesHeader> <div class="widget-recent-entries widget-archives widget"> <h3 class="widget-header">最近のブログ記事</h3> <div class="widget-content"> <dl> </mt:EntriesHeader> <dt><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></dt> <dd><$mt:EntryBody words="20" convert_breaks="1" $>…</dd> <dd class="entry-meta"><mt:If tag="EntryAuthorDisplayName"><$mt:EntryAuthorDisplayName encode_html="1"$><mt:Else><$mt:EntryAuthorUsername encode_html="1"$></mt:If> | コメント(<$mt:EntryCommentCount$>)</dd> <mt:EntriesFooter> </dl> </div> </div> </mt:EntriesFooter> </mt:Entries> </mt:If> - lastn="3" になってました。10程度に書き換えます。
<mt:If tag="BlogEntryCount"> <mt:Entries lastn="10" unique="1"> (以下略) - 保存して、 search_entries_result2-2.html のインデックステンプレートを再構築
http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result2-2.html
- 無事に6件出ました。
- 「テンプレート」の「ウィジェット」の「最近のブログ記事 (拡張)」を編集します。
ボケハマリ:「最近のブログ記事 (拡張)」を修正した理由 †
なぜ、サイドボックスの「最近のブログ記事 (拡張)」を修正しないといけなかったのか、という疑問があったので調べてみると、
単に自分で作ったインデックステンプレートに <mt:Entries>タグが書いていなかっただけだった…
↓このように、SearchConditions の直下に <mt:Entries> タグを書いておけば、その時点で表示される^^;
<mt:SearchConditions>
<mt:SearchConditionLike field="title" values="test">
<mt:SearchLimit limit="10">
</mt:SearchConditions>
<mt:Entries lastn="10">
<mt:EntriesHeader>
<h3 class="header">最近のブログ記事</h3>
<dl>
</mt:EntriesHeader>
<dt><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></dt>
<dd><$mt:EntryBody words="20" convert_breaks="1" $>…</dd>
<dd class="entry-meta"><mt:If tag="EntryAuthorDisplayName"><$mt:EntryAuthorDisplayName encode_html="1"$><mt:Else><$mt:EntryAuthorUsername encode_html="1"$></mt:If> | コメント(<$mt:EntryCommentCount$>)</dd>
<mt:EntriesFooter>
</dl>
</mt:EntriesFooter>
</mt:Entries>
http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result2-3.html

- 無事に6件出ました。
タグの検索 †
- タグに「tag1」を含むエントリーは? (5件出す)
<mt:SearchConditions> <mt:SearchConditionTagSection> <mt:SearchConditionTag tag="tag1"> </mt:SearchConditionTagSection> <mt:SearchLimit limit="5"> </mt:SearchConditions>- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result3.html

- 4件表示されました。どれがヒットしたかは最初に書いた「記事構成」参照。
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result3.html
公開日の範囲検索 †
- 公開日が「2009-02-01〜2009-05-31」のエントリーは? (5件出す)
<mt:SearchConditions> <mt:SearchConditionCompare field="authored_on" ge="20090201000000"> <mt:SearchConditionCompare field="authored_on" le="20090531235959"> <mt:SearchLimit limit="5"> </mt:SearchConditions>
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result4.html

- 問題なく4件出ました。どれがヒットしたかは最初に書いた「記事構成」参照。
- http://okra.ark-web.jp/~takemura/public/mt-sample/blog/search_entries_result4.html
カスタムフィールドを検索する †
カスタムフィールドが検索できるのかが気になったので調べてみました。
カスタムフィールドを追加する †
「設定」の「カスタムフィールド」から「フィールドを作成」
- フィールドを作成
- システムオブジェクト: ブログ記事
- 名前: カスタム
- 説明: SearchEntriesプラグイン用カスタムフィールド
- 種類: テキスト
- 必須: 非必須
- 規定値: <未入力>
- ベースネーム: search_entries_custom
- テンプレートタグ: entrysearch_entries_custom
ブログ記事に表示されるように、
「設定」の「ブログ記事」の「ブログ記事作成画面の初期設定」より「カスタム」をチェックして[保存]
- ブログの新記事構成
- カスタムの項目しか増やしてません
| タイトル | 本文 | 続き | タグ | キーワード | カスタム | 公開日 |
| test1 title | test1 body part | test1 more part | tag1,tag2 | key1,key2 | hoge | 2009-01-18 |
| test2 title | test2 body part | test2 more part | tag1,tag2-1 | key1,key2-1 | fuga | 2009-02-18 |
| test3 title | test3 body part | test3 more part | tag1,tag3 | key1,key3 | hoga | 2009-03-18 |
| test4 title | test4 body part | test4 more part | tag4 | key4 | fuge | 2009-04-18 |
| test5 title | test5 body part | test5 more part | tag1 | key1 | huge | 2009-05-18 |
| test6 title | test6 body part | test6 more part | foga | 2009-06-18 |
カスタムフィールドを検索 †
- カスタム(search_entries_custom)が「hoga」に一致するエントリーは?
<mt:SearchConditions> <mt:SearchConditionValues field="search_entries_custom" values="hoga"> </mt:SearchConditions>
- 再構築で↓こういうエラーが出てしまった。
Can't call method "execute" on an undefined value
- 再構築で↓こういうエラーが出てしまった。
まとめ †
- 環境:MT 4.26
- SearchEntries_0_90
- ブログ記事の検索としてはかなり強力に思えます
- 今回は静的に検索した結果をブログページとして出力しましたが、
RealtimeRebuild プラグインと連携すると、ユーザーが入力したフォーム要素で検索した結果を即時再構築して返答する。といことができるようです。
この方法は、冒頭で紹介した「MTOS 活用テクニック」の本に載ってました。
- 今回は静的に検索した結果をブログページとして出力しましたが、
- MT 4.26のカスタムフィールドで試してみたところでは、再構築に失敗してしまいました
- ただし、「MTOS 活用テクニック」の本で作ったカスタムフィールド的プラグインを使用した場合は、問題なく検索できるようです
「P.178 表5.2 追加のフィールドのテンプレートタグ名と設定される値」を参照
- ただし、「MTOS 活用テクニック」の本で作ったカスタムフィールド的プラグインを使用した場合は、問題なく検索できるようです
- あと、ウェブページの検索はできない?
tag: Movable Type、MT
添付ファイル:
![[PukiWiki] [PukiWiki]](image/sandbox.gif)



