Welcome !! Now 2010.09.04 02:18 (JST)

AjaxSearch 1.8.3a-final

AjaxSearch は、FlexSearchFormにAJAX機能をくわえた、機能強化版です。

ドキュメントのタイトル、説明、内容、テンプレート変数から、検索します。また、ドキュメントのサブセットからも検索します。検索結果の中で、検索語をハイライト表示します。

configfileを使って、スニペットコールを簡潔に書けるようになっています。

参照ページ:AjaxSearch

テスト環境

  • サーバ:DreamHost  
    • PHP 5.2.6
    • MYSQL 5.0.32
  • MODx: 1.0.0
  • AjaxSearch 1.8.3a-final

ふたつのモード

ajaxSearch モード

  • 検索結果は、AJAXを通して、現在のページに表示されます。
  • ライブ検索を含む、複数の検索オプションと、non-AJAX オプション
  • 検索結果がもっとある場合は、「すべての結果を見る」リンクを利用できます(意味あってる?)。
  • 検索結果に何件表示するか指定できます。
  • ajax機能と視覚効果のためにMooToolsを使います(?)。

non-ajaxSearch モード

  • 検索結果は別のページに表示されます。
  • 検索結果のページングをカスタマイズできます。
  • JavaScritpがなくても、FlexSearchForm として動作します
  • 必要とされるFlexSearchFormのコードのみ読み込まれるよう設計されています?

基本的な書式

[!AjaxSearch!]

バラメータ

config

カスタムconfigを指定します。デフォルト「default」。

カスタムconfigを使う

  • ファイル名 ... 任意の名前.config.php
  • 格納場所 ... configs フォルダ
  • 「&config=`任意の名前`」の様に指定します(config.php の前がパラメータの値になります。)。
  • スニペットコールで指定したパラメータより、コンフィグファイルで指定したパラメータが優先されます(たぶん)。

config ファイルの中での指定

以下の様に指定します。

$ajaxMax = "4";

パラメータの前は、「&」ではなく、「$」なので注意。また、値を囲むクォーテーションは、「``」ではなく、「''」または、「""」になります。

config ファイルの中での指定2

以下の様に指定した場合、コンフィグファイルによる上書きを避けることができます。

$__ajaxMax = "4";

例えば、AjaxSearch コールが以下で、

