チェックアウトから電話必須フィールドを削除する最新のガイド


9

magentoレイアウトバージョン1.8.0.0に基づくチェックアウトでの「必須」の電話フィールドの削除に関するガイドを投稿してください。現在のGoogleリソースの大部分は古く、機能していません。これは、最新のハウツー/ガイドを保管するのに最適な場所のようです。

Magento 1.8.0.0をダウンロードし、それが削除されたことの証明を提供することで、実際の解決策を確認できる人がいると助かります。これらのコードスニペットが役立つこともありますが、まだ、読みやすく、文書化された方法で解決策を見つけることができません。


回答:


8

前に1.8.1私は、この作品を作るためにあらゆる方法を知っていないよ、あなたはどちらか(醜い、私は知っている)ローカルコードプールに抽象コアクラスをオーバーライドするか、すべての単一の子クラスを書き換える必要があります。

その後1.8.1、彼らはイベントを紹介しましたcustomer_address_validation_after。私はそれをあまり誇りに思っていなくても、リフレクションを使用して検証を取り除きました。あなたの問題は解決しないかもしれませんが、とにかくそれを投稿したいと思いました。

/**
 * Validate address ignoring phone-related errors
 *
 * Internally uses reflexion. Maybe not the most
 * efficient or clean implementation, but allows
 * this functionality to be implemented without
 * the need to rewrite 3 core classes.
 *
 * Listens to:
 * - customer_address_validation_after
 *
 * @param Varien_Event_Observer $observer Event observer
 */
public function validateAddress(Varien_Event_Observer $observer)
{
    /* @var $address Mage_Customer_Model_Address_Abstract */
    $address = $observer->getAddress();
    if (!$address) {
        return;
    }

    $prop = new ReflectionProperty('Mage_Customer_Model_Address_Abstract', '_errors');
    if (!$prop) {
        return;
    }
    $prop->setAccessible(true);
    $errors = $prop->getValue($address);
    $prop->setValue($address, array());

    $errorMessage = $this->getErrorMessage();
    foreach ($errors as $error) {
        if ($error !== $errorMessage) {
            $address->addError($error);
        }
    }
}

/**
 * Get standard error message
 *
 * @return string
 */
protected function getErrorMessage()
{
    return Mage::helper('customer')->__('Please enter the telephone number.');
}

また、フィールドを不要として定義する更新スクリプトを作成し、すべてのフォームを編集してフロントエンドの検証を削除しました。私が言ったように、それは最良の解決策ではないかもしれませんが、それは3-4クラスのIMHOを書き換えるよりはましです。

UPDATE コアチームがイベントを包んcustomer_address_validation_afterから条件起動中1.9.0を通して1.9.1.1私の解決策は、これらのバージョンでは動作しませんので、残念ながら、(私には意味がありませんなぜ私は本当に...不思議)。条件付きは幸運にもで削除されました1.9.2


ありがとう!これをモジュールに入れるだけです:github.com/sreichel/magento-StackExchange_RequiredTelephone
sv3n

6

Mage_Customer_Model_Address_Abstract電話番号のZend Validationにコメントする375-377行目のclass * を変更する必要があります。

//if (!Zend_Validate::is($this->getTelephone(), 'NotEmpty')) {
//   $errors[] = Mage::helper('customer')->__('Please enter the telephone number.');
//}

データベース内の電話属性自体と同様に、必要なクラスを削除します。これは次のクエリで実行できます

UPDATE `eav_attribute` SET `is_required` = 0 WHERE `attribute_code` = 'telephone';

これは、電話フィールドのフロントエンド(Javascript)検証を処理します。

**クラスファイルをlocalコードディレクトリにコピーしてください*


カスタム拡張から抽象クラスを拡張(書き換え)できないことに注意してください。ファイル全体をapp / code / localにコピーして、そこでカスタマイズすることしかできません。また、この回答は1.8より前のバージョンのMagentoでも機能することに注意してください。
Mark van der

あなたは絶対的に正しいです。私はすぐに編集します
Sander Mangel

