俺の行動の半分は「勢い」で出来ています。と思います。そんな勢いを駆使して、今回も変なもん作ってみました。
先日のエントリーでJavaScript+DHTMLを使ったMT検索結果キーワードハイライト表示を紹介してみたんですが、これ、DHTML使ってるもんでMacじゃウマイこといかないんですな。(つか、元々動かないし。)
それに正規表現を利用した検索もせっかくできるのに、ハイライト箇所を探すのに単純文字列比較しかしてなかったもんだから、該当キーワードが見つけられないのでイマイチ面白みなかったっつーのもあって、「せっかくだからMTのプラグイン化でもしてみっか。」と作ってみました。
とりあえずダウンロードはこちら。
(Highlight.zip 1.54KB)
まず最初に注意。このプラグイン、Movable Type のバージョン2.661でしか動作確認してません。文字コードもUTF-8環境でのみ確認です。というか、ハンチングでしか確認してないので他で動くかわかりません。バージョン3以降に適用した場合にメニューに表示される概要説明とか実装してますが、カッコ付けたかっただけで動くか確認してません。ごまんなさい。
バージョン3以降で動かして動いたりなんかしたら、「動くっぽいよ。」とか教えてもらえればシアワセです。
Zipファイルを解凍してplファイルを取り出します。プラグインのインストールは他のMTプラグインと同じようにMT設置ディレクトリ直下のpluginsディレクトリにぶっこんでおいてもらえればOKです。で、それが完了したら、検索画面テンプレートにハイライトフィルタの設定を行います。検索画面テンプレートはMT設置ディレクトリ直下のsearch_templatesディレクトリ内にあるdefault.tmplってファイルです。
このファイルをエディタなどで開いて、<MTSearchResults>コンテナタグで囲まれた中にある<$MTEntryTitle$>や<$MTEntryExcerpt$>にhighlightフィルタを設定します。
例)
<$MTEntryTitle$> → <$MTEntryTitle highlight="2"$>
のような感じです。highlightフィルタを効果的に、というか、検索該当箇所がある本文を直接見えるようにしたほうがハイライトさせる意味もあると思いますので、<$MTEntryExcerpt$>でエントリー概要を表示する代わりに、<$MTEntryBody$>や<$MTEntryMore$>タグを使って本文そのものを表示させてみるのもいいかもしれません。(ってか、おすすめです。)
それと、highlightフィルタパラメータには2種類あります。
highlight="1"
1はタグ内容テキストに対してハイライト加工(ハイライトタグの追加)のみを行います。
highlight="2"
2はタグ内容テキストに元々含まれるHTMLタグを全て取り除いた上で、ハイライト加工を行います。MT標準で用意されているグローバルフィルタのremove_htmlをハイライト加工前に処理するのと同じです。(注意:highlightフィルタを利用した場合、指定タグ内で同時にremove_htmlを指定することは出来ません。remove_htmlを指定するとハイライト加工が消去されてしまいます。) とりあえずよくわかんない場合はこっちを指定しておいたほうがいいと思います。なんとなく。
上記のフィルタ設定をテンプレートに反映させたらプラグインの導入、用意が完了です。
早速検索ページから任意のキーワードで検索を試してみてくださいな。Googleキャッシュ気分満載。
(仕様制限)
・大小文字を区別した検索の場合、検索結果は指定を反映していますが、フィルタは区別無くハイライトしてしまいます。
・<MTComment>コンテナタグを利用してコメント本文にhighlightフィルタを適用する場合は、<$MTCommentBody$>タグにフィルタ設定するのではなく、<MTComment>コンテナタグのほうにhighlightフィルタを設定してください。ハイライト背景色スタイルが反映されない現象がおきます。
(sanitizesの許可タグ制限が影響してるようなのでmt.cfgのGlobalSanitizeSpec設定で回避できそうですが別にコンテナタグに設定してても不自由無いのでこれで使ってみてください。)
コメント (29)
[書く]コメント
[レス]
お久しぶりです。
オモロイなーと思ってver3.115に入れてみましたが、普通に動きました。
と、ご報告します。
ありがとう御座いますです。
トミナガ 2005/03/07 #4790
[レス]
お久しぶりでーす。
v.3.115(v.3.151?)での動作確認報告、ありがとうございます。
ってか、19740308TM、そんな最先端MTにバージョンアップされてたんですねえ。
2.6使ってる人、もうさすがに少なくなってきてるなあ。
オオカワ 2005/03/07 #4791
[レス]
v.3.151ですよ。失礼。
うちはHINAGATAさんを使ってるせいか、検索結果に本文概要が表示されないので、そこらへんも併せていじってみようと思うです。
2.6あたりは、スパムが酷くて止めちゃいました。
トミナガ 2005/03/07 #4793
[レス]
そうそう。デフォルトのテンプレートだと結果出力が概要のみになってるので、本文と続きも出力してあげるようにするといい感じですよ。
なかなか検索結果テンプレートっていじる機会無かったと思うのでこの機会にゼヒ。
俺もバージョン3にしてみようかなあ。
なんかプラグイン作るにもバージョン3用に作ったほうがいろいろできるみたいなんですよねえー。
(今回、プラグインについて調べてみてわかった説。)
オオカワ 2005/03/08 #4806
[レス]
検索結果ハイライトプラグインのご提供ありがとうございます。従来の検索結果で、googleのキャッシュ検索のようにハイライトできないかなと思っていたのでこれが実現できて嬉しいです。version3.11-jaで動作しました。
maoneko 2005/05/22 #5412
[レス]
動作確認報告ありがとうございます。
何気無い思いつきで作ったプラグイン、皆さんのお役に立ててよかったです。
検索語句が本文のドコにあるか分かると、やっぱ便利ですよねえ。
オオカワ 2005/05/22 #5413
[レス]
はじめまして、当サイトで貴サイトを紹介させてもらいました。
TBしたかったのですが、新規エントリーが最後まで保存再構築できず、コメントさせていただきました。
紹介内容に失礼がありましたら、コメントいただけると幸いです。
今後ともお世話になると思います。
よろしくお願い申し上げます。
m.sayama 2005/06/12 #5620
[レス]
どうも。
機会があればTBもゼヒ。
紹介していただきアリガトウございまーす。
サイト構築のお役に立ててよかったでーす。
こちらこそよろしくお願いします。
オオカワ 2005/06/13 #5627
[レス]
ハィライト使わせてもらいました。
3.2でもバッチリ機能してくれました!
本当ありがとうございましたー!
nao 2006/04/20 #8108
[レス]
おお、お役に立ててよかったでーす。
バリバリと検索に活用してくださーい。
オオカワ 2006/04/20 #8111
[レス]
3.31で正常に動作しました!
ありがたく使わせていただきますー
ryo 2006/08/21 #8785
[レス]
3.33でも動きました~。ъ(`ー゜)
使わせていただきます。
名無しがーるど 2006/12/21 #9373
[レス]
ずいぶんご無沙汰しています。
3年ぶりくらいに私のサイトをリニューアルしました。
MT4.21jaでこのハイライトプラグインを試したところ使えました?。
複数キーワードで検索できるようになっていろんな色が出てきて、グーグルっぽくなりました。
このプラグインは2008年9月現在健在でした。
報告まで?。
佐山 2008/09/15 #12437
[レス]
→#12437
動作報告ありがとうございます!!
まさかMT4でも使えていたとは!!
作った本人のMT環境がいまだに2.66なのがなんとも恥ずかしい限りですww
今後ともよろしくですー。
オオカワ 2008/09/15 #12438
[レス]
貴重な情報をありがとうございます。
MT3.3でも利用可能とのことで試してみましたが、変化はありませんでした。当方はEUC-JPで
運用していることが関係あるのかもしれませんね?
Ajaxによる検索では「MT-I18N Plugin 0.02」
を使って一部のプロセスをUTF-8にしたりしていますが、
SEO上は、mt-search.cgiを使って静的な検索結果リストを生成した方がよい、という考え方も
ありますので、ぜひ、この方法を使えるようにしたいです。
EUC-JPの場合での対処等、教えて頂けると幸いです。
よろしくお願いします。
ナカムラ 2009/12/18 #14757
[レス]
→#14757
検索ページ(search.cgi)の文字コード(charset)とMT(DB)で管理してる文字コードが異なっていると動かないかもしれませんね。
search.cgiのフォームから入力されたキーワードの文字コードを特に変換したりしてないのでここの文字コードの違いで日本語の検索は出来ないですね。
英語での検索、ハイライトはできるのにー、という感じならたぶんそうです。
突貫で出来る対応としてはsearch.cgiのフォームの文字コードをDBの文字コードに合わせてみたら動くかもしれません。
オオカワ 2009/12/18 #14763
[レス]
レスありがとうございます。search.cgiとは、mt-search.cgiのことですか?このソースは極めて何もないもので、charsetという記述はありません。
search.cgiはMT(3.3)のプログラムなのでしょうか?
ナカムラ 2009/12/19 #14765
[レス]
→#14765
mt-search.cgiのことです。
このCGIのソースではなく、このCGIの出力する検索フォームのcharsetを変えてください。
たぶんシステムが用意したテンプレートが使われてると思うのでそのテンプレートのcharsetを変えちゃえばばできると思います。
オオカワ 2009/12/20 #14767
[レス]
ありがとうございます。あの後、別の方法でやってみました。
http://d.hatena.ne.jp/deeeki/20090319/jqueryhighlight
で紹介されている方法です。但し、この方法では、
・アルファベットの全角・半角が区別されてさしまう、
・複数の単語で検索した場合、(エントリーは
全てリストアップされるが)最初の単語のみハイライトされる、
という点で制約がありました。
やはり、オオカワ様の方法を試してみたく思います。
検索フォームのcharsetを変える、ということですね。やってみます。
ありがとうございました。
ナカムラ 2009/12/21 #14768
[レス]
オオカワ様
確認です。検索フォームのcharsetを変える件ですが、当方はブログデータベースがEUC-JPです。
(xhtmlもEUC-JPで出力されます。)
この場合の検索フォームというのは、
・検索窓を置くブログの各種テンプレート上に置くフォーム
・検索結果を出力する「システムテンプレート」内のフォーム
の両方を指していますでしょうか?
・そして、charsetの指定は、
mt-search.cgi" Accept-charset="euc-jp">
でよろしいでしょうか?それともここを"utf-8"とするのでしょうか?
ナカムラ 2009/12/21 #14777
[レス]
ナカムラです。エスケープされてしまったので、タグを「<」で書きます。
<form name="***" method="GET" action="<$MTCGIPath$>mt-search.cgi" Accept-charset="euc-jp">
ナカムラ 2009/12/21 #14778
[レス]
→#14778
euc-jpで指定してみてください。
テンプレートとは、search_templates/default.tmplです。
オオカワ 2009/12/21 #14780
[レス]
ナカムラです。
昨晩、いったんhighlight.plを「利用しない」方にリセットしていたのですが、
本日再度トライすべくプラグインメニューを開いたのですが、highlight.plが表示されなくなっています。プラグインdirには存在しているのですが・・?一度削除して新たにFTPしてもプラグイン
に認識されないのですが、どれは何故で消化。
こんなことは初めてなのですが。
ナカムラ 2009/12/21 #14785
[レス]
大変失礼しました。highlight pluginという
名称かと勘違いしていました。
Search Keyword Highlight Plugin
ありました。これから再度挑戦します!
ナカムラ 2009/12/21 #14786
[レス]
オオカワ様
トライしてみました。しかし、初回同様、変化が見られませんでした。
search_templates/default.tmpl
で、<MTIfStraightSearch></MTIfStraightSearch>
の中にある<form>要素において、
<form method="post" action="<$MTCGIPath$><$MTSearchScript$>" id="search-form" Accept-charset="euc-jp">
と変更してアップロードしました。
ナカムラ 2009/12/21 #14787
[レス]
→#14787
では残念ですが対応するのは難しいようです。
力及ばずすみませんです。
オオカワ 2009/12/21 #14788
[レス]
オオカワ様
いろいろありがとうございました。最後に勉強のため、ひとつ教えて下さい。
もともと、Search Keyword Highlight Plugin
は、utf-8で構築されたデータベースと、utf-8で入力された検索ワードを照合しているのでしょうか?
データベースと検索フォームの文字コードが一致してさえすれば、utfでもeudでもよいと思うので、先のご指摘で動作すると思ったのですが、utf-8にチューンしてプログラミングされている部分があるのでしょうか?
参考の為、教えていただければ幸いです。
ナカムラ 2009/12/21 #14789
[レス]
→#14789
開発・デバッグは全てUTF-8の環境で行いました。
プログラム上では一切文字コードに関しての変換処理等は行ってません。
ので、インターフェース文字コードとDB文字コードが一致していれば問題無く動く感じです。
今回試してもらったのはこのインターフェース文字コードをDB文字コードに「合わせる」対応を試みましたがダメだったようですね。
試されてるサイトを見られないので詳細はわからないですがプラグイン内部でその文字コードを全てUTF-8するなどの吸収をすれば動くものは出来るかもしれませんね。
オオカワ 2009/12/22 #14790
[レス]
考え方を確認できました。詳細はわからなくても、基本がわかれば、もう少しスキルアップした時点で、
またトライしてみます。自分の設定のどこかに欠落があったのかもしれません。
いろいろありがとうございました。
ナカムラ 2009/12/22 #14797