Принудительная деактивация на сайте разделов из iiko

Модуль расширенного управления меню для битрикс

Июль 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);
    }
}

См. также:

← Переход к списку