提案された回答が示すように、私は/ public_html / app / code / core / Mage / Customer / Model / Addressからpublic_html / app / code / local / Mage / Customer / Model / AddressにAbstract.phpをコピーし、電話番号と実行UPDATE eav_attribute SET is_required = 0 WHERE attribute_code = 'telephone' LIMIT 1; 1行が影響を受けました。(クエリにかかった時間は0.0506秒です)すべてのキャッシュをクリアしました(私のmagentoコンパイルは常にオフです)しかし、顧客がチェックアウトする前に番号を指定する必要がありました。誰かがこのソリューションが1.8.0.0で機能することを確認してください。私のソリューションでは機能しないためです。
Alistair

2
Sanderのクエリに小さなエラーがあります。クエリでLIMIT 1を省略してください。デフォルトのCE 1.8のインストールではeav_attribute、コード「telephone」の4つのエントリがあるため、どれが更新されたかがわかりません。その後、コードは機能するはずです(テストしたばかりです)。ビジュアルパーツについては<em>*</em>、すべてのフォームのフィールドのラベルを削除する必要があります(チェックアウト/住所編集)。もちろん、何らかのワンステップチェックアウトがインストールされている場合は、デフォルトのMagento機能の一部が上書きされる可能性があり、この回答は機能しない可能性があります。
Mark van der Sanden、

1
こんにちはマーク:あなたのコメントをありがとう、私はそれが私の店でそうであったかどうかを確認しましたが、コード 'telephone' "SELECT * FROM eav_attribute WHERE attribute_code = 'telephone'"のeav_atributeは1つしかありません行0-0を表示しています(合計1回、クエリには0.0005秒かかりました)。したがって、あなたのストアとは異なり、私のストアにはこれらの1つしかありません。現在、「is_required = 0」に設定されています
Alistair

5

サイトのテーマのアドレステンプレートを変更し、電話をデフォルト値としてスペースまたはダッシュを使用して非表示フィールドにすることをお勧めします。これは、書き換え/上書きを必要としません。


2

カスタム拡張と構成の書き換えを使用して、抽象を使用するクラスを単に書き換えることはできませんか?

  • Mage_Sales_Model_Quote_Address
  • Mage_Customer_Model_Address
  • Mage_Sales_Model_Order_Address

次にvalidate、電話チェックを除外する独自の関数を作成するか、必要なすべての属性をチェックして、それらが設定されていることを検証します。


1
真実ですが、残念ながら、毎秒の支払いまたは配送モジュールがそれらのクラスを書き直そうとしています(いくつか挙げることができます)。多くの場合、それはオプションではありません、またはそれは非常に厄介です。
fmrng

しかし、あなたはそれらの複数の書き換えを解決しましたか?そのため、そのソリューションを使用して、検証をそこに挿入できます。
David Manners、

もちろん、それを行うことはできますが、他の誰がそれらのクラスを書き直すのかわからないため、プロジェクトごとに行う必要があります。残念ながら、お客様は常に電話の検証を削除するよう求めています。私が思いついた唯一の標準で「クリーンな」ソリューションは、私の回答で説明したものであり、すべてのMagentoバージョンで機能するわけではありません。それが適用できない場合、最も簡単なのは、抽象クラスをローカルコードプールにコピーして検証をコメント化することです...最善ではありませんが、悪用しないのであれば問題ありません。
fmrng 2015年

2

私は、Davidのアプローチに基本的に従っている、Tobiによる素敵な小さな拡張 "Webguys_Telefonkeinpflicht"に出会いました。それぞれのサブクラスを書き換えます。私がかなり気に入っているのは、書き換えられたクラスでイベントをディスパッチするだけで、その後のカスタマイズはすべてイベントオブザーバーで行われるという点です。またcore_block_abstract_to_html_after、スターと必要なクラスを正規表現のブラックマジックで入力フィールドから削除するためにイベントを監視します。そしてもちろん、eav_attributeテーブルに電話属性を必要としない設定スクリプトが付属しています。GitHubで拡張機能を確認できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.