2013-01-14 104 views
3

我有一個網上商店出售葡萄酒和瓶子出售。然而,我只能在任何SKU組合中以6,6,12,18,24等等的倍數出貨。Magento購物車的最低數量

我試過配置 - >庫存 - >「購物車中允許的最小數量」它適用於單個產品,但不適用於結帳時的總數量。

有沒有辦法(通過分機,代碼或管理員)在檢出期間配置規則,使總數量與不同SKU無關,必須是6的倍數?

回答

0

afaik不,但它應該很容易做到。

寫一個偵聽controller_action_predispatch_checkout_onepage_index請檢查是否量的觀察者是6的倍數,如果不添加一個錯誤並重定向到購物車

你可以想想在controller_action_predispatch_checkout_cart_index檢查它也顯示在一個警告購物車頁面,也許灰色的按鈕。

0

您可以創建一個自定義模塊或您的onepage結帳的登錄頁面上做

if(Mage::helper('checkout/cart')->getCart()->getItemsCount() % 6 != 0){ 
    Mage::getSingleton('customer/session')->addError('Item in your cart must be multiple of 6'); 
    $url = Mage::getUrl('checkout/cart') 
    Mage::app()->getFrontController()->getResponse()->setRedirect($url, 301); 
} 
0

而其他的答案了,也許最好的方法是檢查在報價保存,所以如果客戶調整量在他們的車會輪到他們,他們會看到並理解變化。顧客在購買他們不知道他們購買的東西時發出的憤怒電話並不好玩。

就是說,我們可以掛入sales_quote_save_before事件來做我們的檢查並相應地調整數量。

Observer.php

<?php 

class Yrcrz_WineQty_Model_Observer 
{ 
    public function sales_quote_save_before(Varien_Event_Observer $observer) 
    { 
     $quote = $observer->getQuote(); 
     $items = $quote->getAllItems(); 
     $message = false; 
     foreach ($items as $item) { 
      $qty = $item->getQty(); 
      if ($qty % 6 != 0) { 
       if ($qty <= 3) { 
        $newQty = 6; 
       } else { 
        $newQty = round($qty/6) * 6; 
        $item->setQty($newQty); 
        if (!$message) { 
         $message = Mage::helper('core')->__('Product quantities have been adjusted for case sizes'); 
         Mage::getSingleton('core/session')->addNotice($message); 
        } 
       } 
      } 
     } 
    } 
} 

我們首先得到所有我們的項目,看看是否量在6增量,並隨後進行相應的調整量。我們甚至可以輸出通知,以便客戶瞭解這種微妙的變化。

config.xml中

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Yrcrz_WineQty> 
      <version>0.0.1</version> 
     </Yrcrz_WineQty> 
    </modules> 
    <global> 
     <events> 
      <sales_quote_save_before> 
       <observers> 
        <Yrcrz_WineQty_Observer> 
         <type>singleton</type> 
         <class>Yrcrz_WineQty_Model_Observer</class> 
         <method>sales_quote_save_before</method> 
        </Yrcrz_WineQty_Observer> 
       </observers> 
      </sales_quote_save_before> 
     </events> 
    </global> 
</config>