1

我创建了一个自定义总计收集器,为符合条件的客户提供购物车小计 3% 的折扣。我的收集器的代码如下所示:

class My_Module_Model_DiscountCollector
    extends Mage_Sales_Model_Quote_Address_Total_Abstract
{
    // ...
    public function collect(Mage_Sales_Model_Quote_Address $address)
    {
        if($this->userIsQualified())
        {
            parent::collect($address);

            // $this->_inclTax tells the collector to either calculate the actual discount amount 
            // based on the subtotal including or excluding tax
            $baseCalcValue = ($this->_inclTax) ? $address->getBaseSubtotalTotalInclTax() : $address->getBaseSubtotal();
            $calcValue = ($this->_inclTax) ? $address->getSubtotalInclTax() : $address->getSubtotal();

            $baseDiscountAmount = $baseCalcValue * 0.03;
            $discountAmount = $calcValue * 0.03;

            $this->_setBaseAmount(-$baseDiscountAmount);
            $this->_setAmount(-$discountAmount);
        }
        return $this;
    }
    public function fetch(Mage_Sales_Model_Quote_Address $address)
    {
        if($this->userIsQualified())
        {
            $discountAmount = (($this->_inclTax) ? $address->getSubtotalInclTax() : $address->getSubtotal()) * 0.03;
            $address->addTotal(
                array(
                    "code"  => $this->getCode(),
                    "title" => "My Discount (3%)",
                    "value" => -$discountAmount
                )
            );
        }
        return $this;
    }
    // ...
}

我的问题是更改总计列表中总计的顺序(例如在查看购物车时)。当前的订单是“小计,运费,我的折扣,...,总计”,但我更喜欢“小计,我的折扣,运费,...”。目前我的 config.xml 看起来像这样:

<config>
    <!-- ... --->
    <global>
        <!-- ... -->
        <sales>
            <quote>
                <totals>
                    <my_discount>
                        <class>My_Module_Model_DiscountCollector</class
                        <after>shipping</after>
                        <!--<before>grand_total</before>-->
                        <!--<after>shipping</after>-->
                        <!--<before>shipping</before>-->
                    </my_discount>
                </totals>
            </quote>
        </sales>
        <!-- ... -->
    </global>
</config>

我为“之前”和“之后”元素尝试了不同的设置,但这并没有影响总数的列出顺序,它只影响了 grand_total 的计算。这很奇怪,但我的总数仅包含在使用上述设置的 grand_total 的计算中。例如,如果我将“after”设置为“subtotal”,或者如果我将“before”设置为“grand_total”,那么我的总数根本不会影响 grand_total 的计算。也许有人可以向我解释。

那么如何更改总计的顺序呢?为什么当我将“之后”设置为“运输”以外的任何其他内容时结果如此奇怪?我是否误解了这两个配置元素的功能?

4

1 回答 1

3

您上面的 XML 片段是用于总计收集器在后端触发的顺序。前端订单控制在不同的地方。来自 Mage/Core/Sales/etc 中的 config.xml:

...
<default>
...
    <sales>
        <totals_sort>
            <discount>20</discount>
            <grand_total>100</grand_total>
            <shipping>30</shipping>
            <subtotal>10</subtotal>
            <tax>40</tax>
        </totals_sort>
...
</default>

如果您在模块 config.xml 文件中添加<my_discount>为节点,<totals_sort>则可以将其插入您喜欢的位置。

于 2012-10-24T16:32:10.727 回答