init.php может привести к некорректной работе обмена с 1С или к 500 ошибке.
Одна из самых частых проблем на проектах с 1С-Битрикс и обменом из 1С УТ — бренд у товара формально приходит, но на сайте нормально не работает. В 1С он хранится как строка или список, а на сайте для каталога, фильтрации, страниц брендов и SEO обычно нужна привязка к отдельному инфоблоку брендов.
В итоге менеджеры и контент-специалисты после каждой выгрузки получают одну и ту же ручную задачу: создать новый бренд, заполнить его, а потом еще и привязать его к товарам. Пока это не сделано, часть логики каталога работает неполноценно: фильтр может быть пустым, страницы брендов не формируются как нужно, а сам каталог становится менее управляемым.
В чем проблема со свойством «Бренд»
На большинстве сайтов бренды сделаны отдельным инфоблоком. Это нормальная и удобная архитектура: у бренда можно сделать собственную страницу, добавить логотип, описание, баннер, SEO-текст, связать его с каталогом и использовать в фильтрах.
Но в 1С все обычно устроено проще. Там бренд хранится как строка или список. При обмене это значение действительно приходит в товар, но не связывается автоматически со свойством типа «Привязка к элементам», которое используется на сайте.
Из-за этого появляется типовая ситуация:
- в 1С бренд есть;
- в товар на сайте название бренда приехало;
- в инфоблоке брендов нужный элемент либо отсутствует, либо уже есть;
- но товар с этим брендом не связан так, как нужно для сайта.
То есть визуально кажется, что обмен работает, но фактически каталог остается недособранным.
Почему это влияет не только на удобство, но и на работу сайта
На первый взгляд проблема выглядит технической и не самой критичной. Но на практике она затрагивает сразу несколько рабочих процессов:
- усложняется сопровождение каталога;
- менеджеры тратят время на рутину после каждой выгрузки;
- новые бренды могут не попадать в фильтры и подборки;
- страницы брендов либо не наполняются, либо наполняются с задержкой;
- часть SEO-структуры каталога работает не так, как задумано.
Если товаров немного, проблему еще можно закрывать вручную. Но если каталог живой, брендов много, а данные обновляются регулярно, ручной сценарий быстро превращается в постоянную потерю времени.
Как работает автоматическая привязка бренда
Логика решения достаточно простая и надежная:
- В момент сохранения свойств товара мы читаем значение бренда, которое пришло из 1С.
- Проверяем, существует ли в инфоблоке брендов элемент с таким названием.
- Если бренд уже есть — просто записываем привязку к нему в товар.
- Если бренда нет — создаем новый элемент бренда и сразу же привязываем товар к нему.
В результате не нужно отдельно создавать бренд руками и потом возвращаться к товару, чтобы настроить связь. Каталог сам достраивает нужную структуру в момент обмена.
Когда такая доработка особенно полезна
Чаще всего она нужна в следующих случаях:
- на сайте большой каталог с регулярным обменом из 1С;
- бренды уже вынесены в отдельный инфоблок;
- по брендам есть фильтрация, подборки или SEO-страницы;
- новые бренды появляются постоянно;
- у команды нет желания после каждой выгрузки вручную дорабатывать каталог.
Особенно хорошо эта доработка работает там, где сайт используется не просто как витрина, а как рабочий инструмент продаж и лидогенерации. Чем меньше в каталоге ручных операций, тем стабильнее вся система.
Что нужно подготовить перед внедрением
Перед тем как вставлять код в init.php, нужно определить параметры именно вашего проекта:
- ID инфоблока товаров — где хранятся карточки товара;
- ID инфоблока брендов — куда будут создаваться новые элементы;
- код свойства из 1С — откуда приходит название бренда;
- код свойства привязки — куда должна записываться ссылка на бренд.
Часто схема выглядит так: из 1С бренд приходит в свойство вроде CML2_MANUFACTURER, а на сайте используется отдельное свойство BRAND с типом «Привязка к элементам».
Перед внедрением обязательно:
- сделайте резервную копию файла
init.php; - проверьте код на тестовом сайте;
- убедитесь, что обмен с 1С после внедрения проходит корректно.
Готовый код для init.php
Ниже — рабочий пример, который можно адаптировать под конкретный проект. Он ищет бренд по названию, при необходимости создает его и записывает привязку в товар автоматически.
Показать полный код
Что нужно поменять в коде под ваш проект
CATALOG_IBLOCK_ID— ID инфоблока каталога;BRANDS_IBLOCK_ID— ID инфоблока брендов;SOURCE_BRAND_PROPERTY_CODE— код свойства, которое приходит из 1С;TARGET_BRAND_LINK_PROPERTY_CODE— код свойства привязки в товаре.
Если у вас у брендов нужно автоматически заполнять еще и картинку, описание, SEO-поля или пользовательские свойства, это можно расширить в методе createBrand().
Что проверить после внедрения
После установки кода важно проверить не только отсутствие ошибки, но и сам рабочий сценарий:
- Создается ли новый бренд, если его еще нет в инфоблоке.
- Не создается ли дубль, если бренд уже существует.
- Привязывается ли товар к найденному или созданному бренду.
- Корректно ли работают фильтры, страницы брендов и вывод товаров по производителю.
- Нет ли дублей из-за разного написания брендов в 1С, например с лишними пробелами или разными вариантами названия.
И еще один важный момент: эта доработка начинает работать с момента внедрения. Если в каталоге уже есть старые товары без корректной привязки к брендам, для них нужно отдельно запускать разовую обработку.
FAQ
Подойдет ли этот вариант, если бренд из 1С приходит списком, а не строкой?
Да, подойдет. В примере предусмотрено чтение как строкового, так и списочного значения. Если свойство списочное, берется его текстовое значение и уже по нему выполняется поиск или создание бренда.
Будет ли код автоматически создавать новые бренды?
Да. Если в инфоблоке брендов не найден элемент с нужным названием, код создаст его автоматически и сразу же привяжет к товару.
Можно ли дополнительно заполнять у нового бренда описание, картинку и SEO-поля?
Да, это можно сделать. В базовом варианте создается минимально необходимый элемент бренда, но логику легко расширить и добавить заполнение дополнительных полей и свойств.
Что делать с уже существующими товарами, где бренд ранее не был привязан?
Для них лучше отдельно запустить разовую массовую обработку каталога. Этот обработчик нужен для автоматической работы в момент следующих обменов и сохранений.
