俺の行動の半分は「勢い」で出来ています。と思います。そんな勢いを駆使して、今回も変なもん作ってみました。
先日のエントリーでJavaScript+DHTMLを使ったMT検索結果キーワードハイライト表示を紹介してみたんですが、これ、DHTML使ってるもんでMacじゃウマイこといかないんですな。(つか、元々動かないし。)
それに正規表現を利用した検索もせっかくできるのに、ハイライト箇所を探すのに単純文字列比較しかしてなかったもんだから、該当キーワードが見つけられないのでイマイチ面白みなかったっつーのもあって、「せっかくだからMTのプラグイン化でもしてみっか。」と作ってみました。
とりあえずダウンロードはこちら。
Search Keyword Highlight Plugin
(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設定で回避できそうですが別にコンテナタグに設定してても不自由無いのでこれで使ってみてください。)
お久しぶりでーす。
v.3.115(v.3.151?)での動作確認報告、ありがとうございます。
ってか、19740308TM、そんな最先端MTにバージョンアップされてたんですねえ。
2.6使ってる人、もうさすがに少なくなってきてるなあ。
v.3.151ですよ。失礼。
うちはHINAGATAさんを使ってるせいか、検索結果に本文概要が表示されないので、そこらへんも併せていじってみようと思うです。
2.6あたりは、スパムが酷くて止めちゃいました。
そうそう。デフォルトのテンプレートだと結果出力が概要のみになってるので、本文と続きも出力してあげるようにするといい感じですよ。
なかなか検索結果テンプレートっていじる機会無かったと思うのでこの機会にゼヒ。
俺もバージョン3にしてみようかなあ。
なんかプラグイン作るにもバージョン3用に作ったほうがいろいろできるみたいなんですよねえー。
(今回、プラグインについて調べてみてわかった説。)
検索結果ハイライトプラグインのご提供ありがとうございます。従来の検索結果で、googleのキャッシュ検索のようにハイライトできないかなと思っていたのでこれが実現できて嬉しいです。version3.11-jaで動作しました。
はじめまして、当サイトで貴サイトを紹介させてもらいました。
TBしたかったのですが、新規エントリーが最後まで保存再構築できず、コメントさせていただきました。
紹介内容に失礼がありましたら、コメントいただけると幸いです。
今後ともお世話になると思います。
よろしくお願い申し上げます。
ずいぶんご無沙汰しています。
3年ぶりくらいに私のサイトをリニューアルしました。
MT4.21jaでこのハイライトプラグインを試したところ使えました〜。
複数キーワードで検索できるようになっていろんな色が出てきて、グーグルっぽくなりました。
このプラグインは2008年9月現在健在でした。
報告まで〜。
貴重な情報をありがとうございます。
MT3.3でも利用可能とのことで試してみましたが、変化はありませんでした。当方はEUC-JPで
運用していることが関係あるのかもしれませんね?
Ajaxによる検索では「MT-I18N Plugin 0.02」
を使って一部のプロセスをUTF-8にしたりしていますが、
SEO上は、mt-search.cgiを使って静的な検索結果リストを生成した方がよい、という考え方も
ありますので、ぜひ、この方法を使えるようにしたいです。
EUC-JPの場合での対処等、教えて頂けると幸いです。
よろしくお願いします。
→#14757
検索ページ(search.cgi)の文字コード(charset)とMT(DB)で管理してる文字コードが異なっていると動かないかもしれませんね。
search.cgiのフォームから入力されたキーワードの文字コードを特に変換したりしてないのでここの文字コードの違いで日本語の検索は出来ないですね。
英語での検索、ハイライトはできるのにー、という感じならたぶんそうです。
突貫で出来る対応としてはsearch.cgiのフォームの文字コードをDBの文字コードに合わせてみたら動くかもしれません。
レスありがとうございます。search.cgiとは、mt-search.cgiのことですか?このソースは極めて何もないもので、charsetという記述はありません。
search.cgiはMT(3.3)のプログラムなのでしょうか?
→#14765
mt-search.cgiのことです。
このCGIのソースではなく、このCGIの出力する検索フォームのcharsetを変えてください。
たぶんシステムが用意したテンプレートが使われてると思うのでそのテンプレートのcharsetを変えちゃえばばできると思います。
ありがとうございます。あの後、別の方法でやってみました。
http://d.hatena.ne.jp/deeeki/20090319/jqueryhighlight
で紹介されている方法です。但し、この方法では、
・アルファベットの全角・半角が区別されてさしまう、
・複数の単語で検索した場合、(エントリーは
全てリストアップされるが)最初の単語のみハイライトされる、
という点で制約がありました。
やはり、オオカワ様の方法を試してみたく思います。
検索フォームのcharsetを変える、ということですね。やってみます。
ありがとうございました。
オオカワ様
確認です。検索フォームのcharsetを変える件ですが、当方はブログデータベースがEUC-JPです。
(xhtmlもEUC-JPで出力されます。)
この場合の検索フォームというのは、
・検索窓を置くブログの各種テンプレート上に置くフォーム
・検索結果を出力する「システムテンプレート」内のフォーム
の両方を指していますでしょうか?
・そして、charsetの指定は、
mt-search.cgi" Accept-charset="euc-jp">
でよろしいでしょうか?それともここを"utf-8"とするのでしょうか?
ナカムラです。エスケープされてしまったので、タグを「<」で書きます。
<form name="***" method="GET" action="<$MTCGIPath$>mt-search.cgi" Accept-charset="euc-jp">
ナカムラです。
昨晩、いったんhighlight.plを「利用しない」方にリセットしていたのですが、
本日再度トライすべくプラグインメニューを開いたのですが、highlight.plが表示されなくなっています。プラグインdirには存在しているのですが・・?一度削除して新たにFTPしてもプラグイン
に認識されないのですが、どれは何故で消化。
こんなことは初めてなのですが。
オオカワ様
トライしてみました。しかし、初回同様、変化が見られませんでした。
search_templates/default.tmpl
で、<MTIfStraightSearch></MTIfStraightSearch>
の中にある<form>要素において、
<form method="post" action="<$MTCGIPath$><$MTSearchScript$>" id="search-form" Accept-charset="euc-jp">
と変更してアップロードしました。
オオカワ様
いろいろありがとうございました。最後に勉強のため、ひとつ教えて下さい。
もともと、Search Keyword Highlight Plugin
は、utf-8で構築されたデータベースと、utf-8で入力された検索ワードを照合しているのでしょうか?
データベースと検索フォームの文字コードが一致してさえすれば、utfでもeudでもよいと思うので、先のご指摘で動作すると思ったのですが、utf-8にチューンしてプログラミングされている部分があるのでしょうか?
参考の為、教えていただければ幸いです。