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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування централізованого керування товарним контентом 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування централізованого управління контентом товарів в 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'] ?? '';
    }
}

Контроль повноти заповнення контенту

Щоб товар не вийшов у продаж з незаповненими полями, додайте перевірку перед активацією:

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 днів залежно від кількості каналів та складності перевірок повноти.