我打算制作一个自定义信用模块,可以使用我们商店的信用折扣。在查看一些示例后,我成功地向单页结帐添加了结帐步骤。然后我扩展了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中的其他类不会计算两次?根据我的追踪,它们实际上被调用了两次。什么是正确的方法来解决我的问题?
提前谢谢。