编辑一个项目后,引用项目选项会丢失

Mis*_*nta 5 magento magento-1.7

我希望有一个人可以帮助我...

目标是将产品分开放入购物车.因此,如果购物车中有2个具有相同ID的产品,则应该单独显示和处理它们,而不是作为具有数量2的一个产品/项目.

为此,我使用报价项目选项和事件.

事件:checkout_cart_product_add_after代码:

     $quoteItem->addOption(new Varien_Object(
       array(
            'product' => $quoteItem->getProduct(),
            'code' => 'unique_id',
           'value' => $uniqueId
      )
  ));
Run Code Online (Sandbox Code Playgroud)

我也尝试使用addional_options:

   $additionalOptions = array(
            array(
                'code'  => 'unique_id',
                'label' => 'Uniaue ID',
                'value' => $uniqueId
            )
        );
    $quoteItem->addOption(
            array(
                'code'  => 'additional_options',
                'value' => serialize($additionalOptions),
            )
        );
Run Code Online (Sandbox Code Playgroud)

在那之后 - 一切正常.选项显示在购物车中,它们存储在数据库中(sales_flat_quote_item_option),它们都有自己的item-id.

但是,如果我编辑一个产品并将其再次放入购物车 - 附加选项会丢失,它们将不再存在于数据库中...这会影响购物车中具有相同ID的所有产品...

如果有人可以帮助我,那将会很好......

小智 0

我遇到了同样的问题并使用了完全不同的方法。我为其创建了一个模块并在 config.xml 中添加了以下内容

<global>
    <models>            
        <sales>
            <rewrite>
                <!-- Model -->
                <quote>Companyname_Modulename_Model_Override_Mage_Sales_Model_Quote</quote>
            </rewrite>
        </sales>
...
Run Code Online (Sandbox Code Playgroud)

并创建了:

应用程序/代码/社区/公司名称/模块名称/模型/覆盖/法师/销售/模型/Quote.php

使用以下代码:(对原始 Magento 代码稍作编辑)

<?php
class Companyname_Modulename_Model_Override_Mage_Sales_Model_Quote extends Mage_Sales_Model_Quote
{
    /**
     * Adding catalog product object data to quote
     *
     * @param   Mage_Catalog_Model_Product $product
     * @return  Mage_Sales_Model_Quote_Item
     */
    protected function _addCatalogProduct(Mage_Catalog_Model_Product $product, $qty = 1)
    {
        $newItem = false;
        $item = $this->getItemByProduct($product);
        $item = false;
        if (!$item) {
            $item = Mage::getModel('sales/quote_item');
            $item->setQuote($this);
            if (Mage::app()->getStore()->isAdmin()) {
                $item->setStoreId($this->getStore()->getId());
            } else {
                $item->setStoreId(Mage::app()->getStore()->getId());
            }
            $newItem = true;
        }

        /**
         * We can't modify existing child items
         */
        if ($item->getId() && $product->getParentProductId()) {
            return $item;
        }

        $item->setOptions($product->getCustomOptions())
            ->setProduct($product);

        // Add only item that is not in quote already (there can be other new or already saved item
        if ($newItem) {
            $this->addItem($item);
        }

        return $item;
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,它会强制将每个产品单独添加到购物车中,如果您添加在购物车中添加每个产品的评论的选项,那么人们会添加具有不同评论的相同产品,这特别好。

我希望它对其他人有帮助:)