2012-05-26 85 views
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> 

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

那么如何改变总数的顺序呢?为什么当我将“之后”设置为“运送”之外的结果时,结果如此奇怪?我误解了这两个配置元素的功能吗?

回答

2

上面的XML代码段是总收集器在后端触发的顺序。前端订单被控制在不同的地方。从/ 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文件<totals_sort>下添加<my_discount>作为一个节点,你喜欢,你可以将其插入。