Как запретить Magento удалять сгруппированные элементы

Я успешно создал сгруппированный продукт, содержащий 4 продукта, и все работает нормально. Однако один из предметов является бесплатным и доступен только при покупке сгруппированного продукта. Моя проблема в том, что при переходе в корзину я могу отредактировать ее и удалить некоторые элементы. Есть ли способ убрать бесплатный товар, если кто-то редактирует сгруппированный товар из корзины и кидает сообщение, такое возможно?

Я использую Magento v1.3.2.4.

ОБНОВЛЕНИЕ:

У меня все еще есть проблемы! Следуя совету Мариуса, я создал собственный модуль под названием 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>

Наконец, у меня есть следующее в моем классе Observer в app/code/local/test/FreePins/Model/Observer.php.

<?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;
        }
    }

}

?>

Я не совсем уверен, что это правильно, так как я не могу удалить элементы из своей корзины после добавления. Если я закомментирую теги Frontend в конфиге модуля, сайт работает, но моя функция не запускается, может кто помочь?


person JPK    schedule 24.09.2013    source источник


Ответы (2)


Вы можете создать наблюдателя для события 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);
       }
    }
}
person Marius    schedule 24.09.2013
comment
Спасибо за ответ Мариус. Я не совсем уверен, как сделать модуль, но я нашел это , поэтому, как только я его настрою, я попробую ваш код и отпишусь - person JPK; 24.09.2013

Вы можете сделать это, используя «Правило ценообразования в корзине покупок». Однако, если вы используете такой подход, товар будет отображаться с полной ценой в корзине, и будет применена скидка. Если вы можете жить с этим, вот как это сделать:

  1. Поскольку вы не можете передавать правила для идентификаторов продуктов, нам нужно создать новую скрытую категорию (категория, которая не используется в навигации или деактивирована), куда вы добавляете набор продуктов.
  2. Создайте еще одну скрытую категорию, в которую вы добавите предмет, который должен быть бесплатным.
  3. Создайте новое «Правило ценообразования для корзины покупок» без купона и с высоким приоритетом (0 — самый высокий)
  4. В качестве условия добавьте «Комбинация атрибутов продукта», а затем выберите «Атрибут продукта->Категория».
  5. В качестве категории используйте ранее созданную категорию с вашим пакетом
  6. На вкладке «Действия» выберите «Скидка в процентах от цены товара» и установите размер скидки «100».
  7. На той же вкладке в разделе «Применить правило только к элементам корзины, соответствующим следующим условиям (оставьте пустым для всех элементов)» снова выберите «Комбинация атрибутов продукта», а затем выберите «Атрибут продукта->Категория», но теперь выберите категорию с « бесплатный товар».
  8. Готово, как только вы добавите корзину в корзину, скидка будет применена и отображена.
person Justus Krapp    schedule 24.09.2013
comment
Спасибо за совет, Fantus, но я уже посмотрел на это и отказался от этого. - person JPK; 24.09.2013