2013-04-05 69 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; 
    } 
} 

我不知道到底要更改自定义选项,所以在这里你有一个观察员在购物车更新动作时会这样做

相关问题