Июль 28, 2023
Теги: События, Интеграция с iiko
Для модуля Интеграция с iiko. Принудительная деактивация разделов. При использовании данного кода при деактивации определенных разделов их активность не будет восстанавливаться после синхронизации блюд.
Требует создания свойства раздела "UF_FORCE_HIDE" типа "Да/Нет" с названием "Принудительно скрыть раздел (не восстанавливать активность при синхронизации)".
<?php
namespace Partner;
use \Bitrix\Main\Config\Option;
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'grain.iiko',
'OnAfterSyncSectionAsGroupUpdate',
'\Partner\SectionHide::onAfterSyncSectionAsGroupUpdate'
);
class SectionHide
{
public static function onAfterSyncSectionAsGroupUpdate(\Bitrix\Main\Event $event)
{
$restaurant = $event->getParameter('RESTAURANT'); // массив с данными ресторана
$fields = $event->getParameter('FIELDS'); // обновленные поля раздела
$id = $event->getParameter('ID'); // ID раздела
$group = $event->getParameter('GROUP'); // массив данных группы из api iiko
foreach ($event->getResults() as $eventResult) // получение данных после другого обработчика, если он был
{
if($eventResult->getType() == \Bitrix\Main\EventResult::ERROR)
continue;
}
if(!$id)
return;
if(intval($dishesIblockId=Option::get('grain.iiko','dishes_iblock_id_'.$restaurant['ID']))<=0)
return;
if(!$entity = \Bitrix\Iblock\Model\Section::compileEntityByIblock($dishesIblockId))
return;
$resultSection = $entity::getList(array(
'filter' => array(
'IBLOCK_ID' => $dishesIblockId,
'=ID' => $id,
),
'select' => array(
'ID',
'IBLOCK_ID',
'ACTIVE',
'UF_FORCE_HIDE',
),
'limit' => 1,
));
if(!$section=$resultSection->fetch())
return;
if(!$section['UF_FORCE_HIDE'] || $section['ACTIVE']!='Y')
return;
//\Bitrix\Iblock\SectionTable::update($id,array('ACTIVE'=>'N'));
$obSection = new \CIBlockSection;
$obSection->Update($id,array('ACTIVE'=>'N'),true,true,true);
}
}