Значения спискового свойства инфоблока в 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 дней гарантии