0

4 つの製品を含むグループ化された製品を正常に作成し、すべて正常に動作しています。ただし、アイテムの 1 つは無料アイテムであり、グループ化された製品を購入した場合にのみ使用できます。私の問題は、バスケットに行くときに、それを編集して一部のアイテムを削除できることです。誰かがバスケットからグループ化された製品を編集してメッセージを投げた場合、無料のアイテムを削除する方法はありますか?これは可能ですか?

私はMagento v1.3.2.4を使用しています

アップデート:

私はまだ問題を抱えています!Marius のアドバイスを使用して、FreePins というカスタム モジュールを作成し、app/etc/modules/ に次のコードを記述しました。

<?xml version="1.0"?>
<config>
    <modules>
        <test_FreePins>
            <active>true</active>
            <codePool>local</codePool>
        </test_FreePins>
    </modules>
</config>

app/code/local/test/FreePins/etc/config.xml に以下を作成して追加しました

    <?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <test_FreePins>
            <version>0.1.0</version>
        </test_FreePins>
    </modules>
    <global>
    </global>
    <frontend>
        <events>
                <sales_quote_remove_item>
                    <observers>
                        <test_FreePins>
                                <class>test_FreePins/observer</class>
                                <method>removeFreeItems</method>
                        </test_FreePins>
                    </observers>
                </sales_quote_remove_item>
        </events>
    </frontend>
</config>

最後に、app/code/local/test/FreePins/Model/Observer.php の Observer クラスに次のものがあります。

<?php

class test_FreePins {

    public function removeFreeItems($observer) {
        $quoteItem = $observer->getEvent()->getQuoteItem();
        $productId = $quoteItem->getProductId();

        print_r($productId);

        if($productId != 238 || $productId != 22 || $productId != 4) {
            return $this;
        }
    }

}

?>

一度追加したアイテムをバスケットから削除することはできないため、これが正しいかどうかは完全にはわかりません. モジュール構成のフロントエンド タグをコメント アウトすると、サイトは機能しますが、関数が実行されません。誰か助けてもらえますか?

4

2 に答える 2

0

イベントのオブザーバーを作成できますsales_quote_remove_item。そのチェックでは、削除されたアイテムがグループ化された製品の一部であるかどうかを確認します。その場合は、無料の製品も削除します。
このようなもの(モジュール名に置き換え[module]てください):モジュールのタグconfig.xml内にこれを追加します。<frontend>

<events>
    <sales_quote_remove_item>
       <observers>
           <[module]>
               <class>[module]/observer</class>
                   <method>removeFreeItems</method>
           </[module]
       </observers>
    </sales_quote_remove_item>
</events>

オブザーバー クラスに次のメソッドを追加します。

public function removeFreeItems($observer){
   $quoteItem = $observer->getEvent()->getQuoteItem();
   $productId = $quoteItem->getProductId();
   if (the $productId is not part of the grouped product){//add logic here
        return $this;//stop here
   }
   foreach ($quoteItem->getQuote()->getAllItems() as $item){
       if ($item is free){//add your logic here
           $item->isDeleted(true);
       }
    }
}
于 2013-09-24T09:16:55.517 に答える