Yandex Metrika
sanches.free

Значения спискового свойства инфоблока в D7 через PropertyEnumerationTable

Что именно считают «перечнем» инфоблока

Свойства с типом List хранят варианты в отдельной табличной модели фиксированного вида «строки перечня». Связь с свойствем — через PROPERTY_ID, а ключевые столбцы — ID (то, что пишется в значение свойства элемента) и XML_ID (ключ для обменов и интеграций).

Ссылки на таблицы

\Bitrix\Iblock\PropertyEnumerationTable для значений списков и выбор свойств фильтром =PROPERTY_TYPE = 'L' через PropertyTable.

Выбор всех строк перечня

use Bitrix\Iblock\PropertyEnumerationTable;

$facetCursor = PropertyEnumerationTable::getList([
    'filter' => ['PROPERTY_ID' => 10],
    'select' => ['ID', 'VALUE', 'XML_ID', 'DEF', 'SORT'],
]);
while ($slot = $facetCursor->fetch()) {
    // использовать $slot без прямых SQL-котировок строк
}

Карты по всем спискам инфоблока

Две зеркальные таблицы: по символу свойства кодам xml_id -> id и id -> xml_id ускоряют нормализацию входящего фида, где авторы смешивают текст и внешние коды в разных столбцах файла импорта.

use Bitrix\Iblock\PropertyTable;
use Bitrix\Iblock\PropertyEnumerationTable;

$iblockPivot = 8;
$xmlToIdPulse = [];
$idToXmlPulse = [];

$listShape = PropertyTable::getList([
    'filter' => ['IBLOCK_ID' => $iblockPivot, '=PROPERTY_TYPE' => 'L'],
    'select' => ['ID', 'CODE'],
]);
while ($propRibbon = $listShape->fetch()) {
    $codeKey = $propRibbon['CODE'];
    $xmlToIdPulse[$codeKey] = [];
    $idToXmlPulse[$codeKey] = [];
    $facetCursor = PropertyEnumerationTable::getList([
        'filter' => ['PROPERTY_ID' => $propRibbon['ID']],
        'select' => ['ID', 'XML_ID'],
    ]);
    while ($slot = $facetCursor->fetch()) {
        $xmlToIdPulse[$codeKey][$slot['XML_ID']] = (int) $slot['ID'];
        $idToXmlPulse[$codeKey][(int) $slot['ID']] = $slot['XML_ID'];
    }
}

Не кешируйте подобную карту вечным тегированным объектом без сбросов при сохранении перечней: свойства редакторы меняют реже элементов каталога, но рассогласование даёт долгую отладку.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии