【问题标题】:Override Shopping Cart Price Rules in Magento在 Magento 中覆盖购物车价格规则
【发布时间】:2014-10-18 12:59:33
【问题描述】:

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

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

我正在使用 Magento CE 1.8.1.0

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

在核心文件 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>

我如何做到这一点?

有什么想法吗?

【问题讨论】:

  • 你不能默认使用条件选项卡吗?
  • @SamuelComan 是的,这就是为什么我只想覆盖“产品价格折扣的百分比”请检查我编辑的问题。
  • 没那么容易。您必须考虑 4 件事 - 将字段添加到表单中,将数据保存到数据库中,从数据库中获取数据并在需要时使用(在本例中为验证器)。我将在下面编辑我的答案。

标签: php magento


【解决方案1】:

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

您想提供 10% 的折扣,但没有超过 1000 美元的折扣。

创建 2 条规则:

  1. 如果购物车总金额小于 10,000 美元,可享受 10% 的折扣
  2. 如果购物车总金额超过 10,000 美元,则给予 1000 美元的折扣

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

  1. 将该限制字段移至 Magento 配置部分。有关详细信息,请参阅http://inchoo.net/ecommerce/magento/create-configuration-for-your-magento-extension/。如果将其与规则表单分开,会容易得多。
  2. 使用以下命令扩展模块中的 app/code/core/Mage/SalesRule/Model/Validator.php: app/code/local/Namespace/Module/etc/config.xml

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

app/code/local/Namespace/Module/Model/Validator.php

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

【讨论】:

  • 是的,我已经提出了这样的建议,但在我的要求中,他们只需要一个优惠券代码,这就是为什么要这样尝试。
猜你喜欢
  • 2013-02-18
  • 2015-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多