Magento:以编程方式更新购物车中的项目自定义选项?

Magento:以编程方式更新购物车中的项目自定义选项?,magento,shopping-cart,Magento,Shopping Cart,我想从购物车中的项目更新自定义选项。我有项目id,因此可以在控制器中加载项目。这就是我被卡住的地方,我可以从购物车中移除物品,并添加一个带有更新选项的新物品,但这不是我想要的 我想直接更新购物车中的现有项目。有什么办法吗 谢谢 我在配置产品方面遇到了确切的问题 现在,我知道Magento在“编辑购物车项目”页面上显示可配置的产品选项,选项列表是在不预先选择可配置属性的情况下生成的。该属性由javascript设置,它获取由 <script type="text/javascript"&g

我想从购物车中的项目更新自定义选项。我有项目id,因此可以在控制器中加载项目。这就是我被卡住的地方,我可以从购物车中移除物品,并添加一个带有更新选项的新物品,但这不是我想要的

我想直接更新购物车中的现有项目。有什么办法吗


谢谢

我在配置产品方面遇到了确切的问题

现在,我知道Magento在“编辑购物车项目”页面上显示可配置的产品选项,选项列表是在不预先选择可配置属性的情况下生成的。该属性由javascript设置,它获取由

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

var spConfig=new Product.Config();
但它仅在“编辑购物车项目”页面上显示所选属性。 如果我手动调用它,它不会显示当前属性选择

据我所知,一些签出模块也会在cart Overview中显示选定的属性,因此,可以从Magento获取该数据(但我不确定是直接从DB获取的还是以更友好的方式获取的)。

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\u结帐/观察员
UpdateItemsSpecification复制
app/code/local/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;
    }
}

你能粘贴到目前为止你尝试过的代码吗?