5

誰かが私を助けてくれることを願っています...

目標は、製品をカートに分割することです。そのため、同じ ID を持つ 2 つの製品がカートに入っている場合、数量が 2 の 1 つの製品/アイテムとしてではなく、別々に表示および処理する必要があります。

これを実現するために、見積もりアイテムのオプションとイベントを使用します。

イベント: 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 を持っています。

しかし、1 つの製品を編集して再度カートに入れると、追加のオプションが失われ、データベースに存在しなくなります...これは、カート内の同じ ID を持つすべての製品に影響します...

誰かが私を助けてくれるなら、それは素晴らしいことです...

4

1 に答える 1

0

私は彼らに同じ問題を抱えていて、まったく異なるアプローチを使用しました。そのためのモジュールを作成し、config.xml に以下を追加しました。

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

そして作成しました:

アプリ/コード/コミュニティ/会社名/モジュール名/モデル/オーバーライド/メイジ/セールス/モデル/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;
    }
}

このようにして、すべての製品がカートに個別に追加されるように強制します。カートに製品ごとにコメントを配置するオプションを追加すると、人々は同じ製品を異なるコメントで追加する場合に特に便利です.

私はそれが他の誰かを助けることを願っています:)

于 2015-02-05T09:59:14.340 に答える