クーポンコードが無効である理由を知ることはできますか?たとえば、注文の小計が100ドル以上でなければならないことを指定するショッピングカートルールがあり、ユーザーが75ドルだけの小計でクーポンを使用しようとすると、「カート100ドル以上にする必要がありますか?」
クーポンコードが無効である理由を知ることはできますか?たとえば、注文の小計が100ドル以上でなければならないことを指定するショッピングカートルールがあり、ユーザーが75ドルだけの小計でクーポンを使用しようとすると、「カート100ドル以上にする必要がありますか?」
回答:
これは、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;
}
}
カスタマイズなしではありません。プロモーションルールが実行できるさまざまなシナリオのすべてに結びつくメッセージを記述する必要があります(決して単純なタスクではありません)。これが、エラーメッセージがかなり基本的な理由であると考えられます。
Magento開発者向けの提案ソリューション。プロモーション設定にテキストエリアの説明フィールドを含めることができます。これにより、管理者はプロモーションルールが失敗した場合に、基本的な「クーポンコードが無効です」というメッセージを表示する代わりに、カスタマイズされたメッセージを含めることができます。これは、一連のルールに基づいて特定のエラーメッセージをプログラムで割り当てようとするのではなく、迅速な解決策になります。