ajax_json_seach スクリプトにDid you meanのようなもの

この記事は、公開日時より1年以上経過しています。最新の情報のご確認をお願いします。
誰が使うのか?みたいなものです。検索結果が0件だったとき、近そうなキーワードを提示するというもの。

var didumean;
/* はじめに先頭の箇所に宣言しておきます */

// Add by Digiclo
function build_no_result_html( result_data, keywords ) {
var html =
____ 略 ____
;
html += '<p style="color:red"><em>もしかして:' + didumean + '</em></p>';
html += '</ol></div></div>

return html;
}

/*
Digiclo氏のAdd function 内に上記を追加します。
*/


// ADD Did you mean by maRk
function did_u_mean() {
var suggestion={ "てすt":"てすと","てst":"てすと", "tes":"test" };
if (search_keyword in suggestion){
didumean = suggestion[search_keyword];
// alert(didumean);
return didumean;
}
}

/* この関数は全体の最後にでも追加しておきます。*/

【追記:関数の追加箇所】

if ( result_data.length == 0 ) {
did_u_mean();
result_html = build_no_result_html( result_data, keywords ); // Pached by Digiclo


あとおせっかいで怒られそうですが、build_no_result_html()のol内にliが入らずにpとかがはいるのは文法違反かとおもうのでol要素は削除するなど。

*下書きなので解説無しで体裁がイマイチですが気分がよければ書き直してアップします

blog_ajax_json_search.jsファイルへの制限memo

この記事は、公開日時より1年以上経過しています。最新の情報のご確認をお願いします。

記事検索に便利なblog_ajax_search_json_search.jsなのですが、なんでかしらんけどウチとこのjsファイルがよそ様で稼動していたっぽいです。。

Compressorかけたから解読しにくいし、めんどくてそのままウチのほうからロードしてるのかもしれない。
もともと配布されているものなので、作者様か二次配布されているところから(CC2.1のようです)もってくればいいとは思うんですけどね。
その辺はまあいいんだけども。
あまりこのようなのがヒンパンにおこなわれるのもなんですんで、使用するサイトの制限をかけるようにしてみました。
jsファイルに対しサーヴァ側でリファラが自分とこ以外なら蹴るという対策もあるわけですが、ロケーションが自分とこのページでないときには関数の実行をおこなわないように改造すれば動かなくてあきらめるでないかなーという考え。

MT向けのに限っていえば(もともとはココログ向けだったり) blogAjaxJsonSearch()関数が検索メインの関数となってます。
で、この関数の実行は、Ajax.Request()の実行により検索データから検索をおこなうしくみなのでAjax.Request()が実行される前に条件式をおいておけばいいことになります。
blogAjaxJsonSearch()のはじめのほうにこれをいれておく(localhostのとこは実際は自分のところのURL)。変数は任意なんですけど今使ってるのははminimumなのでa , bとか短い変数になってる。

  • var my_site = 'http://localhost/';
  • var gt_loc=document.location.href;

つぎに変数に値を渡すとこsearch_keyword = text;の前に条件式をおく。条件が真のときのerr()関数はあとで作っておく。

  •    if (gt_loc.indexOf(my_site)!=0){ err(); }  else {

――でblogAjaxJsonSearch()関数の最後に

  • }

を追記(しとかないとスクリプトがエラーに)。
err()関数は、全体の最後にでも適当につくっておく。

function err(){
   alert('error!!');
   result_content.innerHTML="Sorry, Cannot search at This Page.";
   return undefined;
}

以上カスタマイズメモでした。 オリジナルと作者様のページは以下です。
ココログプロとかTypepadとかMTとかブログ人とかその他のブログサービスとかでもAjaxでバックナンバーを検索するJavaScript: 暴想:

情報の整理

この記事は、公開日時より1年以上経過しています。最新の情報のご確認をお願いします。

Movable TypeのAjax検索に関してぐぐってみると、単にAjax検索といっても、いくつかの種類にわかれていることに気づく。
従って自分が求めている情報に最短でたどりつくにはある程度予備の知識があったほうがいいようにおもう。
MTにおける、Ajaxな検索については大きく分けると、以下の3つと思われる

  1. Google AJAX APIを利用した検索窓を設置
  2. JSON形式のファイルをAJAXな通信で読み込、高速な検索を実現するもの
  3. Movable Type 4,2より検索結果テンプレートにAJAXな検索が採用されたという内容

1.については、http://code.google.com/intl/ja/apis/ajaxsearch/web.htmlにあるように、Google AJAX Search APIを利用してサイト内にウェブ検索を導入するもの。

2.は、暴想のなおゆきさん提供のAjax検索用のJavaScriptで全文検索をおこなうというもの。dakinyさんよりMovable Type向けのコードが配布されている。(今日のMovable Type:Ajaxを利用したMT用超高速検索システムはスゴすぎる!

3.はMovable Typeがもつ機能についての内容。解説は小粋空間のyujiroさんが記事にあげており、Movable Type 5用のドキュメントも存在する。

blog_ajax_json_search.jsとかで。。

この記事は、公開日時より1年以上経過しています。最新の情報のご確認をお願いします。

密かに(謎)MT用のAjax高速検索システムを導入とかやっていました。そのなかで一寸きづいたことをメモ程度に。
参考にしているのは、以下

で、検索用のページをこさえて、WolaWolaさまのように別ページに移動するようにしてみたわけです。その辺はあとでもう少し丁寧に書くのでよいとして、

今回気になったのが、blog_ajax_json_search.jsにおいて、

  •  search_data.txt

がブラウザから読み込めない場合があるってことです。
そのファイル(search_data.txt)だけ表示させようとすると、

Firefoxで「内容符号化 (Contnet-Encoding) に問題があります」となってしまった。

この対応は、キャッシュとか履歴を消すことで解消されたのですが(参考)、、
blog_ajax_json_search.jsがsearch_data.txtが読み込まれることを前提としているみたいでして、データの要素が見つからなかった場合のパッチを当てないといけないようなかんじ。その前にtxtファイルがそのようになる原因を突き止めないとアレですが。

あと、元のページに戻るためのリンク「Go Back Page」はlocation.reload(true)なので、たぶん別ページ移動の場合はhistory.back(); return false; あたりかと。

それと、結果のページのリンクに #search_word=' + search_keyword … とあるのが何をするためのものかよくわからかったなあ。 #自分はパラメタにしておいたけど。