Home > MODx | AjaxSearch > AjaxSearchをGETで使う【改造】

AjaxSearchをGETで使う【改造】

  • 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ですので、それ以外のバージョンを使っている人は、上記部分を確認しながらコードを修正してみてください。

改造AjaxSearch

Comments:0

Comment Form
Remember personal info

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

Home > MODx | AjaxSearch > AjaxSearchをGETで使う【改造】

アーカイブ
カテゴリークラウド

Google MODx MySQL PC PHP SEO SEOツール Zen Cart インターネット サーバー テクノロジー ニュース ビジネス ホームページ製作 メール リンク 健康 携帯電話 政治 日記 未分類 災害 経済

-- Powered by Category Cloud

ブログパーツ

サイト売買のサイトストック

あわせて読みたい

フィードメーター - Walk in the WWW

メタ情報

Return to page top