You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento 1.9技术需求:合并折扣金额至小计,调整结账与购物车显示

Magento 1.9:将折扣合并至小计并隐藏折扣行(购物车+结账页面)

我来给你详细拆解实现步骤,分为前端模板调整和可选的后台逻辑优化两部分,确保购物车、结账页面都能符合你的需求:


一、前端模板快速修改(即时生效)

先处理最直观的页面显示,我们需要修改购物车和结账页面的合计模板,隐藏折扣行并调整小计的显示数值。

1. 购物车页面合计模板

找到你的主题下的购物车合计模板文件:
app/design/frontend/[你的主题包]/[你的主题]/template/checkout/cart/totals.phtml

  • 隐藏折扣行:找到这段显示折扣的代码块,直接注释或删除:
<?php if ($this->canDisplayDiscount()): ?>
    <tr>
        <td class="a-right" colspan="<?php echo $this->getColspan(); ?>">
            <?php echo $this->helper('checkout')->__('Discount'); ?>
        </td>
        <td class="a-right">
            <?php echo $this->helper('checkout')->formatPrice($this->getDiscountAmount()); ?>
        </td>
    </tr>
<?php endif; ?>
  • 修改小计显示值:找到小计的代码块,把原小计数值替换为「原小计 - 折扣金额」:
    原代码:
<strong><?php echo $this->helper('checkout')->formatPrice($this->getSubtotal()); ?></strong>

修改后:

<strong><?php echo $this->helper('checkout')->formatPrice($this->getSubtotal() - $this->getDiscountAmount()); ?></strong>

2. 结账页面(订单回顾)合计模板

找到结账回顾页的合计模板:
app/design/frontend/[你的主题包]/[你的主题]/template/checkout/onepage/review/totals.phtml

重复上面的两个操作:

  • 注释/删除折扣行代码
  • 修改小计的显示数值为 $this->getSubtotal() - $this->getDiscountAmount()

3. 订单详情页(可选)

如果需要用户在订单详情页也看到合并后的小计,修改这个模板:
app/design/frontend/[你的主题包]/[你的主题]/template/sales/order/totals.phtml
同样隐藏折扣行,调整小计显示值。


二、后台逻辑优化(让数据层面统一)

上面的模板修改只是前端显示调整,如果希望订单数据(比如后台订单详情、订单邮件)也同步这个逻辑,需要重写Magento的合计计算模型:

1. 创建自定义模块(基础步骤)

先创建一个简单的自定义模块(假设命名为YourCompany_DiscountMerge),在app/etc/modules/YourCompany_DiscountMerge.xml中注册模块:

<?xml version="1.0"?>
<config>
    <modules>
        <YourCompany_DiscountMerge>
            <active>true</active>
            <codePool>local</codePool>
        </YourCompany_DiscountMerge>
    </modules>
</config>

2. 重写折扣合计模型

在app/code/local/YourCompany/DiscountMerge/etc/config.xml中配置模型重写:

<?xml version="1.0"?>
<config>
    <global>
        <models>
            <sales>
                <rewrite>
                    <quote_address_total_discount>YourCompany_DiscountMerge_Model_Sales_Quote_Address_Total_Discount</quote_address_total_discount>
                </rewrite>
            </sales>
        </models>
    </global>
</config>

然后创建重写的模型文件app/code/local/YourCompany/DiscountMerge/Model/Sales/Quote/Address/Total/Discount.php:

<?php
class YourCompany_DiscountMerge_Model_Sales_Quote_Address_Total_Discount extends Mage_Sales_Model_Quote_Address_Total_Discount
{
    public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        // 先执行原有的折扣计算逻辑
        parent::collect($address);
        
        $discountAmount = $address->getDiscountAmount();
        if ($discountAmount != 0) {
            // 将折扣金额合并到小计中(原小计减去折扣,因为折扣是优惠金额)
            $newSubtotal = $address->getSubtotal() - $discountAmount;
            $address->setSubtotal($newSubtotal);
            $address->setBaseSubtotal($address->getBaseSubtotal() - $address->getBaseDiscountAmount());
            
            // 重置折扣金额,让系统不再单独显示折扣行
            $address->setDiscountAmount(0);
            $address->setBaseDiscountAmount(0);
        }
        
        return $this;
    }
}

三、最后步骤

  1. 清理Magento缓存(系统→缓存管理)
  2. 测试购物车添加商品、应用折扣、进入结账流程,确认小计显示正确且折扣行已隐藏
  3. 如果做了后台逻辑优化,测试订单创建后的后台详情、订单邮件是否符合预期

注意:修改模板前请务必备份原文件,优先使用自定义主题而非修改默认主题,避免Magento升级时覆盖修改内容。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:41:52