2013-02-13 127 views
2

我嘗試添加額外的產品到購物車。我爲此創建了一個觀察者。將多餘的產品添加到購物車(觀察員)

<?php 
class WP_Plugadapter_Model_Observer 
{ 

    public function hookToControllerActionPostDispatch($observer) 
    { 
     if($observer->getEvent()->getControllerAction()->getFullActionName() == 'checkout_cart_add') 
     { 
      Mage::dispatchEvent("add_to_cart_after", array('request' => $observer->getControllerAction()->getRequest())); 
     } 
    } 

    public function hookToAddToCartAfter($observer) 
    { 

     $request    = $observer->getEvent()->getRequest()->getParams(); 
     $_product    = Mage::getModel('catalog/product')->load($request['product']); 
     $extra_functions  = $_product->getExtra_functions(); 

     if(!empty($extra_functions)){ 

      $extra_functions = explode(',', $extra_functions); 
      if(array_search('121', $extra_functions)){ 

       $cart   = Mage::getSingleton('checkout/cart'); 
       $cart->addProduct(10934, 1); 
       $cart->save(); 

       if (!$cart->getQuote()->getHasError()){ 
        Mage::log("Product ADD TO CART is added to cart."); 
       }else{ 
        Mage::log("BOEM"); 
       } 

      } 

     } 

    } 

} 

當我檢查我的系統日誌時,我看到以下日誌消息。 產品已加入購物車添加到購物車。

我不知道我做錯了什麼。當加載腳本獨立它工作正常。 例如:

<?php 

include_once '../app/Mage.php'; 

Mage::app(); 
umask(0); 

$session  = Mage::getSingleton('core/session', array('name'=>'frontend'));   
$cart   = Mage::getSingleton('checkout/cart'); 
$cart->addProduct(10934, 1); 
$cart->save(); 

是否有可能在一個觀察者,你把它做它用不同的方式?

+0

日誌消息是不是表示一切都確實正常?當購物車沒有錯誤時記錄它。 – 2013-02-13 15:44:51

+0

是的。但沒有任何反應:(。 – Lexperts 2013-02-13 15:50:51

回答

5

問題在於購物車的報價對象沒有保存到數據庫,後來在請求處理中被來自會話的報價對象覆蓋。爲什麼購物車報價沒有保存是相當混亂的。報價模型的save方法預計內部屬性_hasDataChanges設置爲true。但是,即使產品已添加到報價中,該屬性仍然爲false

您可以強制該屬性通過使用setData方法添加一些數據(任何財產會做)的報價被設置爲

   $cart = Mage::getSingleton('checkout/cart'); 
       $cart->addProduct(10934, 1); 
       //force _hasDataChanges to true 
       $cart->getQuote()->setData('updated', true); 
       $cart->save(); 

或者您可以使用結賬會話引用對象將產品添加到購物車

if(array_search('121', $extra_functions)){ 

      $cart   = Mage::getSingleton('checkout/cart'); 
      $qty = 1; 
      $quote = Mage::getSingleton('checkout/session')->getQuote() 
       ->addProduct(
        Mage::getModel('catalog/product')->load(10934), 
        $qty) 
       ->save(); 
      $cart->save(); 

      if (!$cart->getQuote()->getHasError()){ 
       Mage::log("Product ADD TO CART is added to cart."); 
      }else{ 
       Mage::log("BOEM"); 
      } 

     } 
+0

感謝您的好信息:)。它的工作。 – Lexperts 2013-02-14 08:23:35

相關問題