[[AjaxSearch? &AS_landing=`48`]

config ファイルの中で以下を指定した場合、

$__AS_landing = "49";

ランディングのページは、ID48になります。スニペットコールに指定がなければ、ID49になります。

debug

デバッグ情報の出力をコントロールします。デフォルト「0」

1,2,3は、ファイルモードで、ログはajaxSearch_log.txtに記録されます。

-1,-2,-3は、Firebug モードで、ログは、Firebugのコンソールに記録されます。

以下を指定できます

  • 0 ... デバッグは働きません
  • 1 ... パラメータ、検索、コンテキスト、sqlクエリが記録されます。
  • 2 ... パラメータ、検索、コンテキスト、sqlクエリ、テンプレートが記録されます。
  • 3 ... パラメータ、検索、コンテキスト、sqlクエリ、テンプレート、結果が記録されます。
  • -1 ... パラメータ、検索、コンテキスト、sqlクエリが記録されます。
  • -2 ... パラメータ、検索、コンテキスト、sqlクエリ、テンプレートが記録されます。
  • -3 ... パラメータ、検索、コンテキスト、sqlクエリ、テンプレート、結果が記録されます。

※Firebugモードの場合以下が必要です。

※Firebugモードは、php5で動作します。php4の環境の場合は、-1,-2,-3 を指定しても、1,2,3 にスゥィッチされるでしょう。

※セキュリティ上の理由で、データベーステーブル名は、短い名前に置き換えされるでしょう。

language

使用言語を指定します。デフォルト「管理画面の言語」。

ajaxSearch

ajaxSearch モードを利用するかどうかを指定します。デフォルト「1(利用する)」。以下を指定できます。

  • 0 ... 利用しない
  • 1 ... 利用する

ajaxSearchモードを使うと、画面のリロードなしで、結果を表示できます。

Advanced

高度な検索を指定できます。以下が指定可能です。デフォルト「oneword」

  • exactphrase ... 検索語と完全一致刷るドキュメントを結果として表示
  • allwords ... すべての検索語を含むドキュメントを結果として表示
  • nowords ... 検索語を含まないドキュメントを結果として表示
  • oneword ... 少なくともひとつの検索語を含むドキュメントを結果として表示

subSearch

どこから、検索するかのラジオボタンを挿入します。可能な選択肢(の数)と、デフォルトでチェックの入るボタンを指定できます。デフォルト「5,1」=5つのボタンを表示、最初のボタンをデフォルトとしてチェックします。

定義は、configファイルで行います。「someConfigExamples/subSearch.config.php」を参照して下さい。また、チャンクは「someTemplatesExamples/subSearchLayout.tp.html」が参考になります。

whereSearch

どの(データベース?)テーブルから検索するのかを指定します。デフォルト「content,tv」。

その他の予約されたキーには以下があります。

  • jot
  • maxigallery

これらは、デフォルトで、すべてのフィールドが検索の対象になっています。以下の様に書くことで、フィールドを限定することができます。

&whereSearch=`content:pagetitle,introtext,content|tv:tv_value|maxigallery:gal_title`

withTvs

検索対象とするテンプレート変数指定します。テンプレート変数名をカンマで区切って複数指定可能です。デフォルトは、すべてのテンプレート変数が検索対象です。

order

検索結果の並び順を指定します。基準となるフィールド名を指定します。カンマで区切って複数指定可能です(マルチソート)。デフォルト「publishedon,pagetitle」。また、降順に並べたい場合以下の様に指定します。

&order=`longtitle DESC,introtext`

デフォルトは、「ASC(昇順)」です。

rank

検索結果の順位を指定します。フィールで名をカンマ(,)で区切って指定します。デフォルト「pagetitel:100,extract」。

このパラメータは、結果をソートするために使われる計算値です。検索結果は、ランク値によってソートされます。例えば、検索語を持ったページタイトルで、6つの検索語がドキュメントから見つかれば、このドキュメントのランクは、106になります(全然違うかも)。

もし、以下の様に指定した場合、

&rank=`pagetitle,extract`

orderの並び順に従うでしょう(ちがうかも)。

maxWords

検索語の最大の数を指定します。デフォルト「5(単語)」。「1~10」の範囲で指定します。

minChars

正確な検索を行うための最小文字数を指定します。「2~100」の範囲で指定します。デフォルト「3文字」

「$advSearch = 'allwords', 'oneword' or 'nowords'」 を指定している場合は、単語の長さを指定します。

「$advSearch = 'exactphrase'」を指定している場合は、スペースも含めた文字列の長さを指定します。

AS_showForm

検索結果で検索フォームを表示するかどうかを指定します。デフォルト「1(する)」。「0」を指定すると、検索フォームを表しません。

AS_showResults

non-ajax search モードのためのパラメータです。スニペットによる結果を表示素かどうかを指定します。デフォルト「0(しない)」。「1」を指定すると結果を表示します。

extract

検索語をいくつ含んで文章を抜粋するかその最大値を指定します。デフォルト「1:content,description,introtext,tv_value」=検索語を一つ含んで抜粋。カンマで区切って検索対象に含めるフィールドを指定できます。

「0」を指定すると、文章を抜粋しません(タイトルのみの表示)。

検索可能なフィールド(名)

  • content ... pagetitle, longtitle, description, alias, introtext, menutitle, content
  • tv ... tv_value
  • jot ... jot_content
  • maxigallery ... gal_title, gal_descr

extractEllips

抜粋の最初と最後に表示する「前略」「後略」を指定します。デフォルト「...」

extractSeparator

抜粋の区切り(htmlタグ)を指定します。デフォルト「<br />」?

extractLength

検索結果の中で、検索語の前後を含めて何文字抜粋するのかを指定します。「50文字(バイト)から800文字(バイト)の間」で指定します。

formatDate

出力日付の書式を指定します。デフォルト「d/m/y : H:i:s」

phpのdate関数を参照して下さい。

hideMenu

「メニューに表示」にチェックが入っていない(メニューに非表示の)リソースをどう扱うかを指定します。以下が指定可能です。

  • 0 ... 「メニューに表示」のリソースのみ検索対象にします。
  • 1 ... 「メニューに非表示」のリソースのみ検索の対象にします。
  • 2 ... 「メニューに非表示」「メニューに表示」のリソースとも検索対象にします。

デフォルトは「2」です。

hideLink

「ウェブリンク」を検索対象に含めるかどうかを指定します。デフォルト「1(含めない)」。以下を指定できます。

  • 0 ... リソース及びウェブリンクが検索の対象になります。
  • 1 ... リソースのみが検索の対象になります。

parents

検索対象とするリソース群の親リソースのIDを指定します。カンマ(,)で区切って複数指定可能です。デフォルト「すべての親リソース」。

depth

検索対象とする階層の深さを指定します。デフォルト「10階層」。1以上の数を指定します。

documents

検索多対象とするリソースIDを指定します。カンマ(,)で区切って複数指定可能です。

filter

指定した条件に一致するドキュメントを表示しないようにする機能です。もっとも基本的な書式は以下のようになります。

field,criterion,mode

それぞれは、カンマ(,「local Filter Delimiter」)で区切ります(スペースを入れてはいけません)。

  • field … MODx のフィールド名またはテンプレート変数を指定します
  • criterion … フィールドのデータタイプ(number, string, date など)と同じ値を指定します
  • mode … 1から8までの意味のある数字を指定します。それぞれ以下の意味を持ちます
    1.  != … 等しくない
    2. == … 等しい
    3. < … より小さい
    4. > … より大きい
    5. <= … 以下
    6. >= … 以上
    7. フィールドの値と同じテキストではない
    8. フィールドの値と同じテキスト
インスタンス
id,50,2
ドキュメントidが50のドキュメントを排除します。

複数のフィルタを指定する

複数のフィルタを指定する場合パイプ「|(global Filter Delimiter)」で区切ってフィルタを並べることができます。並べるフィルタの数に制限はありません。

それぞれのフィルタは「or」の関係を持ちます。

インスタンス
id,50,2|id,52,2
ドキュメントid が50,またはドキュメントid が52のドキュメントを排除します。

stripInput user function

ちょっと意味がわかりません。。デフォルト「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;
}

