Налаштування централізованого управління контентом товарів в 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 днів залежно від кількості каналів та складності перевірок повноти.







