Памятка скорее для себя.
Не получилось разобраться в работе событий модуля каталога, но цепь событий сохранить, наверное, стоит - либо вернусь к этому вопросу позже, либо, надеюсь на ваши подсказки
Проблема: в корзину у неавторизованного пользователя в $arResult отсутствуют ключи ["GRID"]["ROWS"][0]["CATALOG"].
Было установлено, что добавляется ["CATALOG"] в обработке события "OnExtendBasketItems" в файле:
/bitrix/modules/catalog/general/discount.php
CAllCatalogDiscount::ExtendBasketItems();
Регистрация на событие в файле:
/bitrix/modules/catalog/install/index.php
RegisterModuleDependences("sale", "OnExtendBasketItems", "catalog", "CCatalogDiscount", "ExtendBasketItems", 100);
Запуск события в файле:
/bitrix/modules/sale/general/discount.php
ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend));
На сколько я понял, событие не запускается, т.к. у неавторизованного нет скидок (пустой $arIDS):
Может, кто-нибудь знает, почему так сделано - ключ CATALOG включается только для корзин со скидками и только для авторизованных?
Не получилось разобраться в работе событий модуля каталога, но цепь событий сохранить, наверное, стоит - либо вернусь к этому вопросу позже, либо, надеюсь на ваши подсказки
Проблема: в корзину у неавторизованного пользователя в $arResult отсутствуют ключи ["GRID"]["ROWS"][0]["CATALOG"].
Было установлено, что добавляется ["CATALOG"] в обработке события "OnExtendBasketItems" в файле:
/bitrix/modules/catalog/general/discount.php
CAllCatalogDiscount::ExtendBasketItems();
Регистрация на событие в файле:
/bitrix/modules/catalog/install/index.php
RegisterModuleDependences("sale", "OnExtendBasketItems", "catalog", "CCatalogDiscount", "ExtendBasketItems", 100);
Запуск события в файле:
/bitrix/modules/sale/general/discount.php
ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend));
На сколько я понял, событие не запускается, т.к. у неавторизованного нет скидок (пустой $arIDS):
$arIDS = array();
$groupDiscountIterator = Internals\DiscountGroupTable::getList(array(
'select' => array('DISCOUNT_ID'),
'filter' => array('@GROUP_ID' => CUser::GetUserGroup($arOrder['USER_ID']), '=ACTIVE' => 'Y')
));
while ($groupDiscount = $groupDiscountIterator->fetch())
{
$groupDiscount['DISCOUNT_ID'] = (int)$groupDiscount['DISCOUNT_ID'];
if ($groupDiscount['DISCOUNT_ID'] > 0)
$arIDS[$groupDiscount['DISCOUNT_ID']] = true;
}
if (!empty($arIDS))
{
$arIDS = array_keys($arIDS);
$couponList = DiscountCouponsManager::getForApply(array('MODULE' => 'sale', 'DISCOUNT_ID' => $arIDS), array(), true);
$arExtend = array(
'catalog' => array(
'fields' => true,
'props' => true,
),
);
foreach (GetModuleEvents('sale', 'OnExtendBasketItems', true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, array(&$arOrder['BASKET_ITEMS'], $arExtend));
}
|
Может, кто-нибудь знает, почему так сделано - ключ CATALOG включается только для корзин со скидками и только для авторизованных?