Инструкция и приведенные в ней фрагменты кода приведены для сайтов, установленных не в режиме многосайтовости. Если вам необходимо настроить выгрузку брендов из 1С для интернет-магазина с многосайтовостью, обратитесь к разработчикам или в поддержку для индивидуальной консультации.
Важно! Инструкция предназначена для пользователей с уровнем знания php не ниже среднего. Если вы не владеете достаточными для этого знаниями и навыками, обратитесь в техподдержку за доработкой решения. Статья в том числе актуальна для сайтов, обновленных до версии PHP 8.1.
Если вы хотите, чтобы бренды выгружались из 1С и автоматически синхронизировались с системой, необходимо отредактировать файл init.php, который находится в папке /bitrix/php_interface. Если файл отсутствует, создайте его и загрузите в указанную папку, а затем отредактируйте содержимое файла, прописав в нем фрагмент кода. Этот код позволит синхронизировать свойство загружаемого из 1С со свойством BRAND у решения.
Внимание! При проведении работ с настройками инфоблока запрещается удалять служебное свойство BRAND. В противном случае корректная работа функционала будет нарушена.
Если выгрузка из 1С производится в новый инфоблок, необходимо создать это свойство вручную, сохранив соответствующие настройки (см. скриншот выше). После создания свойства перейдите в его настройки, чтобы привязать свойство BRAND к нужному инфоблоку.
Настоятельно рекомендуем вносить изменения через ftp и ни в коем случае не создавать файл init.php в структуре сайта инструментами 1С-Битрикс. Некорректный ввод или кастомизация кода приведет к полной потере работоспособности сайта. Прежде чем кастомизировать решение, обязательно проведите резервное копирование.
AddEventHandler( "iblock", "OnAfterIBlockElementAdd", array( "aspro_import", "FillTheBrands" ) ); AddEventHandler( "iblock", "OnAfterIBlockElementUpdate", array( "aspro_import", "FillTheBrands" ) ); class aspro_import { static function FillTheBrands( $arFields ){ $arCatalogID=array(13); 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_BREND' ) )->fetch(); if( $arItem['PROPERTY_BREND_VALUE'] ){ $arBrand = CIBlockElement::GetList( false, array( 'IBLOCK_ID' => 8, 'NAME' => $arItem['PROPERTY_BREND_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_BREND_VALUE'], 'IBLOCK_ID' => 8, 'CODE' => Cutil::translit( $arItem['PROPERTY_BREND_VALUE'], "ru", $arParams ) ) ); if( $id ){ CIBlockElement::SetPropertyValuesEx( $arFields['ID'], false, array( 'BRAND' => $id ) ); }else{ echo $el->LAST_ERROR; } } } } } }
В код необходимо внести следующие изменения:
значение ID инфоблока каталога (переменная $arCatalogID) — соответствует ID инфоблока каталога вашего магазина. Узнать значение ID можно, к примеру, в настройках инфоблока каталога
ID инфоблока «Бренды» (фрагмент, содержащий 'IBLOCK_ID' => 8, где 8 — это ID инфоблока «Бренды»). ID инфоблока «Бренды» указан в соответствующих настройках.
Перейдите в список свойств инфоблока и найдите нужное свойство, выгруженное из 1С и соответствующее значению брендов. В нашем случае значение символьного кода – BREND. Скопируйте его. Также обратите внимание на тип свойства – нужно выбрать вариант «Строка».
После этого нужно заменить символьные коды в фрагментах вида 'PROPERTY_BREND' и 'PROPERTY_BREND_VALUE'. Вместо символьного кода свойства BREND, как в нашем случае, необходимо подставить свое значение. К примеру, если система использует код C3PO, то фрагменты должны принять вид 'PROPERTY_C3PO' и 'PROPERTY_C3PO_VALUE'.