0

Magento での注文の配送先住所、請求先住所、名前に àòèù のような外国語のアクセントが含まれていることがあるという問題があります。Magento で注文を保存する前に、それらを英語のアルファベット aoeu に変換したいと考えています。

関数であるphpコードがあります

public function removeAccents($str)
{
    $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'Ð', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', '?', '?', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', '?', '?', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '?', 'O', 'o', 'O', 'o', 'O', 'o', 'Œ', 'œ', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'Š', 'š', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Ÿ', 'Z', 'z', 'Z', 'z', 'Ž', 'ž', '?', 'ƒ', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '?', '?', '?', '?', '?', '?');
    $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
    return str_replace($a, $b, $str);
}

そして、この関数を OnepageController saveShippingAction メソッドで次のように使用します

$data['street'][0] = removeAccents($data['street'][0]);
$data['street'][1] = removeAccents($data['street'][1]);
$data['city'] = removeAccents($data['city']);
$data['city'] = "test";
$data['region'] = removeAccents($data['region']);

配送先住所が保存される前。

私のテーマには既に OnepageController がありますが、コア Mage コントローラーにはない機能があります。ここではコアの Mage コントローラーを変更しているため、関数 saveShippingAction をコピーするだけではうまくいかないようで、コントロールはコアの saveShippingAction 関数に渡されます。

また、フロントエンド属性を追加して config.xml を変更しようとしましたが、うまくいかないようです。私が望むものを達成するためのより簡単な方法があるかどうかはわかりません (etc/config.xml の UTF-8 を Latin-1 ISO に変更するなど)。

このフォーラムの誰かがこの問題とその解決方法に光を当ててくれることを願っています! ありがとう!!

4

2 に答える 2

1

コメント投稿者が示唆しているように、住所の元の文字を保持することは理にかなっています。しかし、本当にそれをしなければならない場合は、オブザーバーを作成してsales_quote_address_before_saveイベントをキャプチャーすることで実現できます。

オブザーバー関数では、呼び出してアドレス モデルにアクセスできます。

public function convertAddressChars(Varien_Event_Observer $observer) 
{ 
    $address = $observer->getEvent()->getObject();
    /**
    * Perform necessary manipulations, e.g.
    * $address->setData('city', removeAccents($address->getData('city'));
    */
}

ただし、繰り返しますが、住所データのアクセントを保持できないと、注文が配達されない可能性があります。

于 2013-02-07T23:18:13.247 に答える
0

これは実際にはよくある問題です。配送業者によっては、ウムラウトが多すぎるなどに対応できない場合があります。

別の方法として、フロントエンドの JavaScript で顧客の住所の詳細を整理することもできます。これを試したときに手元にあるコードはありませんが、十分に単純です。これには 2 つの方法があります。「onblur」イベントを聞いて、顧客が詳細を入力するときにテキストを整理するか、注文を構成するために各セクションが送信されるときにそれを行うことができます。

申し訳ありませんが、これはコードではなく単なるアプローチです。このルートをたどれば、何かを掘り下げることができるかもしれません...

于 2013-02-08T13:48:48.223 に答える