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