/home / /bitrix / empire.ymlimport
INTERNAL MODULE bitrix/empire.ymlimport

Импорт YML/XML в каталог

Модуль empire.ymlimport для 1С‑Битрикс

Модуль решает типовую, но больную задачу: как аккуратно забрать товары и предложения из YML/XML‑фида в инфоблок каталога, не сломав структуру и не утонув в кастомных скриптах. Подходит для поставщиков, маркетплейсов и любых B2C‑каталогов.

yml-import xml catalog bitrix-module
📄 README.md

# Контекст

Почти каждый проект на Битриксе рано или поздно упирается в импорт каталога. Поставщик прислал YML или XML, маркетплейс генерирует фид, старый сайт умеет только "выгружать в файл" — а вам нужно, чтобы в каталоге Битрикса появились живые товары с понятной связкой по идентификаторам.

Быстрый путь — написать скрипт на коленке, положить в /local и повесить на cron. Через полгода никто не помнит, как он работает, где логика, почему часть товаров пропала и что будет, если сменится структура фида.

# Задача модуля

Сделать импорт YML/XML в Битрикс:

Настраиваемым через админку, а не только кодом
Повторяемым: один и тот же сценарий по кнопке или по агенту
Безопасным для каталога: обновление по XML_ID, без дублей
Независимым от allow_url_fopen — с поддержкой cURL

# Как это устроено

Модуль регистрирует класс \Empire\YmlImport\Importer и агент Importer::runAgent(). В настройках модуля вы указываете:

  • инфоблок каталога, в который нужно грузить товары;
  • источник YML/XML — внешний URL или путь к файлу типа /upload/feed.xml.

Дальше сценарий выглядит как shell‑скрипт:

$ php -r "\\Empire\\YmlImport\\Importer::import(
    IBLOCK_ID,
    'https://example.com/feed.yml'
);"

Внутри модуль:

  • загружает файл (через cURL или file_get_contents);
  • разбирает XML через simplexml_load_string;
  • ищет офферы в shop > offers > offer или в offers > offer;
  • для каждого оффера забирает id, name, description и др.;
  • ищет элемент по XML_ID = id и либо обновляет его, либо создаёт новый.

# Админ‑интерфейс

Вместо отдельного самописного скрипта модуль добавляет раздел в меню контента:

Контент → Импорт YML/XML (Empire)
    ├─ Импорт            # запуск и настройки
    ├─ Профили           # (зарезервировано под сценарии)
    └─ История импортов  # (зарезервировано под логику логов)

В форме настроек вы выбираете инфоблок и источник, можете сразу нажать «Сохранить и запустить импорт» и получить понятное сообщение об успехе или ошибке.

# Агент и фоновые обновления

При установке модуль регистрирует агент:

\CAgent::AddAgent(
  "\\Empire\\YmlImport\\Importer::runAgent();",
  "empire.ymlimport",
  "N",
  3600
);

Агент раз в заданный интервал читает настройки (инфоблок и источник) и запускает тот же код, что и ручной импорт. Это удобно, когда фид обновляется раз в сутки/час, а вы не хотите думать о расписании cron.

# Когда модуль особенно полезен

  • есть поставщик с YML/XML‑фидом и нужно завести каталог на Битриксе;
  • старый сайт генерирует YML, а новый проект уже живёт на 1С‑Битрикс;
  • нужно регулярно обновлять цены/остатки без сложных интеграций;
  • хочется иметь простой, но понятный код импорта внутри /local/modules.

# Как внедряем на проектах

  1. Аудит фида. Смотрим структуру XML, поля, варианты офферов.
  2. Настройка инфоблока. Подгоняем свойства под фид и бизнес‑логику.
  3. Тонкая доработка модуля под проект. Преобразование полей, работа с ценами и остатками.
  4. Тестовый прогон. Заливаем в отдельный инфоблок, проверяем данные.
  5. Боевой запуск. Включаем агент, настраиваем мониторинг и логи.

# Обсудить модуль под ваш проект

Если у вас есть YML/XML‑фид и вы хотите аккуратно завести его в Битрикс — можем адаптировать empire.ymlimport под ваш сценарий или собрать отдельное решение.