ms3YandexMarket

YML для Яндекс Маркета и RSS для Google из товаров MiniShop3
Автор дополнения
Иван Бочкарев
Пакетов
44
Закачек
338
Обычно отвечает в течение суток
Автор дополнения
Пакетов
44
Закачек
338
Обычно отвечает в течение суток
Версия 1.0.0-pl
Дата выпуска 12.11.2026
Загрузки 0
Внимание, этот компонент требует PHP 8.2 или выше!
Внимание, этот компонент требует MODX 3 или выше.
Собирайте файлы выгрузки для маркетплейсов из каталога MiniShop3.

ms3YandexMarket пишет YML для Яндекс Маркета или RSS 2.0 для Google. Адрес файла задаётся в карточке прайса, площадка скачивает его по URL. Компонент в кабинеты Маркета и Merchant Center не входит.

Прайсов в менеджере может быть несколько: у каждого свой набор тегов и один файл pricelist-{id}.xml в каталоге ms3yandexmarket_files_path. В интерфейсе MiniShop3 пункт меню называется «Яндекс Маркет».

Одного offer на товар часто мало. У прайса выбирают источник предложений:

  • товар: одна строка на карточку MiniShop3;
  • вариант: отдельный offer на каждый вариант ms3Variants, без вариантов товар не попадает в файл;
  • комбинация: строки из ms3Remains без привязки к варианту;
  • автоматически: сначала варианты, иначе комбинации, иначе товар.

Остатки берут из MiniShop3, ms3Variants, ms3Remains или автоматического выбора. Пункт «Свой источник» считает число тем же порядком, что автоматический. Порог min_stock в режиме skip убирает предложение из YML и RSS, если остаток не выше порога.

Источник предложений и остатков в карточке прайса

Как это работает

  1. Создайте прайс с названием в менеджере.
  2. На вкладке «Магазин» задайте, откуда брать текст для тегов name, company и url, и сохраните теги.
  3. На вкладке «Категории» отметьте разделы, которые попадут в выгрузку.
  4. На вкладке «Предложения» проверьте теги name, price и url у offer.
  5. На вкладке «Генерация» запустите запись файла.
  6. Передайте площадке URL файла из карточки прайса.
  7. При необходимости включите запись по расписанию через Scheduler или после сохранения товара.

Несколько прайсов и форматы

Один прайс пишет один файл. Для Маркета в карточке выбирают каталог или размещение, для Google всегда собирается RSS 2.0. Файл размещения заменяет условия в кабинете Маркета, а в offer остаются только поля из списка управляемых.

Список прайсов в менеджере

Поля и источники значений

У тега магазина источник текста бывает только setting или value. Цену, адрес, картинку и производителя задают у тега предложения. Fenom там же, префиксом в поле «Откуда брать текст», а свой XML это тип тега. Пустой текст в файл не пишется, предложение без id пропускается.

Вкладка «Магазин», поля файла

Генерация и контроль

Запись идёт вручную, по расписанию Scheduler или после сохранения товара. Предпросмотр файл на диске не заменяет.

Журнал хранит запуски. Диагностика проверяет среду: Scheduler, ms3Variants и ms3Remains. Пустой shop в предпросмотре значит, что у тегов name, company и url не выбран источник.

Вкладка «Генерация»

Готовый YML на диске

Преимущества

  • YML и Google RSS из одного каталога MiniShop3 без ручной сборки XML.
  • Несколько прайсов с разными правилами отбора и состава тегов.
  • Варианты ms3Variants и остатки ms3Remains в отдельных offer.
  • Файл размещения заменяет условия в кабинете Маркета.
  • Расписание, автозапись после правки товара, журнал и диагностика.
  • Разграничение прав на список, карточку, генерацию и логи.

Требования

MODX Revolution 3+, PHP 8.2+ с расширениями json, dom и xmlwriter, MiniShop3 1.13+, VueTools 1.2+. По желанию: ms3Variants, ms3Remains, Scheduler 1.9. При установке нужны MiniShop3, VueTools и провайдер modstore.pro, каталог core/config/ доступен на запись.<b

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[1.0.0-pl] - 2026-11-13

