2013-09-24 10 views
0

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

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

UPDATE:

Я до сих пор возникают проблемы! Используя советы Marius', я создал пользовательский модуль, который называется FreePins с помощью следующего кода в приложение/и т.д./модули/

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

Я создал и добавил следующее в приложение/код/​​местные/тест/FreePins/и т.д. /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> 

Наконец, я следующий в моем классе по наблюдению в приложение/код/​​местные/тест/FreePins/Модель/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 в конфигурации модуля, сайт работает, но моя функция не запускается, может ли кто-нибудь помочь?

ответ

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); 
     } 
    } 
} 
+0

Спасибо за ваш ответ Marius. Я не совсем уверен, как сделать модуль, но я нашел [это] (http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_method), поэтому, как только я его установлю , Я дам ваш код попробовать и отправить обратно – JPK

0

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

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

Спасибо за совет Фантуса, но я уже посмотрел на это и решил не принимать его. – JPK