2012-05-26 159 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>作爲一個節點,你喜歡,你可以將其插入。