我创建了一个自定义总计收集器,以便为合格客户提供购物车小计的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的计算。也许有人可以向我解释。
那么如何更改总计的顺序呢?当我将“之后”设置为“运输”以外的任何其他内容时,为什么结果如此奇怪?我误解了这两个配置元素的功能吗?
答案 0 :(得分:2)
上面的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>
下的节点,则可以将其插入到您喜欢的位置。