1

我打算制作一个自定义积分模块,可以使用我们商店的积分进行折扣。在查看了一些示例后,我成功地在单页结帐中添加了结帐步骤。然后我扩展 Mage_Sales_Model_Quote_Address_Total_Abstract 以拥有一个自定义收集器来计算总数。目前我硬编码了一些折扣值,看看它是如何工作的:

public function collect(Mage_Sales_Model_Quote_Address $address) {
        parent::collect ( $address );
        //if($address->getData('address_type')=='billing') return $this;

        try {

            $this->_setAmount ( -10 )->_setBaseAmount ( -10 );

        } catch ( Exception $e ) {
            Mage::throwException ( $e->getMessage () );

        //do nothing.    
        }
        return $this;
    }

    public function fetch(Mage_Sales_Model_Quote_Address $address) {
        parent::fetch ( $address );
        //if($address->getData('address_type')=='billing') return $this;
        $title = Mage::helper ( 'sales' )->__ ( 'Credittest' );
        $address->addTotal ( array ('code' => $this->getCode (), 'title' => $title, 'value' => -10 ) );
        return $this;
    }

config.xml 中的部分如下所示:

<sales>
    <quote>
        <totals>
            <credittest>
                 <class>sales/quote_address_total_credit</class>
                 <after>tax_subtotal,subtotal,freeshipping</after>
                 <before>grand_total</before>
            </credittest>
        </totals>
    </quote>
</sales> 

然而,结果是减去-20。在一些调试跟踪之后,我的自定义收集器被调用了两次,一次地址类型是“计费”,另一个是“运输”。所以我添加了上面的注释代码,仅在输入送货地址时计算。但我不确定这是否是正确的方法。

为什么 Mage_Sales_Model_Quote_Address 中的其他类不会计算两次?根据我的跟踪,它们实际上被调用了两次。什么是解决我的问题的正确方法?

先感谢您。

4

1 回答 1

0

看看@ Magento 为订单总额添加费用或折扣

于 2014-03-26T00:53:05.147 回答