Заполнить инфоблок брендов из свойства инфоблока с товарами

Просмотров: 366

Задача: в интернет-магазине есть инфоблок с товарами, загружаемый из 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 для добавления этих элементов в инфоблок.
Михаил Базаров 10.07.2024
Вариант на D7
Код
use Bitrix\Main\Loader;
use Bitrix\Iblock\IblockTable;
use Bitrix\Iblock\PropertyEnumerationTable;
use Bitrix\Iblock\Elements\ElementTable;
use Bitrix\Main\Type\Dictionary;
use Bitrix\Main\Text\Converter;
use Bitrix\Main\Text\Translit;

Loader::includeModule('iblock');

$arTrans = array("replace_space" => "-", "replace_other" => "-");

// Получаем инфоблок производителей по ID
$iblockIdCatalog = 10;
$iblockIdManufacturers = 7;

// Получаем значения свойства "CML2_MANUFACTURER" инфоблока каталога
$propertyEnums = PropertyEnumerationTable::getList([
    'select' => ['ID', 'VALUE'],
    'filter' => [
        'IBLOCK_ID' => $iblockIdCatalog,
        'PROPERTY.CODE' => 'CML2_MANUFACTURER'
    ],
    'order' => ['VALUE' => 'ASC']
]);

while ($enumFields = $propertyEnums->fetch()) {
    $translitCode = Translit::convert($enumFields['VALUE'], 'ru', $arTrans);

    // Создаем новый элемент в инфоблоке производителей
    $result = ElementTable::add([
        'IBLOCK_ID' => $iblockIdManufacturers,
        'NAME' => strip_tags($enumFields['VALUE']),
        'ACTIVE' => 'Y',
        'CODE' => $translitCode,
    ]);

    if (!$result->isSuccess()) {
        $errors = $result->getErrorMessages();
        // Обработка ошибок
    }
}

Блог-note: заметки разработчика

Основные функции вывода в шаблонах Битрикс

Знаю, что все их знают. Но иногда не бывает лишним собрать все самое используемое в одну кучку. Ведь у каждого бывают мо...

Input Type File, множественный с дропзоной и показом превью

Задача: Сделать возможность загрузки файлов в множественный input type="file" c помощью drag&drop и показом превью загру...

Увидеть файл заказов который передаст Битрикс в 1С

Для диагностики обмена заказов, интернет-магазина на 1С Битрикс с 1С Управление Торговлей, нужно увидеть xml файл с зака...

Работа с HTTP-запросами в Bitrix: Обзор возможностей класса \Bitrix\Main\HttpRequest

Класс \Bitrix\Main\HttpRequest, является наследником класса Request, представляет собой мощный инструмент для работы с д...

AJAX корзина с отправкой количества из раздела каталога

Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При этом, у пользователя должна б...

Вывести артикул в печатную форму бланка заказа

Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе.

Ajax форма обратной связи, реализация в битрикс

Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в инфоблок. Способов реализации...

Получить и вывести все цены товара в 1С-Битрикс

Задача: получить и вывести все цены товара по его ID в каталоге 1С-Битрикс (например, в детальной карточке catalog.e...

Сортировка элементов по индексу сортировки значений типа список

Внутри любого компонента есть заранее заложенные поля для сортировки элементов. Можно сортировать элементы в разных напр...