stripOutput user function

同じくわかりません。デフォルト「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 user function

検索語リストを定義します。「&searchWordList=`myTermList`」とすることによって、あらかじめ検索語のリストを定義できるでしょう。

「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」になります。

clearDefault

<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

スニペット「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;
}

tvPhx

テンプレート変数のためのプレースホルダをセットします。「0」をセットすると、機能が利用不可能になります。デフォルト「0」。

&tvPhx=`tv:displayTV`

上記のようにし、かつ、プレースホルダをテンプレートにセットアップします。「displayTV」は、テンプレート変数を出力するための関数です(全然違うかも)。

tvPhxfは、自分でくわえたカスタムテーブルにも利用できます。

addJscript

「mootool/jquery」ライブラリを<head>~</head>に挿入するかどうかを指定します。デフォルト「1(挿入する)」

jScript

どのスクリプトライブラリを挿入するかを指定します。以下を指定できます。

  • jquery
  • mootools1.2
  • mootools

デフォルト「mootools」

jsMooTools

「mootools」ライブラリーのパスを指定します。デフォルトは以下です。

manager/media/script/mootools/mootools.js

jquery

「jquery」ライブラリーのパスを指定します。デフォルトは以下です。

AS_SPATH . 'js/jquery.js'

※AS_SPATHのデフォルト 「assets/snippets/ajaxSearch/」

mbstring

もし、あなたの環境が、「php_mbstring」を呼べない環境なら、「0」にセットして下さい。デフォルト「1」。

