1

ユーザーが同じ製品を 2 回以上 (フロントエンドだけでなくバックエンドでも) 追加することを防止したい一方で、必要な数のアイテムを注文することを制限したくありません。

たとえば、SKU ABCD123の商品がある場合、ユーザーがその商品をカートに 2 回追加しないようにするにはどうすればよいですか? 代わりに、ユーザーが一度追加することを許可し、代わりに注文数量を更新できるようにしますか?

私はこれを見ました マジェントで同じ製品をカートに複数回追加するのを防ぐ方法; ただし、提案された解決策は、カート内のアイテムの総数を制限するか、特定の在庫構成ですべての製品を更新することです。

カートのコードを変更して、これを別の方法で行う方法はありますか?

4

2 に答える 2

1

製品にカスタム オプションがあり、顧客が別のカスタム オプションを選択できる場合、この場合、製品の数量は更新されません。製品が単純な場合、顧客がカートに製品を追加するたびに数量が更新されます。

同じ SKU の商品がカートに入っているか、イベント オブザーバーを使用していないかを確認できます。

イベントを使用checkout_cart_product_add_beforeして、この商品がカートに既に存在するかどうかを確認できます。以下は、magento でさらにオブザーバーを作成する方法に関するコードのハイライトです。

設定ファイルは次のようになります

<config>
...
<frontend>
    ...
    <events>
        <checkout_cart_product_add_after>
            <observers>
                <unique_event_name>
                    <class>{{modulename}}/observer</class>
                    <method>CheckItem</method>
                </unique_event_name>
            </observers>
        </checkout_cart_product_add_after>
    </events>
    ...
</frontend>
...

そして、オブザーバーで、何かがカートに入っているかどうかをロジックで確認します

 class <namespace>_<modulename>_Model_Observer
{

        public function CheckItem(Varien_Event_Observer $obs)
        {
            // Get the quote item
            $item = $obs->getQuoteItem();
            //and put your logic here to match item with sku
        }

  }
于 2013-05-28T09:45:41.857 に答える
1

独自のモジュールがある場合はaddAction、CartControllerの を上書きしてみてください。

class MyModule_MyCheckout_CartController extends Mage_Checkout_CartController
{
    public function addAction()
    {
        // initialize product to add to cart
        $product = $this->_initProduct();

        $items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();

        foreach($items as $item) 
        {
            if($item->getSku() == $product->getSku()
            {
               //add the same item
               Mage::getSingleton('checkout/session')->getQuote()->addItem($item);
               // set a message in the session
               return $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl());
            }
        }

        parent::addAction();
    }
}

基本的に、商品が追加されたときにカートをループし、SKU が既に追加されていることがわかったときに戻ります。

では、config.xmlこのモジュールのルートを次のように上書きする必要があります。

//<global>-Context
<rewrite>   
   <mymodule_mycheckout_cart>
       <from><![CDATA[#^/checkout/cart/#]]></from>
       <to>/mycheckout/cart/</to>
   </mymodule_mycheckout_cart>
</rewrite>
于 2013-05-28T09:47:07.667 に答える