События (хуки) и др

https://www.hostcms.ru/documentation/modules/core/events/

1. Хуки для контроллеров корзины

Т.к. в корзине в 1 шаг все блоки подгружаются ajax и для облегчения интеграции (исключаем работу в ТДС) их формирование идет в файле MegaPost_Command_Controller, который нельзя модифицировать, но можно использовать хуки (подробнее)

// хук для доступа к Shop_Cart_Controller_Show
class My_MegaPost
{
    static public function onBeforeCartShow($controller, $args)
    {
        $Shop_Cart_Controller_Show = $args[0];
        
        $Shop_Cart_Controller_Show
            ->itemsProperties(FALSE)
            ->checkStock(TRUE);
    }
}

Core_Event::attach('MegaPost_Command_Controller.onBeforeCartShow', array('My_MegaPost', 'onBeforeCartShow'));

// хук для доступа к MegaPost_Shop_Delivery_Controller_Show
class My_MegaPost
{
    static public function onBeforeDeliveryShow($controller, $args)
    {
        $Shop_Delivery_Controller_Show = $args[0];
        
        $Shop_Delivery_Controller_Show
            ->shopDeliveries()
                ->queryBuilder()
                    ->where('shop_deliveries.id','NOT IN', array(123))
		    ->setOr()
		    ->where('shop_deliveries.id','IN', array(456));
    }
}

Core_Event::attach('MegaPost_Command_Controller.onBeforeDeliveryShow', array('My_MegaPost', 'onBeforeDeliveryShow'));

// хук для доступа к Shop_Payment_System_Controller_Show
class My_MegaPost
{
    static public function onBeforePaymentSystemShow($controller, $args)
    {
        $Shop_Payment_System_Controller_Show = $args[0];
        
        $Shop_Payment_System_Controller_Show
            ->shopPaymentSystems()
                ->queryBuilder()
                    ->where('shop_payment_systems.id','NOT IN', array(123))
		    ->setOr()
		    ->where('shop_payment_systems.id','IN', array(456));
    }
}

Core_Event::attach('MegaPost_Command_Controller.onBeforePaymentSystemShow', array('My_MegaPost', 'onBeforePaymentSystemShow'));

2. Остаток на складе

Указать для корзины для всего сайта без хуков и ТДС проверку остатка на складе, можно разместив в файле bootstrap.php следующий код

// Проверять остаток на складе при добавлении в корзину
$bCheckStock = TRUE;

$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller->checkStock($bCheckStock);

3. Изменение данных расчета доставок

Данный хук позволяет для каждого расчета, получить и изменить данные перед передачей в корзину или вовсе не выводить его (нужно вернуть FALSE)

class My_MegaPost
{
    static public function onAfterHandlerObject($handler, $args)
    {
        list($object, $Megapost_Condition) = $args;
        
        // доставка ID 1 && курьер && тариф
        if($handler->shop_delivery_id == 1 && $objcet->type == 0 && $objcet->tariffId == 2)
        {
            $objcet->price = 0; // изменим цену
        }
		
    	return NULL; // возвращает объект с данными расчета
    	// return FALSE; // не возвращает расчет
    }
}

Core_Event::attach('Megapost_Handler.onAfterHandlerObject', array('My_MegaPost', 'onAfterHandlerObject'));

Last updated