TRASH-NEWS MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上

順路
  1. ホーム
  2. 2007年
  3. 12月
  4. 23日
  5. この記事 [現在地]
Search?
お知らせ
ここ数日更新が滞っていますが…… (2008/04/13 13:31)
4月より社会人となったため、時間の作り方がいまいちつかめないため、不定期の更新となります。まぁ……ニコニコメーカーでもお楽しみください!
1 2 3

MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上

関連ページ
  1. MovableType4
  2. PHP
  3. 検索
TRASH-NEWSは
I've Soundをこよなく愛するサイトです
初出時刻
2007年12月23日 03時35分 投稿
最終更新時刻
2008年02月21日 13時38分 改訂
  • この記事をはてブする
  • Yahoo!ブックマークに登録

MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上

唐突ですがTRASH-NEWSの検索結果がすこし見やすくなりました。これまでは検索で引っかかった記事本文の全文を表示していましたが、このたびGoogleやYahoo!などに準じた表示形式(マッチした検索語の前後数十文字をつなげて表示)に切り替えました。またそれに応じて表示件数も4件から10件に。すっきりしました(ex. 秋葉原』の検索結果)。

MovableType標準の検索エンジンはかなり病弱っ娘

TRASH-NEWSではブログ作成ツールとしてMovableTypeを利用しており、このMovableTypeには標準で検索エンジンが付属しています。MovableType4は検索エンジンが3時代より改善されたようですが、かわりに“謎のエラー(検索失敗)”をしょっちゅう起こすようになりました。どうも検索処理に高い負荷がかかる設計であるようです。10件しか記事がないときから既に“謎のエラー”が起きていましたから、これが1,000件単位の記事になったとき果たしてどうなるか……ガクブルがとまりません。こんな虚弱な検索エンジンに重荷など背負わせられない!

そこで検索結果をキャッシュする仕組みに作り替えました。以下PHPのプログラムの話です(MovableType4を前提として書いていますが同様のことはMovableType2/3でも可能です)。MovableTypeの改造に興味のある方はどうぞ。

このカスタマイズに際してはいじる場所が多いのですが、MovableTypeの設定自体はほとんど変更しないのでバージョンアップにも柔軟に対応できるのが強みです(すべてダッシュボードで変更できる範囲内)。またプラグインいらずであるため精神衛生上も安心です。

mt-search.cgiでの検索に自作プログラムをかませる

まず最初のステップは検索語を送信するフォームをmt-search.cgiから切り替えること。formのaction先をsearch.php(自作するプログラム)に書き換える、と書けば話が早いでしょうか。ここでこのsearch.phpの役目は大きく3つ。

search.phpの役目
  1. 検索語をMovableType4純正の検索エンジン(mt-search.cgi)に渡して結果を得る
  2. 得られた結果をPHP的な意味でserializeしキャッシュとして保存する
  3. もし生成から一定時間以内のキャッシュファイルが存在していればそれを次回以降表示する

つまりsearch.phpはキャッシュを作成・管理・表示させるためのゲートウェイプログラムとして使います。このPHPのプログラムを利用するメリットは検索結果がキャッシュされるためmt-search.cgiへのアクセスが減り検索ミスの心配が少なくなること。一度mt-search.cgiを経由して検索結果を取得すれば一定時間はその検索語に対して検索処理が行われません。MovableType風に言えば『検索結果のダイナミックパブリッシング』ですね。

また検索語や検索結果をPHPで自由にいじれるため、検索ランキングコーナーページ分割機能(Pager)を簡単に作ることが出来ます。いままでプラグインなどを要したものがPHPの外部ファイルをひとつ置くだけで解決してしまう、それがこのsearch.phpの最大の魅力かもしれません。冒頭の“検索結果の表示件数を調整した/表示形式をGoogleライクにした”というのもこの方法なればこそです。

システムテンプレートの書き換え

ここでいったんsearch.phpから離れて、システムテンプレートの『検索結果』をカスタマイズします。このテンプレートを以下のように書き換えます。

