为什么$ address-> hasCouponCode()总是返回null?

时间:2013-08-16 09:57:43

标签: magento cart quote coupon sales

喜欢在标题中...由于某种原因,magento网站不应用优惠券代码...始终返回无效的“优惠券代码无效”消息。 但奇怪的是,当购物车的价格大于120我的货币时会发生这种情况。

示例:如果我在购物车中有一个价格为65的产品,则优惠券代码可以正常工作...如果我在购物车中有相同的产品但是数量为2(这意味着总价格变为130)我得到了上面提到的无效错误信息

我已经将代码追溯到“Mage_Sales_Model_Quote”类,该类具有一个名为的函数: _validateCouponCode(),其中包含以下内容:$ address-> hasCouponCode()始终返回false ... 我该怎么办?...我重新编制索引,刷新缓存......等等......没有改变......我似乎无法在地址模型中找到hasCouponCode函数来查看那里发生的事情...... 非常感谢提前

3 个答案:

答案 0 :(得分:7)

嗯,没有你的确切规则,很难给出完整的答案。

首先,如果优惠券代码不在引用地址上, Mage_Sales_Model_Quote :: _ validateCouponCode()调用只能从报价中删除优惠券代码。这是因为在collectTotal调用期间,折扣总模型将优惠券代码复制到有效并应用的地址IF。因此, $ address-> hasCouponCode()在这种情况下返回null的事实只是指示规则验证器拒绝应用所提供的优惠券代码。

其次,您应该找出两种方法来找出您的优惠券未被应用的原因。可能它只是一个或另一个取决于你的优惠券,但我会指出两者。 Mage_SalesRule_Model_Validator :: process() Mage_SalesRule_Model_Validator :: processShippingAmount()是检查优惠券代码并可能应用优惠券并将代码复制到地址的两个地方。< / p>

作为旁注, Mage_SalesRule_Model_Validator :: _ maintainAddressCouponCode()是负责将优惠券代码从验证者(从报价中获取代码)复制到地址的方法。如果从未调用此方法,那么您的优惠券代码将始终从报价中删除。

TL;博士

步骤调试 Mage_SalesRule_Model_Validator :: process() Mage_SalesRule_Model_Validator :: processShippingAmount()以调试优惠券代码无效的原因。

答案 1 :(得分:3)

首先,您需要了解$ address-&gt; hasCouponCode()的工作原理。

没有使用魔术函数__call调用它的方法。

您无法直接访问它,因为$ _data受到保护。

现在,最好的调试方法是检查您的地址对象中是否设置了优惠券。

<div id="leaguesList">
  <select>
    <option>NBA</option>
    <option>MLB</option>
    <option>NFL</option>
    <option>NCAAF</option>
    <option>NHL</option>
    <option>Soccer</option>
  </select>
</div>

<button type="button" class="btn btn-default" onclick="addLeagueSelect()">Add</button>
.
.
.
<script>
  function addLeagueSelect() {
   var list = document.getElementById("leaguesList");
   list.appendChild(list.firstChild.cloneNode(true));
  }
</script>

现在,如果购物车中有2件物品,请检查是否设置了优惠券。

另一种方法是尝试使用setter添加优惠券

$data = $address->getData();
$coupon = $data['coupon_code'];

$address->setCouponCode('Your Coupon Code');

并检查这是否有效。 如果没有,那么请查看

$address->setData('coupon_code', 'Your Coupon Code');

将是一个良好的调试开始。

答案 2 :(得分:0)

首先是var_dump($ address)并查看详细信息。

然后,

检查以下内容:

  1. 正确的开始和到期日期。
  2. 为优惠券设置正确的客户群。
  3. 设置active
  4. 如果以上1,2,3要求都为真,则将Stop further rules processing设为YES

    • 除了这些由于某种原因,SKU需要条件的字母数字。因此,请检查您的产品SKU值是否为字母数字。