7namespace Bitrix\Iblock\PropertyIndex;
9use Bitrix\Main\ModuleManager;
10use Bitrix\Main\Loader;
11use Bitrix\Main\Localization\Loc;
16 private static $catalog =
null;
18 private static $deferredIndexing = -1;
20 private static $elementQueue =
array();
22 private static $indexerInstances =
array();
34 if (self::$catalog ===
null)
41 $catalog = \CCatalogSKU::getInfoByOfferIBlock(
$iblockId);
42 if (!empty($catalog) && is_array($catalog))
44 return $catalog[
"PRODUCT_IBLOCK_ID"];
62 if (self::$catalog ===
null)
69 $catalog = \CCatalogSKU::getProductInfo($elementId,
$iblockId);
70 if (!empty($catalog) && is_array($catalog))
72 return $catalog[
"ID"];
93 if ($dictionary->isExists())
128 "PROPERTY_INDEX" =>
"I",
135 "PROPERTY_INDEX" =>
"I",
153 if (array_key_exists(
"USER_TYPE", $propertyNew))
157 if ($storageOld !== $storageNew)
180 'select' =>
array(
'ID'),
181 'filter' =>
array(
'=PROPERTY_INDEX' =>
'I'),
193 $notifyList = \CAdminNotify::getList(
array(),
array(
194 "TAG" =>
"iblock_property_reindex",
196 if (!$notifyList->fetch())
198 \CAdminNotify::add(
array(
199 "MESSAGE" => Loc::getMessage(
"IBLOCK_NOTIFY_PROPERTY_REINDEX",
array(
200 "#LINK#" =>
"/bitrix/admin/iblock_reindex.php?lang=".\
Bitrix\
Main\Application::getInstance()->getContext()->getLanguage(),
202 "TAG" =>
"iblock_property_reindex",
203 "MODULE_ID" =>
"iblock",
204 "ENABLE_CLOSE" =>
"Y",
205 "PUBLIC_SECTION" =>
"N",
211 \CAdminNotify::deleteByTag(
"iblock_property_reindex");
225 "PROPERTY_INDEX" =>
"N",
239 $elementId = (int)$elementId;
243 if ($indexer->isExists())
251 $indexer->deleteElement($elementId);
266 $elementId = (int)$elementId;
270 if (self::usedDeferredIndexing())
277 if ($indexer->isExists())
279 self::elementIndexing($indexer, $elementId);
292 self::$deferredIndexing++;
302 self::$deferredIndexing--;
312 return (self::$deferredIndexing >= 0);
328 if ($indexer->isExists())
333 self::elementIndexing($indexer, $elementId);
340 private static function pushToQueue(
$iblockId, $elementId)
342 if (!isset(self::$elementQueue[
$iblockId]))
344 self::$elementQueue[
$iblockId][$elementId] = $elementId;
349 $indexer->deleteElement($elementId);
353 FROM b_iblock_element BE
354 WHERE BE.ACTIVE = 'Y' AND BE.ID = ".$elementId.
355 \CIBlockElement::wf_getSqlLimit(
"BE.",
"N")
357 if ($elementCheck->fetch())
359 $indexer->indexElement($elementId);
static getPropertyStorageType($property)
static deleteElementIndex($iblockId, $elementId)
static checkAdminNotification($force=false)
static disableDeferredIndexing()
static markAsInvalid($iblockId)
static resolveIblock($iblockId)
static createIndexer($iblockId)
static dropIfExists($iblockId)
static deleteIndex($iblockId)
static updateElementIndex($iblockId, $elementId)
static onPropertyUpdate($iblockId, $propertyOld, $propertyNew)
static runDeferredIndexing($iblockId)
static resolveElement($iblockId, $elementId)
static enableDeferredIndexing()
static usedDeferredIndexing()
static getConnection($name="")
static includeModule($moduleName)
static isModuleInstalled($moduleName)
static getList(array $parameters=array())
static update($primary, array $data)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(empty($decryptedData)) $storage