Руководство по работе с Bitrix\Iblock\PropertyIndex\Storage

Внимание! Раздел находится в стадии разработки. Комментарии временно недоступны
Страницы: 1
RSS
Руководство по работе с Bitrix\Iblock\PropertyIndex\Storage
Руководство по работе с Bitrix\Iblock\PropertyIndex\Storage

Storage — это низкоуровневый класс ядра 1С-Битрикс, отвечающий за хранение и поддержку фасетного индекса свойств инфоблока. В статье мы разберём каждую возможность класса и покажем рабочие примеры кода, которые можно вставить в свои скрипты или модули.
Полностью перестроим фасетный индекс для указанного  инфоблока, корректно получая базовые цены товаров и обрабатывая числовые  свойства активных элементов.
Код
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

Bitrix\Main\Loader::includeModule('iblock');
Bitrix\Main\Loader::includeModule('catalog');

$iblockId = 1; // ID вашего инфоблока
$storage = new Bitrix\Iblock\PropertyIndex\Storage($iblockId);

// Пересоздаем индекс
if ($storage->isExists()) {
    $storage->drop();
}
$storage->create();

// Выбираем активные элементы
$elements = CIBlockElement::GetList(
    [],
    ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y'],
    false,
    false,
    ['ID', 'IBLOCK_SECTION_ID']
);

while ($element = $elements->Fetch()) {
    $elementId = (int)$element['ID'];
    $sectionId = (int)$element['IBLOCK_SECTION_ID'];

    // Индексируем базовую цену (правильный метод)
    $price = CPrice::GetList(
        array(),
        array(
            "PRODUCT_ID" => $elementId,
            "CATALOG_GROUP_ID" => 1 // ID базового типа цены
        )
    )->Fetch();
    
    if ($price && isset($price['PRICE'])) {
        $storage->queueIndexEntry(
            $sectionId,
            $elementId,
            $storage::priceIdToFacetId(1),
            0,
            (float)$price['PRICE'],
            true
        );
    }

    // Индексируем только числовые свойства
    $properties = CIBlockElement::GetProperty($iblockId, $elementId, [], []);
    while ($prop = $properties->Fetch()) {
        if ($prop['PROPERTY_TYPE'] === 'N' && !empty($prop['VALUE'])) {
            $storage->queueIndexEntry(
                $sectionId,
                $elementId,
                $storage::propertyIdToFacetId($prop['ID']),
                0,
                (float)$prop['VALUE'],
                true
            );
        }
    }
}

$storage->flushIndexEntries();
echo "Индекс перестроен для числовых свойств и цен";
Страницы: 1

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.