Настройка мэппинга полей при парсинге для 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 рабочих дней. Инвестиция, которая окупается при работе с тремя и более источниками.







