MODxでCMSの恩恵を賜りつつ、validを保ち、かつWEB標準化を目指そう
Welcome !! Now 2010.09.04 02:18 (JST)
AjaxSearch は、FlexSearchFormにAJAX機能をくわえた、機能強化版です。
ドキュメントのタイトル、説明、内容、テンプレート変数から、検索します。また、ドキュメントのサブセットからも検索します。検索結果の中で、検索語をハイライト表示します。
configfileを使って、スニペットコールを簡潔に書けるようになっています。
参照ページ:AjaxSearch
[!AjaxSearch!]
カスタムconfigを指定します。デフォルト「default」。
以下の様に指定します。
$ajaxMax = "4";
パラメータの前は、「&」ではなく、「$」なので注意。また、値を囲むクォーテーションは、「``」ではなく、「''」または、「""」になります。
以下の様に指定した場合、コンフィグファイルによる上書きを避けることができます。
$__ajaxMax =
"4";
例えば、AjaxSearch コールが以下で、
[[AjaxSearch?
&AS_landing=`48`]
config ファイルの中で以下を指定した場合、
$__AS_landing
= "49";
ランディングのページは、ID48になります。スニペットコールに指定がなければ、ID49になります。
デバッグ情報の出力をコントロールします。デフォルト「0」
1,2,3は、ファイルモードで、ログはajaxSearch_log.txtに記録されます。
-1,-2,-3は、Firebug モードで、ログは、Firebugのコンソールに記録されます。
以下を指定できます
※Firebugモードの場合以下が必要です。
※Firebugモードは、php5で動作します。php4の環境の場合は、-1,-2,-3 を指定しても、1,2,3 にスゥィッチされるでしょう。
※セキュリティ上の理由で、データベーステーブル名は、短い名前に置き換えされるでしょう。
使用言語を指定します。デフォルト「管理画面の言語」。
ajaxSearch モードを利用するかどうかを指定します。デフォルト「1(利用する)」。以下を指定できます。
ajaxSearchモードを使うと、画面のリロードなしで、結果を表示できます。
高度な検索を指定できます。以下が指定可能です。デフォルト「oneword」
どこから、検索するかのラジオボタンを挿入します。可能な選択肢(の数)と、デフォルトでチェックの入るボタンを指定できます。デフォルト「5,1」=5つのボタンを表示、最初のボタンをデフォルトとしてチェックします。
定義は、configファイルで行います。「someConfigExamples/subSearch.config.php」を参照して下さい。また、チャンクは「someTemplatesExamples/subSearchLayout.tp.html」が参考になります。
どの(データベース?)テーブルから検索するのかを指定します。デフォルト「content,tv」。
その他の予約されたキーには以下があります。
これらは、デフォルトで、すべてのフィールドが検索の対象になっています。以下の様に書くことで、フィールドを限定することができます。
&whereSearch=`content:pagetitle,introtext,content|tv:tv_value|maxigallery:gal_title`
検索対象とするテンプレート変数指定します。テンプレート変数名をカンマで区切って複数指定可能です。デフォルトは、すべてのテンプレート変数が検索対象です。
検索結果の並び順を指定します。基準となるフィールド名を指定します。カンマで区切って複数指定可能です(マルチソート)。デフォルト「publishedon,pagetitle」。また、降順に並べたい場合以下の様に指定します。
&order=`longtitle
DESC,introtext`
デフォルトは、「ASC(昇順)」です。
検索結果の順位を指定します。フィールで名をカンマ(,)で区切って指定します。デフォルト「pagetitel:100,extract」。
このパラメータは、結果をソートするために使われる計算値です。検索結果は、ランク値によってソートされます。例えば、検索語を持ったページタイトルで、6つの検索語がドキュメントから見つかれば、このドキュメントのランクは、106になります(全然違うかも)。
もし、以下の様に指定した場合、
&rank=`pagetitle,extract`
orderの並び順に従うでしょう(ちがうかも)。
検索語の最大の数を指定します。デフォルト「5(単語)」。「1~10」の範囲で指定します。
正確な検索を行うための最小文字数を指定します。「2~100」の範囲で指定します。デフォルト「3文字」
「$advSearch = 'allwords', 'oneword'
or 'nowords'」 を指定している場合は、単語の長さを指定します。
「$advSearch = 'exactphrase'」を指定している場合は、スペースも含めた文字列の長さを指定します。
検索結果で検索フォームを表示するかどうかを指定します。デフォルト「1(する)」。「0」を指定すると、検索フォームを表しません。
non-ajax search モードのためのパラメータです。スニペットによる結果を表示素かどうかを指定します。デフォルト「0(しない)」。「1」を指定すると結果を表示します。
検索語をいくつ含んで文章を抜粋するかその最大値を指定します。デフォルト「1:content,description,introtext,tv_value」=検索語を一つ含んで抜粋。カンマで区切って検索対象に含めるフィールドを指定できます。
「0」を指定すると、文章を抜粋しません(タイトルのみの表示)。
抜粋の最初と最後に表示する「前略」「後略」を指定します。デフォルト「...」
抜粋の区切り(htmlタグ)を指定します。デフォルト「<br />」?
検索結果の中で、検索語の前後を含めて何文字抜粋するのかを指定します。「50文字(バイト)から800文字(バイト)の間」で指定します。
出力日付の書式を指定します。デフォルト「d/m/y : H:i:s」
phpのdate関数を参照して下さい。
「メニューに表示」にチェックが入っていない(メニューに非表示の)リソースをどう扱うかを指定します。以下が指定可能です。
デフォルトは「2」です。
「ウェブリンク」を検索対象に含めるかどうかを指定します。デフォルト「1(含めない)」。以下を指定できます。
検索対象とするリソース群の親リソースのIDを指定します。カンマ(,)で区切って複数指定可能です。デフォルト「すべての親リソース」。
検索対象とする階層の深さを指定します。デフォルト「10階層」。1以上の数を指定します。
検索多対象とするリソースIDを指定します。カンマ(,)で区切って複数指定可能です。
指定した条件に一致するドキュメントを表示しないようにする機能です。もっとも基本的な書式は以下のようになります。
field,criterion,mode
それぞれは、カンマ(,「local Filter Delimiter」)で区切ります(スペースを入れてはいけません)。
id,50,2複数のフィルタを指定する場合パイプ「|(global Filter Delimiter)」で区切ってフィルタを並べることができます。並べるフィルタの数に制限はありません。
それぞれのフィルタは「or」の関係を持ちます。
id,50,2|id,52,2ちょっと意味がわかりません。。デフォルト「defaultStripInput」
defaultStripInput function は、stripInput パラメータがないか、ファンクションが定義されていない場合に使われるでしょう。以下がデフォルトです(たぷん)。
function defaultStripInput($searchString, $pgCharset = 'UTF-8'){
if ($searchString !== ''){
// Remove escape characters
$searchString = stripslashes($searchString);
// Remove js tags
$searchString = stripJscripts($searchString);
// Remove modx sensitive tags
$searchString = stripTags($searchString);
// Strip HTML tags
$searchString = stripHtml($searchString);
// and finally prevent JS XSS
// The double_encode parameter was added with version 5.2.3
if (version_compare(PHP_VERSION, '5.2.3', '>='))
$searchString = htmlspecialchars($searchString, ENT_COMPAT, $pgCharset, False);
else
$searchString = $this->php_compat_htmlspecialchars($searchString, ENT_COMPAT, $pgCharset, False);
}
return $searchString;
}
同じくわかりません。デフォルト「defaultStripOutut」。
defaultStripInput function は、stripInput パラメータがないか、ファンクションが定義されていない場合に使われるでしょう。以下がデフォルトです(たぷん)。
function defaultStripOutput($text){ if ($text !== ''){ // replace line breaking tags with whitespace $text = stripLineBreaking($text); // strip modx sensitive tags $text = stripTags($text); // strip Jscripts $text = stripJscripts($text); // strip html tags. Tags should be correctly ended $text = stripHTML($text);}return $text;}
検索語リストを定義します。「&searchWordList=`myTermList`」とすることによって、あらかじめ検索語のリストを定義できるでしょう。
function myTermList(){
$list = "modx,blog,demo,design";
return $list;
}
検索語のリストを表示するためにテンプレートに下記をくわえてください。
<select name="search[]" id="ajaxSearch_select" size="3" multiple="multiple">
</select>
※templates/multipleInputList/layout.tpl.htm を参照して下さい。
※「&advSearch」と一緒に使うためのテンプレートは、「templates/optionMultipleList/layout.tpl.htm」になります。
<head>~</head>に以下を含むかどうかを指定します。デフォルト「0(含まない)」<script
type="text/javascript" src="assets/snippets/ajaxSearch/js/clearDefault.js"></script>
を
「1」をセットすると、テキストボックスをクリックしたとき、値をクリアし、かつ、何も入力せずに検索ボタンをクリックしたとき、デフォルトのテキストが再び入力されます。
「0」をセットすると、何も入力せずに検索ボタンをクリックしても、デフォルトのテキストは再び入力されません(ajaxSearch=`1`のとき。 ajaxSearch=`0`の時は、clearDefault=`0`でも、デフォルトのテキストが再び入力されます)。
値をクリアする機能を有効にするために、以下の様に、テキストボックスに「class "cleardefault"」を含めて下さい。
<input class="cleardefault" id="ajaxSearch_input"
type="text" name="search" value=""
/>
jsClearDefault「clearDefault.js 」のパスを指定します。
スニペット「breadcrumbs」のパラメータを利用して検索結果にパンくずリストを挿入します。「0」を指定すると利用不可能になります。
例えば、以下の様な使い方ができます。
&breadcrumbs=`Breadcrumbs,showHomeCrumb:0,showCrumbsAtHome:1`
breadcrumbs user function は、config ファイルの中で指定できるでしょう。?
// Breadcrumbs user function.
// string functionName(array $main, array $row, array $params)
// functionName : name of breadcrumbs function passed with &breadcrumbs parameter
// $main : array as main table definition
// $row : array as search result row
// $params : array as breadcrumbs parameters passed with &breadcrumbs parameter
// return the breadcrumbs link as a string
function myBreadcrumbs($main, $row, $params){
// use $main, $row and $params to set up your own custom breadcrumbs
return $breadcrumbs;
}
テンプレート変数のためのプレースホルダをセットします。「0」をセットすると、機能が利用不可能になります。デフォルト「0」。
&tvPhx=`tv:displayTV`
上記のようにし、かつ、プレースホルダをテンプレートにセットアップします。「displayTV」は、テンプレート変数を出力するための関数です(全然違うかも)。
tvPhxfは、自分でくわえたカスタムテーブルにも利用できます。
「mootool/jquery」ライブラリを<head>~</head>に挿入するかどうかを指定します。デフォルト「1(挿入する)」
どのスクリプトライブラリを挿入するかを指定します。以下を指定できます。
デフォルト「mootools」
「mootools」ライブラリーのパスを指定します。デフォルトは以下です。
manager/media/script/mootools/mootools.js
jquery「jquery」ライブラリーのパスを指定します。デフォルトは以下です。
AS_SPATH . 'js/jquery.js'
※AS_SPATHのデフォルト 「assets/snippets/ajaxSearch/」
もし、あなたの環境が、「php_mbstring」を呼べない環境なら、「0」にセットして下さい。デフォルト「1」。
ajaxSearche のログをコントロールします。
&asLog=`[ level [: comment [: purge]]]`
それぞれ以下を指定できます。
テーブルが自動的にパージされる前のログの数??
デフォルトは「200」です。
&asLog=`1:1:500`
失敗した検索リクエストが500;レコードまで ajaxSearch_log テーブルに記録されるでしょう(ちょっとアヤシイ)。
コメント用のテンプレートをチャンク名で指定します。デフォルトはファイルで、以下です。
.AS_SPATH.'templates/comment.tpl.html
※AS_SPATHのデフォルト 「assets/snippets/ajaxSearch/」
コメントフォームはhiddenフィールドを使うことによって、スパムから保護されます。このフィールドは、CSSによって隠されます。もし、そこに入力があった場合、コメントは送信されません。
hiddenフィールドは、実際のhiddenフィールドではありません。単に目に見えないだけです。それで、Googleによって、罰せられる心配はありません。テキストブラウザや音声ブラウザを使うユーザーは、このフィールドが見えるでしょう。そして、入力するかも知れません(入力しないように警告しているにもかかわらず)。入力があれば、コメントは送信されません。利用時には、十分注意して下さい。
フィールドを隠すためには、あなた自身のCSSファイルに以下をコピーして下さい。
.ajaxSearch_hiddenField {position:absolute; text-decoration:underline; background-color:#CC0000; left:0px; top:-500px; width:1px; height:1px;overflow:hidden;}
スパマーは、コメントの中にたくさんのリンクを書き送信するでしょう。
最大で、2つのリンクは許可されます。それ以上は、リジェクトされます。この値は、「classes/ajaxSearchLog.class.inc」の「CMT_MAX_LINKS」で変更できます。
コメントの最大の長さは、100バイト(2バイト文字だと63文字?)です。それ以上は、リジェクトされます。この値は、「classes/ajaxSearchLog.class.inc」の「CMT_MAX_LENGTH」で変更できます。
検索は、データベーステーブルの「プリフィックス_ajaxsearch_log」に記録されます。このデータは、エンドユーザのためのものではなく、管理者のためのものです。
ストアされた情報は、以下の様な意味を持ちます。
ajaxSearch モードの時のみ使われるパラメータです。
Ajax で表示したい検索結果の最大数。デフォルト「6(?)」
検索結果が「ajaxMax」を越えるとき、「すべての検索結果を見る」リンクを表示するかどうかを指定します。デフォルト「0(しない)」。以下を指定できます。
「する(1)」を定義した場合は、次項の「morResultsPage」も合わせて定義します。「morResultsPage」を定義しないと「すべての検索結果を見る」をクリックした時、無効なページをリクエストした事になり、結果 not found にリダイレクトされます
「すべての検索結果を見る」をクリックした時に表示されるドキュメントIDを指定します。このドキュメントには、結果を表示するためのスニペットコール「[[AjaxSearch? &ajaxSearch=`0`]]」を書きます。
ライブサーチ(送信ボタンがなく、入力欄に「&minChars」で指定した文字数以上を入力したとき、自動的に検索をはじめます)を行うかどうかを指定します。デフォルト「0(しない)」。以下を指定できます。
ajaxによる検索結果の表示(<div id="ajaxSearch_output")の透明度を指定します。「0(透明)~1(不透明)」の間で指定して下さい(?)。デフォルトは「1(不透明)」です。
mootools ライブラリを<head>~</head>に挿入するかどうかを指定します。デフォルト「1(する)」。以下を指定できます。
検索結果を表示したいリソースのIDを指定します。指定先のリソースにも、結果を表示するためのAjaxSearchコールを書きます。
[!AjaxSearch? &ajaxSearch=`0` &grabMax=`5`!]
1ページに何件の結果を表示するかを指定します。「grabMax」で指定した数以上の結果がある場合は、自動的にページナビゲーションが挿入されます。
ページナビゲーションの区切り文字を指定します。デフォルト「|」。どんな文字でも指定できます。
検索結果が1ページに収まる場合でも、常にページナビゲーションを表示するかどうかを指定します。デフォルト「0(しない)」。以下を指定できます。
テンプレートは、デフォルトでファイルとして提供されています。場所は以下です。
assets/snippets/ajaxSearch/templates/(フォルダ名)テンプレート名.tpl.htm
これを直接変更するか、またはチャンクを作ってそこにコピーし、変更を加えて下さい。
検索フォームのテンプレートです(入力ボックス、イントロメッセージ、検索結果)。
templates/layout.tpl.html
non-ajaxSearch モードの時の出力結果用(大外)のテンプレートです(検索結果の数、結果リスト、ページナビゲーション)。
templates/results.tpl.html
non-ajaxSearch モードの時の出力結果用(インナー:[+as.listResults+])のテンプレートです(タイトルリンク、説明、抜粋、パンくず)。
templates/result.tpl.html
non-ajaxSearch モードの時のページナビゲーション用のテンプレートです(ページ、現在のページ)。
templates/paging.tpl.html
non-ajaxSearch モードの時のコメント用のテンプレートです。
templates/comment.tpl.html
ajaxSearch モードの時の出力結果用(大外)のテンプレートです(検索結果の数、結果リスト、「すべてを見る」リンク)。
templates/ajaxResults.tpl.html
ajaxSearch モードの時の出力結果用(インナー:[+as.listResults+])のテンプレートです(タイトルリンク、説明、抜粋、パンくず)。
templates/ajaxResult.tpl.html
それぞれのテンプレートまたは、添付のreadmeを参照して下さい。
検索結果から、リンクをクリックして、ページにジャンプすると、<body>によけいな「>」がついています(<body>>)。このため、ハイライトするはずの文字が、ハイライトしません。このバグを修正するために、以下を行います。
$output = implode("<body>", $body);$output = implode("<body", $body);