Задача: в интернет-магазине есть инфоблок с товарами, загружаемый из 1С, у которого заполнено свойство "Производитель" и оно является списком. Нужно заполнить отдельный инфоблок этими производителями, чтобы не наполнять его вручную.
Это может пригодиться для реализации другой заметки: Вывести товары бренда в его описании
Получаем значения множественного свойства "Список"
Для этого нам достаточно воспользоваться методом CIBlockPropertyEnum::GetList, который по коду свойства получит все его значения (впрочем, и остальную информацию получит, но нас интересует только VALUE)
use Bitrix\Main\Loader;
Loader::includeModule('iblock');
$arTrans = array("replace_space" => "-", "replace_other" => "-");
$el = new CIBlockElement;
$property_enums = CIBlockPropertyEnum::GetList(
array(
"VALUE" => "ASC",
),
array(
"IBLOCK_ID" => 10, // ID инфоблока каталога
"CODE" => "CML2_MANUFACTURER"
)
);
while ($enum_fields = $property_enums->GetNext()) {
$arFields = array(
"IBLOCK_ID" => 7, // ID инфоблока производителей
"NAME" => strip_tags($enum_fields['VALUE']),
'ACTIVE' => 'Y',
'CODE' => Cutil::translit($enum_fields['VALUE'], "ru", $arTrans),
);
$NewElementId = $el->Add($arFields);
}
Объяснение кода:
- Подключаем модуль информационных блоков (iblock), чтобы иметь возможность работать с ними.
- Задаем параметры для транслитерации, чтобы использовать их для создания символьных кодов.
- Создаем экземпляр класса CIBlockElement, который будет использоваться для добавления новых элементов в инфоблок.
- Получаем все значения свойства "Производитель" из инфоблока с товарами, отсортированные по значению.
- Проходим по всем значениям, полученным на предыдущем шаге, и добавляем их в инфоблок производителей.
Что происходит в коде:
Модуль iblock загружается для работы с информационными блоками.
Настраиваются параметры транслитерации для создания символьных кодов.
Создается экземпляр класса CIBlockElement для добавления элементов в инфоблок.
Метод CIBlockPropertyEnum::GetList используется для получения всех значений свойства "Производитель" из инфоблока с товарами.
В цикле while происходит проход по всем значениям свойства "Производитель":
- Создаются массивы данных для новых элементов в инфоблоке производителей.
- Используется метод Add для добавления этих элементов в инфоблок.