Правила покупательской корзины с пользовательскими условиями?
Я сделал купон [coupon_code = SWIMFREE], если category
является swimming equipment
а также hobby
является swimming
будет скидка на 50%.
и теперь у меня проблема с 3 шагами оформления заказа. Вот описание...
- Оформить заказ Корзина: применить к купону
- Первый шаг: адрес доставки и выставления счета
- Второй шаг: выберите свое хобби (есть еще
sales_flat_quote table
,sales_flat_quote_hobby
) - Последний шаг: Оформить заказ-> Обзор
Что я хотел, так это: когда купон применен, а хобби плавает, третий шаг - изменение цены, чтобы оценить каждый товар, и купон все еще будет отображаться там.
Как перехватить купон после шага хобби?
Пример случая пошагово:
1. В корзину уже добавлено
- Обычная цена купального костюма составляет 100$ (категория плавательного снаряжения)
- Обычная цена кевлара - 50$ (Категория Стрелкового Оборудования)
- Применен купон SWIMFREE, общая сумма 100$ (из-за условия купона)
2. На этапе доставки и выставления счета
- Адрес доставки и выставления счета - Далее
3. На шаге хобби
- Футбольное хобби проверено (переключатель) и подтверждено
4. На этапе обзора, затем
- Цена купального костюма 50$ (категория плавательного снаряжения)
- Цена кевлара - 50$ (категория стрелкового оборудования)
- Купон применен SWIMFREE, Grand Total сейчас составляет 150$ (потому что хобби не плавание)
у меня много продуктов, я пытался добавить новые атрибуты, но это не связано с атрибутом, потому что он включен sales_flat_quote_hobby
Я пытался изменить Sales/Model/Quote/Subtotal.php
устанавливать все цены товара на корзину, но это кажется бесполезным.
3 ответа
уже нашел ответ сам:
Можно создать индивидуальное условие купона.
переписать Mage_SalesRule_Model_Rule_Condition_Product
public function validate(Varien_Object $object){
if ($this->getAttribute() == 'quote_item_with_hobby') {
$quote = Mage::getSingleton('checkout/cart')->getQuote();
$hobby= $quote->getHobbyByItemId($object->getId());
if ($hobby){
if ($this->getOperator() == '=='){
if (strtolower($this->getValue()) == $hobby->getHobby()) return true;
else return false;
}
else if ($this->getOperator() == '!='){
if (strtolower($this->getValue()) == $hobby->getHobby()) return false;
else return true;
}
}
return true;
}
return parent::validate($object);
}
эта функция будет вызываться при каждом шаге загрузки. затем проверяется, вернет ли значение true, тогда купон будет применен, если возвращен false, то купон не будет применен.
Спасибо всем, кто принял участие. я ценю его.
Вы должны реализовать свой собственный коллектор для сбора итогов. Это может быть основано на Mage_SalesRule_Model_Quote_Discount
,
Как создавать собственные коллекторы: см. Ответ stackru или вы можете проверить эту статью.
Да, это была бы моя идея.
Вы реализуете новое условие продаж, которое дает скидку 50%.
Продавцы призваны для каждого продукта. тогда вам нужно проверить, является ли атрибут плавающим, и хобби установлено. Если это так, вы можете скопировать остальные из%-salesrule
Вы найдете код для просмотра в Mage_SalesRule_Model_Validator::process()
Пример для самореализуемого условия можно найти здесь: https://github.com/magento-hackathon/DiscountForATweet/blob/master/app/code/community/Hackathon/DiscountForATweet/Model/Condition/Tweet.php