Инструкция и приведенные в ней фрагменты кода приведены для сайтов, установленных не в режиме многосайтовости. Если вам необходимо настроить выгрузку брендов из 1С для интернет-магазина с многосайтовостью, необходимо заказать индивидуальную доработку проекта.
Важно! Инструкция предназначена для пользователей с уровнем знания PHP не ниже среднего. Если вы не владеете достаточными для этого знаниями и навыками, стоит заказать индивидуальную доработку решения. Статья в том числе актуальна для сайтов, обновленных до версии PHP 8.1.
Если вы хотите, чтобы бренды выгружались из 1С и автоматически синхронизировались с системой, необходимо отредактировать файл init.php, который находится в папке /bitrix/php_interface. Если файл отсутствует, создайте его и загрузите в указанную папку, а затем отредактируйте содержимое файла, прописав в нем фрагмент кода. Этот код позволит синхронизировать свойство загружаемого из 1С со свойством BRAND у решения.
Внимание! При проведении работ с настройками инфоблока запрещается удалять служебное свойство BRAND. В противном случае корректная работа функционала будет нарушена.
Если выгрузка из 1С производится в новый инфоблок, необходимо создать это свойство вручную, сохранив соответствующие настройки (см. скриншот выше). После создания свойства перейдите в его настройки, чтобы привязать свойство BRAND к нужному инфоблоку.
Настоятельно рекомендуем вносить изменения через ftp и ни в коем случае не создавать файл init.php в структуре сайта инструментами 1С-Битрикс. Некорректный ввод или кастомизация кода приведет к полной потере работоспособности сайта. Прежде чем кастомизировать решение, обязательно проведите резервное копирование.
<?php// поместить этот скрипт в init.php
AddEventHandler("iblock", "OnAfterIBlockElementAdd", array("aspro_import", "FillTheBrands"));
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", array("aspro_import", "FillTheBrands"));
class aspro_import
{
static function FillTheBrands($arFields)
{
$arCatalogID = array(29); // ID инфоблока каталога
$numBrandsID = 157; // ID инфоблока брендов Аспро
$oldBrandsCode = 'BREND'; // символьный код свойства брендов, откуда будет взято название для создания нового бренда
if (in_array($arFields['IBLOCK_ID'], $arCatalogID)) {
$arItem = CIBlockElement::GetList(false, array('IBLOCK_ID' => $arFields['IBLOCK_ID'], 'ID' => $arFields['ID']), false, false, array('ID', 'PROPERTY_' . $oldBrandsCode))->fetch();
if ($arItem['PROPERTY_' . $oldBrandsCode . '_VALUE']) {
$arBrand = CIBlockElement::GetList(false, array('IBLOCK_ID' => $numBrandsID, 'NAME' => $arItem['PROPERTY_' . $oldBrandsCode . '_VALUE']))->fetch();
if ($arBrand) {
CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array('BRAND' => $arBrand['ID']));
} else {
$el = new CIBlockElement;
$arParams = array("replace_space" => "-", "replace_other" => "-");
$id = $el->Add(array(
'ACTIVE' => 'Y',
'NAME' => $arItem['PROPERTY_' . $oldBrandsCode . '_VALUE'],
'IBLOCK_ID' => $numBrandsID,
'CODE' => Cutil::translit($arItem['PROPERTY_' . $oldBrandsCode . '_VALUE'], "ru", $arParams)
));
if ($id) {
CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array('BRAND' => $id));
} else {
echo $el->LAST_ERROR;
}
}
}
}
}
}
В коде необходимо задать значения 3-м переменным:
значение ID инфоблока каталога (переменная $arCatalogID) — соответствует ID инфоблока каталога вашего магазина. Узнать значение ID можно, к примеру, в настройках инфоблока каталога
Значение ID инфоблока брендов Аспро (переменная $numBrandsID). Значение ID инфоблока указан в соответствующих настройках в инфоблоке контента
Символьный код свойства брендов (переменная $oldBrandsCode). Перейдите в список свойств инфоблока и найдите нужное свойство, выгруженное из 1С, которое соответствует значению брендов. В нашем случае значение символьного кода — BREND, у вас может быть другое. Скопируйте его. Также обратите внимание на тип свойства — нужно выбрать вариант «Строка».