【问题标题】:Quote Item option get lost after editing one item编辑一个项目后,报价项目选项丢失
【发布时间】:2013-07-21 14:49:52
【问题描述】:

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

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

为了实现这一点,我使用引用项目选项和事件。

事件:checkout_cart_product_add_after 代码:

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

我也尝试过使用addional_options:

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

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

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

如果有人可以帮助我,那就太好了……

【问题讨论】:

  • 提问非常有帮助——通常正是这个时候,我自己找到了解决方案……所以——为了你的兴趣:解决方案是使用事件:catalog_product_type_prepare_full_options $product-> addCustomOption('unique_id', $uniqueId);
  • 请添加为答案,对他人有用

标签: magento magento-1.7


【解决方案1】:

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

<global>
    <models>            
        <sales>
            <rewrite>
                <!-- Model -->
                <quote>Companyname_Modulename_Model_Override_Mage_Sales_Model_Quote</quote>
            </rewrite>
        </sales>
...

并创建:

app/code/community/Companyname/Modulename/Model/Override/Mage/Sales/Model/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;
    }
}

这样,它会强制将每个产品单独添加到购物车中,如果您添加了将每个产品的 cmets 放入购物车的选项,那么人们会添加具有不同 cmets 的相同产品。

我希望它可以帮助别人:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多