【Zen Cart】注文管理の検索結果で詳細が白紙

注文管理画面で、例えば「山本」で検索し、山本さんの注文一覧を表示させたとします。

山本さんといっても目的の「山本 太郎」さんの他に「山本 次郎」さんや、「山本 花子」さんなども検索に引っ掛かってくる。

この一覧画面で、一番最初の山本さんの情報を見るには、問題ないのですが、2番目以降の山本さんをクリックした場合、「白紙の検索結果」画面が表示されてしまう。

対策前のURL

「山本」で検索した時の一覧のURLは、
http://www.zencart.com/admin/orders.php?search=%BB%B3%CB%DC

一覧から2つ目以降をクリックした時のURLは、
http://www.zencart.com/admin/orders.php?search=山本&page=1&oID=1013

search= 以下の文字列がURLエンコードされずにそのまま出力されてしまっています。

試しにURL内の「山本」を元の %BB%B3%CB%DC に置き換えてみると正しく動作します。

なので、この一覧ページ内のURLを組み立てているphpファイルを探して対応する変更をします。

html_output.php の処理

今回のエラーの原因は、日本語などのマルチバイト文字で検索した場合に一覧の2つ目以降の行のリンク先URLにマルチバイト文字列がURLエンコードされずに出力されているのが原因です。

/admin/includes/functions/html_output.php
のファイルを変更します。

変更前 : function zen_href_link 内の if ($parameters == ”) のところ..
<html_output.php 43行目あたり>

if ($parameters == ”) {
  $link = $link . $page;
  $separator = ‘?’;
} else {
  $link = $link . $page . ‘?’ . $parameters;
  $separator = ‘&’;
}

変更後 : else 内に以下のif文を追加します..

if ($parameters == ”) {
  $link = $link . $page;
  $separator = ‘?’;
} else {

/** ここから追加 **/
  if ( $_GET[‘search’] ){
    $parameters = str_replace($_GET[‘search’], urlencode($_GET[‘search’]), $parameters);
  }

/** ここまで追加 **/
  $link = $link . $page . ‘?’ . $parameters;
  $separator = ‘&’;
}


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です