*** これはもう保守されていません *** このプロジェクトは数年前に開始しましたが、これまでに多くのことが変更されました。また、異なるレイヤー間の結合や古いテクノロジー (jQuery!) のため、これはスケーラブルなプロジェクトではありません。すべてのサポートに感謝しますが、残念ながらこのプロジェクトはアーカイブしなければなりません:(
AJAX Live Search は、Google オートコンプリート機能と同様に、入力時に検索して結果を表示する jQuery プラグイン/PHP 検索フォームです。
実際に動作を確認してください。
IE8+ ✔ | クロム ✔ | Firefox ✔ | オペラ ✔ | サファリ ✔ |
このプロジェクトをサポートしてくださった BrowserStack と JetBrains に感謝します。
ダミーのデータベースとテーブルの作成を含め、 index.php
の現在の例が動作するまでに 7 分以上かかることはありません。ただし、既存のプロジェクトに統合する必要がある場合はさらに時間がかかります。このテキストフィールドがあると仮定して、これを実現するには:
<input type="text" class='mySearch' id="ls_query" placeholder="Type to start searching ...">
core
、 css
、 font
、 img
、 js
およびtemplates
を含むフォルダーをプロジェクトにコピーします。
core/Config.template.php
で必要な構成、特にデータベース構成を指定し、ファイルの名前をConfig.php
に変更します。このファイルには、PHP 構成の表で説明したプラグインのすべてのバックエンド設定が含まれています。
ページにjs/ajaxlivesearch.min.js
またはjs/ajaxlivesearch.js
とcss/ajaxlivesearch.min.css
またはcss/ajaxlivesearch.css
を含めます。
core/AjaxProcessor.php
のAccess-Control-Allow-Origin header
の URL をプロジェクト URL に変更します。現在はhttps://ajaxlivesearch.com
です。
core/Handler.php
とcore/Config.php
が (PHP) ページに含まれており、ファイルの先頭に次の行があることを確認してください ( index.php
を確認してください)。
use AjaxLiveSearchcoreConfig;
use AjaxLiveSearchcoreHandler;
if (session_id() == '') {
session_start();
}
$handler = new Handler();
$handler->getJavascriptAntiBot();
最後に、プラグインをテキスト フィールドにフックし、必要なオプション (loaded_at および token) を渡します。
jQuery("#ls_query").ajaxlivesearch({load_at: , token: getToken() . "'"; ?>, max_input: , }); 「」
必要に応じて、追加のパラメータをサーバーに送信することもできます。これを実現するには、検索入力にdata
属性を追加する必要があります。
<input type="text" class='mySearch' id="ls_query" placeholder="Type to start searching ..." data-additionalData="hello world!">
たとえば、この場合、次のように PHP で data 属性にアクセスできます。
// key is transformed to lowercase
$additionalData = $_POST['additionaldata'];
名前 | タイプ | 必須 | 説明 |
---|---|---|---|
ロード済み_at | 整数 | はい | これは、ボットによる検索を防ぐために使用されます。 |
トークン | 弦 | はい | これは、CSRF 攻撃を防ぐために使用されます。 |
URL | 弦 | いいえ | デフォルト: ajax/process_livesearch.php。 |
キャッシュ | ブール値 | いいえ | これは、Ajax リクエストのキャッシュを指します。デフォルト: false |
form_anti_bot | 弦 | いいえ | デフォルト: ajaxlivesearch_guard |
スライド速度 | 弦 | いいえ | デフォルト: 速い |
タイプ_遅延 | 整数 | いいえ | デフォルト: 350 |
最大入力 | 整数 | いいえ | デフォルト: 20 |
min_chars_to_search | 整数 | いいえ | 検索を開始する最小文字数。デフォルト: 0 |
ページ範囲 | 配列 | いいえ | デフォルト: [0、5、10] |
ページ範囲のデフォルト | 整数 | いいえ | デフォルト: 5 |
form_anti_bot_class | 弦 | いいえ | デフォルト: ls_anti_bot |
フッタークラス | 弦 | いいえ | デフォルト: ls_result_footer |
next_page_class | 弦 | いいえ | デフォルト: ls_next_page |
前のページのクラス | 弦 | いいえ | デフォルト: ls_previous_page |
ページ制限 | 弦 | いいえ | デフォルト: page_limit |
結果ラッパークラス | 弦 | いいえ | デフォルト: ls_result_div |
結果クラス | 弦 | いいえ | デフォルト: ls_result_main |
コンテナクラス | 弦 | いいえ | デフォルト: ls_container |
ページネーションクラス | 弦 | いいえ | デフォルト: ページネーション |
フォームクラス | 弦 | いいえ | デフォルト: 検索 |
ロードされた_at_class | 弦 | いいえ | デフォルト: ls_page_loaded_at |
トークンクラス | 弦 | いいえ | デフォルト: ls_token |
current_page_hidden_class | 弦 | いいえ | デフォルト: ls_current_page |
current_page_lbl_class | 弦 | いいえ | デフォルト: ls_current_page_lbl |
last_page_lbl_class | 弦 | いいえ | デフォルト: ls_last_page_lbl |
total_page_lbl_class | 弦 | いいえ | デフォルト: ls_last_page_lbl |
ページ範囲クラス | 弦 | いいえ | デフォルト: ls_items_per_page |
ナビゲーションクラス | 弦 | いいえ | デフォルト: ナビゲーション |
arrow_class | 弦 | いいえ | デフォルト: 矢印 |
名前 |
---|
onResultClick |
onResultEnter |
onAjaxComplete |
例:
jQuery(".mySearch").ajaxlivesearch({
loaded_at: <?php echo time(); ?>,
token: <?php echo "'" . $handler->getToken() . "'"; ?>,
max_input: <?php echo Config::getConfig('maxInputLength'); ?>,
onResultClick: function(e, data) {
// get the index 1 (second column) value
var selectedOne = jQuery(data.selected).find('td').eq('1').text();
// set the input value
jQuery('#ls_query').val(selectedOne);
// hide the result
jQuery("#ls_query").trigger('ajaxlivesearch:hide_result');
},
onResultEnter: function(e, data) {
// do whatever you want
// jQuery("#ls_query").trigger('ajaxlivesearch:search', {query: 'test'});
},
onAjaxComplete: function(e, data) {
}
});
名前 |
---|
ajaxlivesearch: Hide_result |
ajaxlivesearch:検索 |
名前 | タイプ | 必須 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
データソース | 配列 | はい | 各検索テキスト フィールドのデータ ソース。キーはフィールド HTML id を参照しています。現在、MySQL と mongoDB (ベータ版) がサポートされています。 MySQL データソース構成:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
アンチボット | 弦 | はい | これは、JavaScript を使用しないボットからのフォーム送信を防ぐセキュリティ技術として使用されます。この手法では、jQuery を使用して隠しフィールドにこの値が設定されます。任意の値を指定できますが、jQuery プラグインに渡される `form_anti_bot` オプションと同じでなければなりません。デフォルトでは、「ajaxlivesearch_guard」に設定されています。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
検索開始時間オフセット | 整数 | はい | これは、ボットに対する別のセキュリティ技術に使用されます。一部のボットは、ページの読み込みが完了するとすぐにフォームを送信します。しかし、人間の場合、フィールドを埋めるにはさらに時間がかかります。デフォルトでは、このパラメータは 3 秒に設定されています。 3 秒を超える時間を割り当てることはお勧めできません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maxInputLength | 整数 | はい | 検索フィールドの最大文字長を指定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
テンプレート | 弦 | はい | これは、テンプレート フォルダーにあるテンプレート名を指定します。 |
anti_bot と token を無効にする場合のリスクは何ですか?
form_anti_bot
は便利なセキュリティ機能ですが、削除しても問題ありません。これを実現するには、 core/AjaxProcessor.php
のvalidateRequest()
を変更し、 $_POST['ls_anti_bot']
を削除し、 core/Handler.php
のverifySessionValue($sessionParameter, $sessionValue)
変更する必要があります。対照的に、 token
削除すると、誰でもフォームを作成し、サーバーをデータ ソースとして使用できるようになるため、お勧めできません。現在、ページ/検索フォームがロードされるたびに、フォーム ページ (現在の例ではindex.php
) でgetToken()
呼び出すことによって新しいトークンが生成されます。次に、サーバーへの新しいリクエストの検索/送信時に、 verifySessionValue($sessionParameter, $sessionValue)
を使用してトークンと anti_bot がチェックされます。これがやりすぎだと思われる場合は、 getToken()
で既存のセッションに対して同じトークンを返します。
結果で列を非表示にするにはどうすればよいですか?
これはテンプレートで実現できます。例はtemplates/hiddenColumn.php
にあります。
MITライセンス