カスタマイズ講座

ホーム > カスタマイズ講座 > 【初級】カスタマイズ > EC-CUBEの郵便番号検索で〒604-8072を検索するとなんだかおかしいのを直す

EC-CUBEの郵便番号検索で〒604-8072を検索するとなんだかおかしいのを直す

2012.02.29

郵便番号検索したらおかしくなるのは、結構沢山ある



皆さんご存じでしたか?郵便番号の中には、下図のように検索した結果がなんだかおかしいものがあります。※昨年末頃初めて知りました。。






これは、EC-CUBEが参照している郵便番号CSVにおいて、下図の様な記述がある為、そのままでてきてしまっているようです。上図の場合はまだよいですが、DBによっては1行目ではなく、最後の行がヒットすることもあるようです。そうなるとますますよくわからない住所になってしまいます。





京都に多いようですが、全国的にも存在するので対処しておいた方がよいでしょう。



また、もう一点修正すべき点があります。


306-0433で郵便番号検索すると、「●●の次に番地が来る場合」という表示になる







こちらも先ほど同様、CSVに登録されている物がそのままでてきています。





一挙に解決しましょう!!




2.4系の解決方法


/data/class/pages/LC_Page_InputZip.php または
/data/class_extends/page_extends/LC_Page_InputZip_Ex.php を編集します。
※セオリー的にはLC_Page_InputZip.php から該当関数をコピーして
LC_Page_InputZip_Ex.php を編集するのですが、
よくわからない方&カスタマイズしていなければ LC_Page_InputZip.phpでも
良いかと思います(作業前にバックアップだけしっかりしましょう)。


まずは、郵便番号が複数行にまたがるくらい長い場合の対処方です。
正規表現を駆使してカッコ以降を削除するなどもできるのですが、
ここでは難しい事をせずに、1行よりも多かった場合は、
townに相当する部分のデータを入れないようにしました。
(区や市レベルで止まる)

// 郵便番号検索文作成
$zipcode = $_GET['zip1'].$_GET['zip2'];
$zipcode = mb_convert_kana($zipcode ,"n");
$sqlse = "SELECT state, city, town FROM mtb_zip WHERE zipcode = ?";


$data_list = $conn->getAll($sqlse, array($zipcode));
if (empty($data_list)) $data_list = array();


// ▼追記ここから
$zip_cnt = count($data_list);

if ($zip_cnt > 1) {
$data_list[0]['town'] = "";
}
unset($zip_cnt);
// ▲追記ここまで




もう一点の、「●●の次に番地が来る場合」は、以下の様に対処します。
※ここは2.11.5でも未だにereg系をつかっているようですが、僕は個人的趣味?からpreg_replaceを使ってるので、書き直しています。

$town = preg_replace("/(.*)$/","",$town);
$town = preg_replace("/以下に掲載がない場合/","",$town);
$town = preg_replace("/(.*?)の次に番地がくる場合/","",$town);



以上で対応ができた・・はず!!お試しください!


※2.11系の場合は/data/class/util/SC_Utils.php の
sfGetAddress 関数を修正すると、幸せになれそうです。
適宜Exのファイルを編集して下さい。

このページを見ている人は、以下のページも参照しているようです・・・!

>> EC-CUBEの学校のページ参照は、レコメンドエンジン「楽レコ」でレコメンデーションしています!

レビュー

レビューによるご意見・ご質問は会員登録された方のみとなっております。

この記事に対するトラックバック

この記事のトラックバック先URL

ECの「勝ち組」だけが知っている 売り上げUPの秘密はこちら