2013-04-05 98 views
0

我想更新購物車中商品的自定義選項。我有物品ID,所以我可以加載我的控制器中的項目。那就是我卡住的地方,我可以從購物車中移除物品,並添加一個新的更新選項,但那不是我想要的。Magento:以編程方式更新購物車中的商品自定義選項?

我想直接更新購物車中的現有商品。任何想法如何做到這一點?

謝謝!

+0

你可以粘貼你到目前爲止嘗試過的代碼嗎? – 2013-04-05 16:22:07

回答

0

我遇到了可配置產品的確切問題。

現在,我知道Magento在'編輯購物車項目'頁面上顯示可配置的產品選項,並且選項列表是在沒有預先選擇可配置屬性的情況下生成的。該屬性是由JavaScript,這需要產生的數據集由

<script type="text/javascript"> 
    var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>); 
</script> 

但它只能在「編輯車項目」頁面顯示選定的屬性。 如果我手動調用它,它不顯示當前的屬性選擇。

一些結帳模塊也顯示購物車覆蓋視圖中的選定屬性,因爲我知道 - 所以,有可能從Magento獲取這些數據(但我不確定它是直接從數據庫還是以更友好的方式)。

0

config.xml的部分

<events> 
    <checkout_cart_update_items_after> 
     <observers> 
      <update_items_specific_option> 
       <class>mycompany_checkout/observer</class> 
       <method>updateItemsSpecificOption</method> 
      </update_items_specific_option> 
     </observers> 
    </checkout_cart_update_items_after> 
</events> 

應用程序/代碼/本地/ MyCompany的/ Observer.php部分

<?php 

class MyCompany_Checkout_Model_Observer 
    extends Varien_Event_Observer 
{ 
    public function updateItemsSpecificOption($observer) 
    { 
     $event = $observer->getEvent(); 
     $cart = $event->getCart(); 
     $data = $event->getInfo(); 

     foreach ($data as $itemId => $itemInfo) { 
      $item = $cart->getQuote()->getItemById($itemId); 
      if (!$item) { 
       continue; 
      } 

      $optionData = $this->_getSpecificOptionDataFromItem($item); 
      if(!$optionData) { 
       continue; 
      } 

      $params = clone $item->getBuyRequest(); 
      $options = $params->getOptions() ? $params->getOptions() : array(); 

      $updateItem = false; 
      if($shouldIRemoveOption) { 
       unset($options[$optionData['option_id']]); 
       $updateItem = true; 
      } elseif($shouldIAddOption) { 
       $options[$optionData['option_id']] = array($optionData['value_id']); 
       $updateItem = true; 
      } 

      if($updateItem) { 
       $params->setOptions($options); 
       $cart->updateItem($itemId, $params); 
      } 
     } 
    } 

    protected function _getSpecificOptionDataFromItem($item) 
    { 
     foreach($item->getProduct()->getOptions() as $option) { 
      if($this->_isMyNeededOption($option)) { 
       foreach($option->getValues() as $valueId => $value) { 
        if($this->_isMyNeededValue($value)) { 
         return array(
          'option_id' => $option->getId(), 
          'value_id' => $valueId, 
          'price'  => $value->getPrice() 
         ); 
        } 
       } 
      } 
     } 

     return false; 
    } 
} 

我不知道到底要更改自定義選項,所以在這裏你有一個觀察員在購物車更新動作時會這樣做

相關問題