Создание фасетного индекса (агент)

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

Июль 11, 2024

Теги: Инфоблоки, Кеш

Агент создания фасетного индекса, если он не активен, требует, чтобы агенты выполнялись на кроне.

Функция агента "\Partner\IblockIndexer::index();"


<?php


namespace Partner;

use 
Bitrix\Main\Loader;

class 
IblockIndexer
{
    
/**
     * Агент создания фасетного индекса, если он не активен
     * Внимание: должно быть настроено выполнение агентов на cron
     * @return string
     */
    
public static function index()
    {
        if(
Loader::includeModule('iblock'))
        {
            
$iblockId 3;
            if(static::
checkInactive($iblockId))
                static::
run($iblockId);
        }
        return 
'\\'.__METHOD__.'();';
    }

    
/**
     * Проверяет, активен ли фасетный индекс
     * @param $iblockId
     * @return boolean
     */
    
public static function checkInactive($iblockId)
    {
        
$result \Bitrix\Iblock\IblockTable::getList(array(
            
'select' => ['ID''PROPERTY_INDEX'],
            
'filter' => ['=ID' => (int)$iblockId]
        ));
        if(
$iblock=$result->fetch())
        {
            return 
$iblock['PROPERTY_INDEX']!=='Y';
        }
        return 
false;
    }

    
/**
     * Запускает создание фасетного индекса
     * @param $iblockId
     */
    
public static function run($iblockId)
    {
        
$index \Bitrix\Iblock\PropertyIndex\Manager::createIndexer($iblockId);
        if(!
$index)
            return;
        
$index->startIndex();        
        
$index->setLastElementId(0);
        
$result $index->continueIndex(86400);
    
        
$index->endIndex();
        
        
\CBitrixComponent::clearComponentCache("bitrix:catalog.smart.filter");
        
\CIBlock::clearIblockTagCache($iblockId);
    }
}
Интеграция с iiko и rkeeper, готовый сайт ресторана

См. также:

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