Памятка скорее для себя.
Не получилось разобраться в работе событий модуля каталога, но цепь событий сохранить, наверное, стоит - либо вернусь к этому вопросу позже, либо, надеюсь на ваши подсказки
Проблема: в корзину у неавторизованного пользователя в $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 включается только для корзин со скидками и только для авторизованных?