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

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

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

Т.к. в корзине в 1 шаг все блоки подгружаются ajax и для облегчения интеграции (исключаем работу в ТДС) их формирование идет в файле MegaPost_Command_Controller, который нельзя модифицировать, но можно использовать хуки (подробнее)
1
// хук для доступа к Shop_Cart_Controller_Show
2
class My_MegaPost
3
{
4
static public function onBeforeCartShow($controller, $args)
5
{
6
$Shop_Cart_Controller_Show = $args[0];
7
8
$Shop_Cart_Controller_Show
9
->itemsProperties(FALSE)
10
->checkStock(TRUE);
11
}
12
}
13
14
Core_Event::attach('MegaPost_Command_Controller.onBeforeCartShow', array('My_MegaPost', 'onBeforeCartShow'));
15
16
// хук для доступа к MegaPost_Shop_Delivery_Controller_Show
17
class My_MegaPost
18
{
19
static public function onBeforeDeliveryShow($controller, $args)
20
{
21
$Shop_Delivery_Controller_Show = $args[0];
22
23
$Shop_Delivery_Controller_Show
24
->shopDeliveries()
25
->queryBuilder()
26
->where('shop_deliveries.id','NOT IN', array(123))
27
->setOr()
28
->where('shop_deliveries.id','IN', array(456));
29
}
30
}
31
32
Core_Event::attach('MegaPost_Command_Controller.onBeforeDeliveryShow', array('My_MegaPost', 'onBeforeDeliveryShow'));
33
34
// хук для доступа к Shop_Payment_System_Controller_Show
35
class My_MegaPost
36
{
37
static public function onBeforePaymentSystemShow($controller, $args)
38
{
39
$Shop_Payment_System_Controller_Show = $args[0];
40
41
$Shop_Payment_System_Controller_Show
42
->shopPaymentSystems()
43
->queryBuilder()
44
->where('shop_payment_systems.id','NOT IN', array(123))
45
->setOr()
46
->where('shop_payment_systems.id','IN', array(456));
47
}
48
}
49
50
Core_Event::attach('MegaPost_Command_Controller.onBeforePaymentSystemShow', array('My_MegaPost', 'onBeforePaymentSystemShow'));

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

Указать для корзины для всего сайта без хуков и ТДС проверку остатка на складе, можно разместив в файле bootstrap.php следующий код
1
// Проверять остаток на складе при добавлении в корзину
2
$bCheckStock = TRUE;
3
4
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
5
$oShop_Cart_Controller->checkStock($bCheckStock);

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

Данный хук позволяет для каждого расчета, получить и изменить данные перед передачей в корзину или вовсе не выводить его (нужно вернуть FALSE)
1
class My_MegaPost
2
{
3
static public function onAfterHandlerObject($handler, $args)
4
{
5
list($object, $Megapost_Condition) = $args;
6
7
// доставка ID 1 && курьер && тариф
8
if($handler->shop_delivery_id == 1 && $objcet->type == 0 && $objcet->tariffId == 2)
9
{
10
$objcet->price = 0; // изменим цену
11
}
12
13
return NULL; // возвращает объект с данными расчета
14
// return FALSE; // не возвращает расчет
15
}
16
}
17
18
Core_Event::attach('Megapost_Handler.onAfterHandlerObject', array('My_MegaPost', 'onAfterHandlerObject'));