在Magento中覆盖购物车价格规则

时间:2014-08-25 11:25:27

标签: php magento

我遇到了无法解决的问题。部分是因为我无法用正确的术语来解释它。我是新手,对这个笨拙的问题感到抱歉。

您可以在下面看到我的目标概述。

我正在使用Magento CE 1.8.1.0

如何覆盖购物车价格规则。

enter image description here 在核心文件app / code / core / Mage / SalesRule / Model / Validator.php中,他们编写了这个文件的默认代码。第331到349行是在这里。

$step = $rule->getDiscountStep();
if ($step) {
    $qty = floor($qty/$step)*$step;
}
$_rulePct = $rulePercent/100;
$discountAmount    = ($qty * $itemPrice - $item->getDiscountAmount()) * $_rulePct;
$baseDiscountAmount = ($qty * $baseItemPrice - $item->getBaseDiscountAmount()) * $_rulePct;
//get discount for original price
$originalDiscountAmount    = ($qty * $itemOriginalPrice - $item->getDiscountAmount()) * $_rulePct;
$baseOriginalDiscountAmount = ($qty * $baseItemOriginalPrice - $item->getDiscountAmount()) * $_rulePct;
if (!$rule->getDiscountQty() || $rule->getDiscountQty()>$qty) {
    $discountPercent = min(100, $item->getDiscountPercent()+$rulePercent);
    $item->setDiscountPercent($discountPercent);
}

此代码我想像这样编辑

$step = $rule->getDiscountStep();
if ($step) {
    $qty = floor($qty/$step)*$step;
}
$_rulePct = $rulePercent/100;
$discountAmount    = ($qty * $itemPrice - $item->getDiscountAmount()) * $_rulePct;
$baseDiscountAmount = ($qty * $baseItemPrice - $item->getBaseDiscountAmount()) * $_rulePct;
//get discount for original price
$originalDiscountAmount    = ($qty * $itemOriginalPrice - $item->getDiscountAmount()) * $_rulePct;
$maxlimitamount = 1000; // maximum amount entered in admin panel
if($originalDiscountAmount > $maxlimitamount)
{
    $originalDiscountAmount = 1000;
}
$baseOriginalDiscountAmount = ($qty * $baseItemOriginalPrice - $item->getDiscountAmount()) * $_rulePct;
if (!$rule->getDiscountQty() || $rule->getDiscountQty()>$qty) {
    $discountPercent = min(100, $item->getDiscountPercent()+$rulePercent);
    $item->setDiscountPercent($discountPercent);
}

我的自定义模块 config.xml

<global>
        <models>
            <salesrule_resource>
                <rewrite>     
                    <rule_collection>SCPR_Pricerule_Model_Resource_Rule_Collection</rule_collection>
                </rewrite>
            </salesrule_resource>
        </models> 
</global>

我如何实现这一目标?

任何想法?

1 个答案:

答案 0 :(得分:0)

我认为你不需要编辑任何代码。使用一些数学技巧。

您希望获得10%的折扣,但不能超过1000美元的折扣。

创建2条规则:

  1. 如果购物车总额小于10,000美元,则可获得10%的折扣
  2. 如果购物车总额大于10,000 $
  3. ,则可获得1000美元的折扣

    编辑 - 因为您只需要一个规则

    1. 将该限制字段移动到Magento配置部分。有关详细信息,请参阅http://inchoo.net/ecommerce/magento/create-configuration-for-your-magento-extension/。如果将它与规则表单分开,情况就会容易得多。
    2. 使用以下方法扩展模块中的app / code / core / Mage / SalesRule / Model / Validator.php: 应用程序/代码/本地/命名空间/模块的/ etc / config.xml中

      <global>
          <models>
              <salesrule>
                  <rewrite>     
                      <validator>Namespace_Module_Model_Validator</rule_collection>
                  </rewrite>
              </salesrule>
          </models> 
      

    3. 应用程序/代码/本地/命名空间/模块/型号/ Validator.php

      <?php
      Namespace_Module_Model_Validator extends Mage_Core_Model_Validator {
      ... //place your updated method here