『検索結果』のカスタマイズ(実際に改行やタブは要りません)
<MTSearchResults> <$MTEntryID$><> <$MTEntryTitle encode_html="1"$><> <$MTEntryLink encode_html="1"$><> <$MTEntryBody encode_html="1" convert_breaks="0"$><> <$MTEntryDate format="%Y%m%d"$><> <$MTEntryKeywords encode_html="1"$><> <MTEntryTags glue="," replace='"',"""> <$MTTagLabel$> </MTEntryTags> <EOL> </MTSearchResults>

上記のようにwebアプリでよく用いられる"<>"セパレート形式で加工用データを吐き出すようにします。つまりhttp://(URL)/mt-search.cgi?IncludeBlogs=1&search=(URL変換した検索語)にfile_get_contentsをかければ上記のような書式の文字列がずらずらと取得できる寸法です。

閑話休題、URLにアクセスしてデータを得るくらいなら直にMovableTypeのデータベースにアクセスしてデータを引っ張ってきたほうが早いじゃないか……とは思いますが、今後のアップデートでデータベースの仕様が変わらないともいえませんし、データベースの種類に関わらず利用できる手法ということでこのような手法をとっています。URL取得できるということはAjax展開も出来ますしね(と同時にセキュリティ面を考慮してmt-search.cgiは保護/隠蔽するなどすべき)!

検索結果を取得、別個静的ファイルにキャッシュする

さて本論に戻りますが、取得してきたデータはimplodeで配列に分割し、そのデータを適宜加工した後serialize関数でファイルに保存できるように変換、キャッシュ用のディレクトリに保存します。このあたりの作業はシステムテンプレート側でも出来るので、そこはどちらでも。またここでxml形式で保存するようにすれば使い道がいろいろと増しますね。

ここまでの工程で検索結果のデータをPHPで加工しやすいかたちに整形してキャッシュすることが出来ました。あとはこれを表示するだけなのですが、うまくこなすためにはその解説に多くの文章が割かれそうなので以下次回に続きます。

余談。

MovableType4の最悪な点。一度タイムアウトでログアウトしてから(それに気づかず)記事を投稿すると、不明のエラーが起きて書いていた記事がすべて消えてしまう。ログアウトした時点でご自慢のオートセーブもストップしてしまうのでまったくアテにならない。なぜかウチの環境では15分おきにタイムアウトを起こしてしまうようなので実に良い死活問題。無線LANがブチブチ切れるからだとか、そういった理由なのかしら……。なんにせよ非常にやるせなくなります。

ちなみにOperaのもつ便利機能『戻るボタンを押してもフォームの中身を復帰するよ!』も、iframeの中のフォームまでは復帰不能。iframeをわざわざ好んで使うwebツールなど滅びてしまえ。

というわけでこの記事はパトスをたぎらせた1時間と涙にぬれた30分と涙をぬぐった30分をかけて半ばやっつけ気味に書かれました。そういう防衛線。

サイト内検索
検索する
このサイトについて
  • サイト名 : TRASH-NEWS
  • 分類 : ニュースとネタのサイト
  • ジャンル : 井戸端からアレゲまで
  • もっと詳しく見る
最近の記事
05月23日の記事
  1. ボタンひと押し即生成、『サークルカットジェネレータ』公開開始
04月01日の記事
  1. あの人気シリーズを作れる? 『テイルズオヴメーカー』本日公開
03月27日の記事
  1. 現在の4月のアレ進捗度30%!!
02月21日の記事
  1. 4月のアレで使う【中二なキャラクター】イラストをご提供ください
01月24日の記事
  1. サークル名ジェネレータを作ってみた
01月11日の記事
  1. 新作(※4月のアレではない)のスクリーンショット公開
01月01日の記事
  1. コミケ77(3日目)に行ってきた
12月31日の記事
  1. コミケ77、男は黙って8:00に出発
12月24日の記事
  1. FFXIIIの検索サイトを作ってみました
12月21日の記事
  1. FFXIIIの検索サイトを作ってみている
日刊人気記事ランキング
2010年11月21日のぶん
1
もうやめて下さい!! 泣いてる子もいるんですよ!!
38
2
マリオっぽい自作のゲーム改めしょぼんのアクション公開開始
28
3
FFT-A2のクリア後レビューと感想(ネタバレなし)
17
4
テイルズオブヴェスペリアの感想 【ストーリー・キャラクター編】
14
5
サークル名ジェネレータを作ってみた
12
6
Windows XP SP3インストールで不具合が起きることが発覚
11
7
ついうっかりマリオWiiとグレイセスとFFXIIIとDQVIを予約(以下略)
11
8
○○が可愛すぎて生きるのが辛い
10
9
“マリオっぽいもの”のステージを編集するエディタが公開
9
10
3Dの初音ミクを躍らせるフリーソフトMikuMikuDanceがスゴい
9

2010年11月22日 0時更新

人気記事ランキング

カテゴリ(折畳表示)
ニュース・ネタ
サブカテゴリを開く
俺研究舎
サブカテゴリを開く
お知らせ
サブカテゴリを開く
特集・企画
サブカテゴリを開く
管理人近況
サブカテゴリを開く
カスタムアーキテクチャ
1回めのようこそ!
ゲストさん
  • 文字の大きさ : 12px
  • フォント : MS Pゴシック
  • レイアウト : 3段組
  • カスタムする
カレンダー
2007年12月
«  11月 - 01月  »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
管理人について
管理人 : 八満かシアン
理系になり損ねた文系人間(シアンのほう)
今頃たぶん聴いている曲
our youthful days by MELL
月別アーカイブ
2008年
2007年
最近記事に掲載した画像
サークルカットジェネレータ、公開開始です!!
サークルカットジェネレータ、公開開始です!!
テイルズオヴメーカー偽記事の画像
テイルズオヴメーカー偽記事の画像
シガアレ作ってる、の図
シガアレ作ってる、の図
手描き初音ミク
手描き初音ミク
iPhoneっぽいUIを実際にiPhoneで表示してみて比較
iPhoneっぽいUIを実際にiPhoneで表示してみて比較
画像に関するリンク
ユーティリティ
RSSフィード
ソーシャルブックマーク
  • iGoogle
  • はてなアンテナにTRASH-NEWSを追加する TRASH-NEWSのはてなブックマーク数 この記事を含むはてなブックマーク
サイトプロフィール
Powered by
  • Movable Type 4.1 + [XHTML + CSS + JavaScript] + PHP
  • TRASH-NEWS / Hachiman_Cian 2007-
このページについて
題名
MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上
内容
  • 唐突ですがTRASH-NEWSの検索結果がすこし見やすくなりました。これまでは
TRASH-NEWS ロゴ
TRASH-NEWS ロゴ
TRASH-NEWS : http://www.trash-news.net/