Задача – определять поля торгового каталога CAN_BUY_ZERO и QUANTITY_TRACE в определенные значения при обновлении элемента торгового каталога. Используем обработку событий в init.php и низкоуровневые события D7.
Оставлю здесь. Может быть кому-то пригодится в решении своей задачи, и себе на будущее.
Решение рекомендовано технической поддержкой Битрикса. Ниже предоставлю варианты решений из обращения. Немного модифицировали правда.
Оставлю здесь. Может быть кому-то пригодится в решении своей задачи, и себе на будущее.
Решение рекомендовано технической поддержкой Битрикса. Ниже предоставлю варианты решений из обращения. Немного модифицировали правда.
Код |
---|
$bxEventManager = \Bitrix\Main\EventManager::getInstance(); $bxEventManager->addEventHandler( 'catalog', '\Bitrix\Catalog\Product::OnBeforeUpdate', [ CatalogEvents::class, "OnBeforeUpdate" ] ); class CatalogEvents { public static function OnBeforeUpdate(Entity\Event $event) { $result = new Entity\EventResult; $data = $event->getParameter("fields"); $element_id = $event->getParameter("id")['ID']; if ($element_id) { Cmodule::IncludeModule('iblock'); $res = CIBlockElement::GetByID($element_id); if ($ar_res = $res->GetNext()) { if ($ar_res["IBLOCK_ID"] == $IBLOCK_ID) { if (isset($data['CAN_BUY_ZERO']) && isset($data['QUANTITY_TRACE'])) { $result->modifyFields(array('CAN_BUY_ZERO' => "Y", 'QUANTITY_TRACE' => "N")); } } } } return $result; } } |
Цитата |
---|
Попробуйте, пожалуйста, использовать решение, описанное в статье: Вместо события OnBeforeProductUpdate вы можете использовать низкоуровневое событие \Bitrix\Catalog\Model\Product::OnBeforeUpdate Пример описан в документации: Это низкоуровневое событие, как работать с данными событиями найдёте здесь: |