Magento - Как использовать правило цены корзины для отображения блока cms? - PullRequest
2 голосов
/ 27 сентября 2010

Я хотел бы использовать правило цены корзины покупок для отображения сообщения о перекрестной продаже, а не устанавливать скидку.

Например, если в корзине есть определенный товар, отобразите рекламное сообщение в области перекрестных продаж.

В частности, у нас есть куртка и брюки, которые можно приобрести отдельно. Но при покупке вместе клиент может сэкономить 50 долларов. Итак, если пиджак находится в корзине, я хотел бы получить сообщение с надписью «купи штаны и сэкономь 50 долларов» и наоборот. Уже действует правило предоставления скидки, когда оба товара находятся в корзине, поэтому я хотел бы обратить их внимание на скидку.

1 Ответ

1 голос
/ 28 сентября 2010

Создайте наблюдатель для controller_action_layout_generate_blocks_after, метод должен выглядеть примерно так:

Примечание: это основная идея, сложная часть заключается в разборе правила, возможно, его гораздо проще добавить в описание правилачто-то вроде: productSku: 123;productSku: 345 и проанализировать описание правила, чтобы увидеть, соответствует ли один из продуктов корзины правилу или нет.

public function addPromotionBlock($observer)
{
    $action = $observer->getEvent()->getAction();
    $layout = $observer->getEvent()->getLayout();

    if($action->getRequest()->getControllerName() == 'cart' && $action->getRequest()->getActionName() == 'index') {
        $addPromotion = false;

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

        $rules = Mage::getResourceModel('salesrule/rule_collection')
                    ->setValidationFilter(
                        Mage::app()->getStore($quote->getStoreId())->getWebsiteId(), 
                        $quote->getCustomerGroupId(), 
                        $quote->getCouponCode())
                    ->load();


        // see Mage_SalesRule_Model_Validator
        foreach ($items as $item) {
            //check if the rules applies  
            foreach ($rules as $rule) {
                var_dump($rule->toArray());
            }

             //let's say we found a valid rule
            $addPromotion = true; 
        }


        if ($addPromotion) {
            $crosssell = $layout->getBlock('checkout.cart.crosssell');
            if ($crosssell) {
                //set your template here
                $crosssell->setTemplate('checkout/promotion.phtml');
            }
        }
    }        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...