クーポンコードに関する特定のエラーメッセージ


7

クーポンコードが無効である理由を知ることはできますか?たとえば、注文の小計が100ドル以上でなければならないことを指定するショッピングカートルールがあり、ユーザーが75ドルだけの小計でクーポンを使用しようとすると、「カート100ドル以上にする必要がありますか?」


2
カスタマイズなしではありません。プロモーションルールが実行できるさまざまなシナリオすべてに結びつくメッセージを記述する必要があります(決して単純なタスクではありません)。これが、エラーメッセージがかなり基本的な理由であると考えられます。
Axel

@Axel、これを回答として追加してください。
Fabian Blechschmidt 2014

回答:


2

これは、2つの特定のフィルター(開始日と終了日)のエラーメッセージを改善するために取ったアプローチです。

あなたの質問で述べたように、これらのフィルターは小計などの実際のルール条件を掘り下げるのに比べてかなり単純ですが、かなり単純な実装でかなりの使いやすさの改善を提供すると思います。

これを達成するために実行できる2つのかなりクリーンな書き換えがあります。


Mage_SalesRule_Model_Resource_Rule_Collection :: addWebsiteGroupDateFilter

addWebsiteGroupDateFilterメソッドをオーバーロードして、日付フィルターに一致しないルールが、処理されるルールから完全に除外されないようにします。

public function addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now = null)
{
    parent::addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now);

    $where = $this->_removeDateFilters();
    $this->getSelect()->setPart('where', $where);

    return $this;
}

protected function _removeDateFilters()
{
    $where = $this->getSelect()->getPart('where');

    foreach ($where as $index => $whereLine) {
        if (strpos($whereLine, "from_date is null or from_date <") !== false) {
            unset($where[$index]);
        } elseif (strpos($whereLine, "to_date is null or to_date >") !== false) {
            unset($where[$index]);
        }
    }

    $where = array_values($where);

    return $where;
}

Clean_Checkout_Model_SalesRule_Validator :: _ canProcessRule

_canProcessRuleメソッドをオーバーロードして日付を確認し、特定のエラーメッセージをセッションに追加します。

protected function _canProcessRule($rule, $address)
{
    if ($this->_isRuleExpired($rule, $address)) {
        return false;
    }

    return parent::_canProcessRule($rule, $address);
}

protected function _isRuleExpired($rule, $address)
{
    if ($rule->getFromDate() && date('Y-m-d', time()) < $rule->getFromDate()) {
        $message = "This coupon won't be active until {$rule->getFromDate()}";
        Mage::getSingleton('checkout/session')->addUniqueMessages(new Mage_Core_Model_Message_Error($message));

        return true;
    }

    if ($rule->getToDate() && date('Y-m-d', time()) > $rule->getToDate()) {
        $message = "This coupon expired on {$rule->getToDate()}";
        Mage::getSingleton('checkout/session')->addUniqueMessages(new Mage_Core_Model_Message_Error($message));

        return true;
    }
}

それはうまくいきます!それが私たちが探していた主なシナリオでした。
ローラ

@Laura nice :)ええ、期限切れのクーポンコードは、独自のエラーメッセージを必要とするかなり主要なユースケースであることがわかりました。どうやって私の答えを受け入れられた答えに変えたのですか?答えが受け入れられた後は、それは不可能だと思いました。
kalenjordan 14

チェックボタンをクリックするだけで切り替えられました。
ローラ

3

カスタマイズなしではありません。プロモーションルールが実行できるさまざまなシナリオのすべてに結びつくメッセージを記述する必要があります(決して単純なタスクではありません)。これが、エラーメッセージがかなり基本的な理由であると考えられます。

Magento開発者向けの提案ソリューション。プロモーション設定にテキストエリアの説明フィールドを含めることができます。これにより、管理者はプロモーションルールが失敗した場合に、基本的な「クーポンコードが無効です」というメッセージを表示する代わりに、カスタマイズされたメッセージを含めることができます。これは、一連のルールに基づいて特定のエラーメッセージをプログラムで割り当てようとするのではなく、迅速な解決策になります。


この回答について説明してください。プロモーションの設定に「テキストエリアの説明」を含める必要があります。例を1つ投稿できますか?
Magentoの赤ちゃん2015年

1
アイデアは、プロモーションルール設定ページにtextareaフィールドを追加するMagento拡張機能を記述することです。このテキストエリアにより、ユーザーはプロモーションルールが失敗した場合にユーザーに表示するメッセージを挿入できます。
Axel

:私たちは、この購入する必要があるよりも、magentocommerce.com/magento-connect/...
Magentoの中で赤ちゃんを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.