asLog

ajaxSearche のログをコントロールします。

書式

&asLog=`[ level [: comment [: purge]]]`

それぞれ以下を指定できます。

level

  • 0 ... ログを取りません(デフォルト)
  • 1 ... 失敗した検索リクエストをログにします
  • 2 ... すべてのリクエストをログにします

comment

  • 0 ... ユーザーコメントを許可しません(デフォルト)
  • 1 ... ユーザーコメントを許可します
    • 検索結果に、スパムチェックのためのinput テキストと、「捜し物は見つかりましたか?」という項目でテキストエリアが挿入されます。

purge

テーブルが自動的にパージされる前のログの数??

  • 0 ... パージを許可しません(制限されたログの数)

デフォルトは「200」です。

&asLog=`1:1:500`

失敗した検索リクエストが500;レコードまで ajaxSearch_log テーブルに記録されるでしょう(ちょっとアヤシイ)。

tplComment

コメント用のテンプレートをチャンク名で指定します。デフォルトはファイルで、以下です。

.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」に記録されます。このデータは、エンドユーザのためのものではなく、管理者のためのものです。

ストアされた情報は、以下の様な意味を持ちます。

  •  id ...  検索リクエストID
  •  searchstring ... 検索語
  •  nb_results ... 検索結果の数
  •  results ...リソースID
  •  comment ... 検索結果に関するユーザによるコメント
  •  as_call ... 使われたajaxSearch スニペットコール
  •  as_select ...使われたセレクトステートメント(phpmyadmin を通して再利用できます)
  • vdate ... 検索リクエストの日時
  •  ip ... ユーザの IP アドレス

パラメータ:ajaxSearch mode

ajaxSearch モードの時のみ使われるパラメータです。

ajaxMax

Ajax で表示したい検索結果の最大数。デフォルト「6(?)」

showMoreResults

検索結果が「ajaxMax」を越えるとき、「すべての検索結果を見る」リンクを表示するかどうかを指定します。デフォルト「0(しない)」。以下を指定できます。

  • 0 ... 表示しない
  • 1 ... 表示する

「する(1)」を定義した場合は、次項の「morResultsPage」も合わせて定義します。「morResultsPage」を定義しないと「すべての検索結果を見る」をクリックした時、無効なページをリクエストした事になり、結果 not found にリダイレクトされます

moreResultsPage

「すべての検索結果を見る」をクリックした時に表示されるドキュメントIDを指定します。このドキュメントには、結果を表示するためのスニペットコール「[[AjaxSearch? &ajaxSearch=`0`]]」を書きます。

liveSearch

ライブサーチ(送信ボタンがなく、入力欄に「&minChars」で指定した文字数以上を入力したとき、自動的に検索をはじめます)を行うかどうかを指定します。デフォルト「0(しない)」。以下を指定できます。

  • 0 ... ライブサーチしない
  • 1 ... ライブサーチする

opacity

ajaxによる検索結果の表示(<div id="ajaxSearch_output")の透明度を指定します。「0(透明)~1(不透明)」の間で指定して下さい(?)。デフォルトは「1(不透明)」です。

addJscript

mootools ライブラリを<head>~</head>に挿入するかどうかを指定します。デフォルト「1(する)」。以下を指定できます。

  • 0 ... 挿入しない
  • 1 ... 挿入する
 

パラメータ:non-ajaxSearch モード

AS_landing

検索結果を表示したいリソースのIDを指定します。指定先のリソースにも、結果を表示するためのAjaxSearchコールを書きます。

[!AjaxSearch? &ajaxSearch=`0` &grabMax=`5`!]

grabMax

1ページに何件の結果を表示するかを指定します。「grabMax」で指定した数以上の結果がある場合は、自動的にページナビゲーションが挿入されます。

pageLinkSeparator

ページナビゲーションの区切り文字を指定します。デフォルト「|」。どんな文字でも指定できます。

showPagingAlways

