- 2008-05-23 (金) 14:01
AjaxSearchをAjaxじゃない使い方(結果ページにリンクする使い方)をしている場合に、検索結果からコンテンツにリンクしたあと「戻る」ボタンを使うと「フォームを再送信しますか?」とか言われて、フォームを再送信しないと検索結果に戻れないので、AjaxSearchのフォームをGETで送信するように改造してみます。
編集するファイルは assets/snippets/ajaxSearch ディレクトリ以下の下記のファイル。
ajaxSearch.php
includes/snippet.ajaxSearch.inc.php
includes/templates.inc.php
ajaxSearch.phpを編集
107行目からのifブロックを下記のように編集。
if (($pgCharset != ‘UTF-8′) && (ini_get(’mbstring.encoding_translation’) == ” || strtolower(ini_get(’mbstring.http_input’)) == ‘pass’)) {
if($_POST[’search’]){
$searchString = mb_convert_encoding($_POST[’search’],$pgCharset , "UTF-8");
}elseif($_GET[’search’]){
$searchString = mb_convert_encoding($_GET[’search’],$pgCharset , "UTF-8");
}
$needsConvert = true;
}
else {
if($_POST[’search’]){
$searchString = mb_convert_encoding($_POST[’search’],$pgCharset , "UTF-8");
}elseif($_GET[’search’]){ $searchString = mb_convert_encoding($_GET[’search’],$pgCharset , "UTF-8");} $needsConvert = false;
}
$searchString=~の部分で、$searchStringにPOSTデータ($_POST[’search’])を変数に格納しているので、GETデータ($_GET[’search’])の場合でも変数に格納できるように変更します。
if($_POST[’search’]){ // POSTデータが送られている場合
$searchString = mb_convert_encoding($_POST[’search’],$pgCharset , "UTF-8");
}elseif($_GET[’search’]){ // GETデータが送られている場合
$searchString = mb_convert_encoding($_GET[’search’],$pgCharset , "UTF-8");
}
includes/snippet.ajaxSearch.inc.phpを編集
220行目あたりに下記のコードを追加します。
CONFIGURE - Ajax SNIPPET SETUP OPTIONSというブロック内であればOK
//Method 2008/05/23 add
$meThod = isset($meThod) ? $meThod : "post";
methodのtを大文字にしているのは、私の趣味w
じゃなくて、他の変数とかに干渉したらまずいので、わざと途中のアルファベットを大文字にしています。
280行目あたりの「// CLEAN SEARCH STRING」のifブロックを以下のように編集。
// CLEAN SEARCH STRING
if ( isset($_POST[’search’]) || isset($_GET[’search’]) || isset($_GET[’AS_search’]) || isset($_GET[’FSF_search’])) {
// Prefer post to get
if (isset($_POST[’search’])) {
$searchString = $_POST[’search’];
} elseif (isset($_GET[’search’])) { // <– 2008/05/23 add
$searchString = html_entity_decode($_GET[’search’]); // <– 2008/05/23 add
} elseif (isset($_GET[’AS_search’])) {
$searchString = html_entity_decode($_GET[’AS_search’]);
} else {
// Code to make tag cloud snippet work with this search
$searchString = html_entity_decode($_GET[’FSF_search’]);
}
$_GET[’search’]と$_GET[’AS_search’]がほとんど同じ動作をしますので、工夫すればもっと綺麗なコードにできるんでしょうが、メンテナンス性を考えて、単純に追加しました。
360行目あたりの$formPlaceholders配列にキー「[+as.formMethod+]」を追加します。
$formPlaceholders = array(
‘[+as.formId+]’ => $searchFormId,
‘[+as.formAction+]’ => $searchAction,
‘[+as.inputValue+]’ => ($searchString == ” && $_lang[’as_boxText’] != ”) ? $_lang[’as_boxText’] : $searchString,
‘[+as.inputOptions+]’ => ($_lang[’as_boxText’]) ? ‘ onfocus="this.value=(this.value==\”.$_lang[’as_boxText’].’\')? \’\’ : this.value ;"’ : ”,
‘[+as.submitText+]’ => $_lang[’as_searchButtonText’],
‘[+as.formMethod+]’ => $meThod,
);
includes/templates.inc.phpを編集
16行目の<form>タグを下記のように編集。
<form [+as.formId+]action="[+as.formAction+]" method="[+as.formMethod+]">
と、編集したファイルは、ここまで。
一応、編集前のファイルをバックアップしてから、サーバーに上書きして下さい。
スニペットコール
ファイルをアップしたら、スニペットコールに&meThod=`get`を追加します。
ここで&meThod=`post`とすれば、従来通りpostでデータを送るようになりますし、省略すればpostで動作します。
[!AjaxSearch? &config=`config` &meThod=`get` !]
どうでしょうか?
ここまでの編集済みファイルを用意してみました。
ベースは、AjaxSearch 1.7.1ですので、それ以外のバージョンを使っている人は、上記部分を確認しながらコードを修正してみてください。
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://webparty.t-pad.net/modx/ajaxsearch/ajaxsearchをgetで使う【改造】/trackback
- Listed below are links to weblogs that reference
- AjaxSearchをGETで使う【改造】 from Walk in the WWW

