Налаштування мепінгу полів при парсингу для 1С-Бітрікс
Парсер витяг дані — тепер потрібно з'ясувати, в яке поле Бітрікса потрапляє кожен атрибут джерела. Це і є мепінг. Хардкод мепінгу в PHP-коді — погане рішення: при зміні структури джерела або додаванні нового поля потрібно правити код і розгортати. Правильний мепінг — конфігурований, зберігається в базі та редагується через адміністративний інтерфейс.
Що таке мепінг і що в ньому зберігається
Мепінг — таблиця відповідностей між атрибутами джерела та полями/властивостями Бітрікса:
| Поле джерела | Тип поля Бітрікса | Код у Бітріксі | Трансформація |
|---|---|---|---|
product_name |
Поле елемента | NAME |
trim |
sku |
Поле елемента | XML_ID |
as-is |
price |
Тип ціни | 1 (роздрібна) |
float, round 2 |
quantity |
Поле каталогу | CATALOG_QUANTITY |
int |
color |
Властивість (список) | COLOR |
lookup enum |
weight_g |
Властивість (число) | WEIGHT |
/ 1000 (г→кг) |
description_html |
Поле елемента | DETAIL_TEXT |
HTMLPurifier |
category_id |
Розділ | IBLOCK_SECTION_ID |
section_map |
Схема зберігання мепінгу
Highload-блок ParserFieldMapping з полями:
UF_PARSER_ID — ID парсера/джерела (зв'язок з таблицею парсерів)
UF_SOURCE_FIELD — назва поля в джерелі (рядок)
UF_TARGET_TYPE — тип цілі: field|property|price|stock|section
UF_TARGET_CODE — код поля або властивості в Бітріксі
UF_TRANSFORM — трансформація (JSON: {"type": "divide", "by": 1000})
UF_ACTIVE — активний
UF_SORT — порядок застосування
Альтернатива — JSON-конфіг у файлі або таблиця в PostgreSQL, якщо використовуєте нативну БД.
Типи трансформацій
Базові:
-
as-is— без змін -
trim— прибрати пробіли -
int/float— привести тип -
boolean— «в наявності», «так», «1» → true
Математичні:
-
multiply/divide— конвертація одиниць -
add_markup— помножити на коефіцієнт націнки
Текстові:
-
strip_html— прибрати теги -
purify_html— HTMLPurifier з дозволеними тегами -
transliterate— для генерації CODE
Мепінг значень (lookup):
-
enum_map— таблиця відповідностей «значення джерела → ID enum Бітрікса» -
section_map— таблиця відповідностей «ID категорії джерела → ID розділу Бітрікса»
Адміністративний інтерфейс
UI мепінгу в адміністративній частині — ключовий елемент, без якого все інше втрачає сенс. Мінімальний набір:
- Список полів джерела (автовизначається при тестовому запуску парсера)
- Дропдаун для вибору поля Бітрікса
- Форма для налаштування трансформації
- Кнопка «Тест» — проганяє один тестовий об'єкт через мепінг і показує результат
Застосування мепінгу в коді
class FieldMapper {
public function map(array $sourceData, int $parserId): array {
$mappings = $this->getMappings($parserId); // з БД
$result = ['fields' => [], 'properties' => [], 'price' => null, 'stock' => null];
foreach ($mappings as $mapping) {
$rawValue = $sourceData[$mapping['source_field']] ?? null;
if ($rawValue === null) continue;
$value = $this->transform($rawValue, $mapping['transform']);
match($mapping['target_type']) {
'field' => $result['fields'][$mapping['target_code']] = $value,
'property' => $result['properties'][$mapping['target_code']] = $value,
'price' => $result['price'][$mapping['target_code']] = $value,
'stock' => $result['stock'] = $value,
'section' => $result['fields']['IBLOCK_SECTION_ID'] = $this->mapSection($value),
};
}
return $result;
}
}
Таймлайн робіт
| Етап | Термін |
|---|---|
| Проєктування схеми зберігання мепінгу | 4–6 годин |
| Розробка шару трансформацій | 4–8 годин |
| Адміністративний інтерфейс редагування | 1–2 дні |
| Інтеграція з наявними парсерами | 4–8 годин |
Разом: 3–5 робочих днів. Інвестиція, яка окупається при роботі з трьома та більше джерелами.