検索結果が1ページに収まる場合でも、常にページナビゲーションを表示するかどうかを指定します。デフォルト「0(しない)」。以下を指定できます。

  • 0 ... 表示しない
  • 1 ... 常に表示する

CSS

検索フォーム及び、ajax検索結果(大外)

  •  #ajaxSearch_form ... 検索フォーム
    #ajaxSearch_input ... テキストボックス
  • #ajaxSearch_submit ... 送信ボタン
  • #ajaxSearch_output ... 検索結果ボックス

non-ajaxsearch モードの時、あるいは、「すべてを見る」リンクをクリックしたとき

  • #ajaxSearch_resultListContainer ... ??
  • .ajaxSearch_paging ... ページナビゲーション
  • .ajaxSearch_currentPage ... ページナビゲーション中のカレントページ
  • .ajaxSearch_pagination ... ??
  • .ajaxSearch_result ... 個々の検索結果
  • .ajaxSearch_resultLink ... 個々の検索結果のリンク
  • .ajaxSearch_resultDescription ... 個々の検索結果の説明
  • .ajaxSearch_extract ... 個々の検索結果の抜粋
  • .ajaxSearch_highlight1,2,3 ... ハイライト(枝番をつけることで複数の検索語があったとき、色を変えたりできます)
  • .ajaxSearch_resultsIntroFailure ... 検索結果が何もないとき
  • .ajaxSearch_resultsInfo  ... 「~件見つかりました」

ajax リクエストをしたとき

  • .AS_ajax_result ... 個々の検索結果
  • .AS_ajax_resultLink ... 個々の検索結果のリンク
  • .AS_ajax_resultDescription ... 個々の検索結果の説明
  • .AS_ajax_extract ... 個々の検索結果の抜粋
  • .AS_ajax_hightlight1,2,3 ... ハイライト(枝番をつけることで複数の検索語があったとき、色を変えたりできます)
  • .AS_ajax_more ... 「すべての結果を見る」リンク
  • .AS_ajax_resultsIntroFailure ... 検索結果が何もないとき

テンプレート

テンプレートは、デフォルトでファイルとして提供されています。場所は以下です。

assets/snippets/ajaxSearch/templates/(フォルダ名)テンプレート名.tpl.htm

これを直接変更するか、またはチャンクを作ってそこにコピーし、変更を加えて下さい。

tplLayout

検索フォームのテンプレートです(入力ボックス、イントロメッセージ、検索結果)。

templates/layout.tpl.html

tplResults

non-ajaxSearch モードの時の出力結果用(大外)のテンプレートです(検索結果の数、結果リスト、ページナビゲーション)。

templates/results.tpl.html

tplResult

non-ajaxSearch モードの時の出力結果用(インナー:[+as.listResults+])のテンプレートです(タイトルリンク、説明、抜粋、パンくず)。

templates/result.tpl.html

tplPaging

non-ajaxSearch モードの時のページナビゲーション用のテンプレートです(ページ、現在のページ)。

templates/paging.tpl.html

tplComment

non-ajaxSearch モードの時のコメント用のテンプレートです。

templates/comment.tpl.html

tplAjaxResults

ajaxSearch モードの時の出力結果用(大外)のテンプレートです(検索結果の数、結果リスト、「すべてを見る」リンク)。

templates/ajaxResults.tpl.html

tplAjaxResult

ajaxSearch モードの時の出力結果用(インナー:[+as.listResults+])のテンプレートです(タイトルリンク、説明、抜粋、パンくず)。

templates/ajaxResult.tpl.html

プレースホルダ

それぞれのテンプレートまたは、添付のreadmeを参照して下さい。

バグ

検索結果から、リンクをクリックして、ページにジャンプすると、<body>によけいな「>」がついています(<body>>)。このため、ハイライトするはずの文字が、ハイライトしません。このバグを修正するために、以下を行います。

  1. プラグイン「Search Highlighting」の以下の部分を修正します。$output = implode("<body>", $body);
    ↓ $output = implode("<body", $body);

参照ページ:Re: Search Highlighting in EVO 1.0 - <body>>

△ページトップ