Added

  • Запросы менеджера идут в группу /api/mgr/ms3yandexmarket через FastRoute. В предпросмотре пустое поле не обрывает чтение.
  • Остаток читается через RemainServiceInterface и StockIdentityResolver. Количество берётся для товара, варианта и комбинации.
  • Генерация разворачивает варианты и комбинации в collectOffers.
  • Значение с префиксом fenom: считается в FieldResolver и MappingPipeline, если установлен pdoTools.
  • Предпросмотр одного предложения показывает поля, признак остатка и фрагмент XML.
  • Экран диагностики и таблицы менеджера на PrimeVue.
  • Интеграционный набор fixture #100, проверка phpstan и прогон памяти на 10 000 предложений. Руководство лежит в docs/guide.
  • Настройка ms3yandexmarket_enabled отключает генерацию через ComponentGate.
  • Повторяющиеся offer id отсекает DuplicateOfferFilter в JSON- и tree-пути.

Fixed

  • Каталог assets/components/ms3yandexmarket/files/ с тестовыми прайсами в пакет не входит. Папку создаёт первая генерация.
  • Запасной запуск лежит в core/components/ms3yandexmarket/cron.php и работает только из консоли: php core/components/ms3yandexmarket/cron.php.
  • У ms3Remains null и 0 различаются: пустой остаток не подменяется нулём.
  • Значение fenom: и шаблон offer_id_fenom требуют право ms3yandexmarket_edit_fenom.
  • Tree-предпросмотр отдаёт ошибки renderer (issues) и ставит is_valid по уровню error.
  • Для placement managed_fields попадают в настройки оффера перед записью YML.

Dependencies

  • MODX 3.x, MiniShop3 >= 1.13, PHP >= 8.2, VueTools >= 1.2.
  • pdoTools, ms3Variants и ms3Remains подключаются по желанию.

[0.1.0-beta] - 2026-10-07

Первый бета-релиз: YML-экспорт Яндекс Маркета для MODX 3 и MiniShop3.

Added

  • Несколько прайс-листов. У каждого свои категории с исключениями, условия по полям resource, data, TV и option, маппинг и настройки магазина.
  • Режим предложения: product, variant, combination или automatic. Остаток берётся по цепочке ms3Remains, ms3Variants, MiniShop3. Пустой остаток и ноль различаются.
  • Потоковая запись YML через XMLWriter. Файл пишется во временный и подменяет готовый через rename.
  • ShopValidator и OfferValidator. Фид с ошибкой валидации на диск не записывается.
  • Блок категорий без повторов. Скоуп категорий считается через EXISTS. Товар в нескольких категориях даёт одно предложение.
  • Диагностика показывает, установлены ли ms3Variants и ms3Remains.
  • Менеджер на Vue 3 и PrimeVue: список и редактор прайс-листов, дерево категорий с исключениями, конструктор фильтров, маппинг, предпросмотр предложений, генерация, журнал, просмотр и скачивание YML.
  • GenerationService собирает предпросмотр в памяти и файл одним collectOffers и prepareSettings. По ходу генерации вызываются события OnMs3YandexMarket*.
  • Журнал GenerationLog и строки LogEntry. Число строк за один прогон ограничивает настройка ms3yandexmarket_log_entry_cap. Смена контентных полей ставит need_generate. После ошибки генерацию можно повторить.
  • Планировщик Scheduler (sFileTask) и запасной запуск cron.php.
  • Права ms3yandexmarket_view, ms3yandexmarket_manage, ms3yandexmarket_generate, ms3yandexmarket_edit_raw_xml и ms3yandexmarket_edit_fenom.

Fixed

  • Скачивание YML идёт через /yml/download. Путь проверяется через realpath и остаётся внутри корня сайта.
  • Процессоры YML ограничивают размер отдаваемого файла.

Последние обсуждения в сообществе MODX.pro