Настройка централизованного управления товарным контентом 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка централизованного управления товарным контентом 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка централизованного управления товарным контентом 1С-Битрикс

Когда описания товаров редактируются в нескольких местах одновременно, они рано или поздно расходятся: в каталоге одно название, в YML-фиде другое, в email-рассылке третье. Централизованное управление контентом — это когда описание, фотографии и атрибуты обновляются в одном месте и автоматически распространяются на все каналы.

Проблема: источники дублирования

В типичном магазине на Битрикс контент хранится в:

  • Инфоблоке каталога (b_iblock_element, b_iblock_element_property)
  • Торговых предложениях (b_iblock_element другого инфоблока)
  • Сгенерированных XML-фидах (ЯндексМаркет, Google Merchant)
  • HL-блоках (доп. характеристики)
  • Шаблонных письмах (встроенные описания)

Редактировать в нескольких местах вручную — путь к расхождениям.

Принцип единого источника

Решение — назначить один инфоблок «мастером» и настроить производные каналы на чтение из него. Структура данных не меняется — меняется процесс.

Мастер-инфоблок содержит всё: NAME, DETAIL_TEXT, PREVIEW_TEXT, DETAIL_PICTURE, MORE_PHOTO и все свойства. Ничего не заполняется нигде, кроме этого инфоблока.

Производные каналы читают из мастера:

  • YML-фид: генератор читает CIBlockElement::GetList из мастер-инфоблока
  • Google Merchant feed: аналогично
  • Email-шаблоны: свойства подставляются из b_iblock_element через API
  • Маркетплейсы: выгрузка по расписанию через агент

Настройка единого источника для торговых предложений

Часто описание задаётся у товара-родителя, а у торговых предложений (SKU) нет описания. Чтобы не дублировать:

// В шаблоне карточки товара — получить описание из родителя, если нет своего
$detailText = $arResult['DETAIL_TEXT'];
if (empty($detailText) && $arResult['IBLOCK_TYPE_ID'] === 'offers') {
    $parentId = $arResult['PROPERTIES']['CML2_LINK']['VALUE'] ?? null;
    if ($parentId) {
        $parent = CIBlockElement::GetList(
            [], ['ID' => $parentId],
            false, false, ['DETAIL_TEXT']
        )->Fetch();
        $detailText = $parent['DETAIL_TEXT'] ?? '';
    }
}

Контроль полноты заполнения (completeness)

Чтобы товар не выходил в продажу с незаполненными полями, добавляем проверку перед активацией:

AddEventHandler('iblock', 'OnBeforeIBlockElementUpdate', function(&$fields) {
    if ($fields['IBLOCK_ID'] !== CATALOG_IBLOCK_ID) return;
    if ($fields['ACTIVE'] !== 'Y') return;

    $required = ['NAME', 'DETAIL_TEXT', 'PREVIEW_PICTURE'];
    foreach ($required as $field) {
        if (empty($fields[$field])) {
            $fields['ACTIVE'] = 'N';
            // Логируем незаполненный товар
            \Bitrix\Main\Diag\Debug::writeToFile(
                "Product {$fields['ID']} missing field {$field}",
                '',
                '/local/logs/content-completeness.log'
            );
            return;
        }
    }

    // Проверка обязательных свойств
    $requiredProps = ['BRAND', 'CML2_ARTICLE'];
    foreach ($requiredProps as $propCode) {
        if (empty($fields['PROPERTY_VALUES'][$propCode])) {
            $fields['ACTIVE'] = 'N';
            return;
        }
    }
});

Инструмент массового обновления контента

Для обновления описаний у сотен товаров — массовое редактирование через стандартный список элементов инфоблока в административной части. Включить колонки для редактирования: Административный раздел → Инфоблоки → Список элементов → Настройка столбцов.

Для загрузки описаний из файла CSV/XLSX — кастомный импортёр:

// /local/admin/import-content.php
// Формат CSV: ID_товара;Описание;Краткое_описание
$file = new SplFileObject($_FILES['csv']['tmp_name'], 'r');
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl(';');

$el = new CIBlockElement();
foreach ($file as $row) {
    [$productId, $detailText, $previewText] = $row;
    if (!(int)$productId) continue;

    $el->Update((int)$productId, [
        'DETAIL_TEXT'      => trim($detailText),
        'DETAIL_TEXT_TYPE' => 'html',
        'PREVIEW_TEXT'     => trim($previewText),
    ]);
}

Сброс кешей при обновлении контента

После массового обновления описаний кеши страниц нужно сбросить. Тег кеша для инфоблока — iblock_id_{$iblockId}:

// Сброс всего кеша инфоблока
\Bitrix\Main\Data\TaggedCache::clearByTag('iblock_id_' . CATALOG_IBLOCK_ID);

// Или точечный сброс по элементу
\Bitrix\Main\Data\TaggedCache::clearByTag('iblock_element_' . $productId);

Если используется CDN или внешнее кеширование (Varnish, nginx proxy_cache) — нужен отдельный механизм инвалидации через API CDN-провайдера.

Настройка централизованного управления контентом — это в первую очередь соглашение о процессах и несколько технических барьеров (обработчики событий + права доступа). Реализация занимает 3–7 дней в зависимости от количества каналов и сложности проверок полноты.