
- MODX 3
- PHP 8.2
- miniShop3
- Vue 3


| Действие | Право |
|---|---|
| Список, карточка, диагностика, журнал, фрагмент XML, полный предпросмотр, чтение и скачивание файла | ms3yandexmarket_view |
| Создание и сохранение прайса, чтение и запись тегов, атрибутов и условий, категории | ms3yandexmarket_manage |
| Сгенерировать и запуск всех ожидающих прайсов | ms3yandexmarket_generate |
Тип тега 19 | ещё ms3yandexmarket_edit_raw_xml |
Непустой handler или значение с префиксом fenom: | ещё ms3yandexmarket_edit_fenom |
Чтение дерева тегов и условий требует ms3yandexmarket_manage. Права своего XML и Fenom установщик кладёт в политику. Без них сохранение отвечает 403. См. настройки и права.
| Действие | Что происходит |
|---|---|
| Поиск | Список по названию. Пустая строка возвращает все прайсы |
| Создать | Карточка нового прайса. В базе строки ещё нет |
| Название | Открывает карточку. Под ним #id · площадка · режим и флаги, если они есть |
| Иконка правки | То же |
| Иконка удаления | Спрашивает подтверждение. Удаляет прайс, его категории, запуски журнала, сообщения, условия и дерево тегов. Файл на диске остаётся |
Создать на новом прайсе требует название. Кнопка пишет карточку и собирает дерево тегов по площадке и назначению. После записи видны вкладки Предложения и Генерация.
| Кнопка | Что пишет | Что уходит в каждом запросе |
|---|---|---|
| Сохранить в шапке | Название, описание, активность, источники предложений и остатков, режим, интервал, тип оффера, площадка, назначение, путь, URL, отмеченные категории. При placement ещё список управляемых полей. Теги дерева не пишет | Источник предложений, источник остатков, режим, интервал, тип оффера, площадка, назначение, категории. При placement ещё список управляемых полей |
| Сохранить настройки | Режим, интервал, площадка, путь, URL | Режим, интервал, площадка. Источника предложений и категорий нет |
Отметка «нужно сгенерировать» ставится, если в запросе есть ключ из правой колонки. Со старым значением код не сравнивает.
Смена площадки или назначения стирает дерево тегов и заполняет его заново под новый профиль.
Отмена возвращает к списку и не пишет форму.
Сохранить тег пишет имя, источник и переключатель Выводить в файл сразу и обновляет панель XML. До нажатия поля остаются только в форме. Чужая version отвечает 409. Тег не перезаписывается. Откройте его снова.
Выключенный тег в списке бледнее. В файл он не попадает.
Кнопок добавить тег, удалить тег и поменять порядок в дереве нет. Набор тегов задаётся при создании прайса по площадке и назначению.
Добавить атрибут сразу создаёт атрибут с именем id и пустым значением.
Сохранить у атрибута пишет имя и значение. Удалить убирает атрибут. Обе кнопки требуют актуальную version.
Имя id или available на узле offer в файл отдельным атрибутом не копируется. Их занимают атрибуты предложения из одноимённых вложенных тегов.
Флажок раздела, флажок Исключена и Своё название меняют только форму. В базу они попадают по Сохранить в шапке. Снятие флажка раздела сбрасывает «исключена» в форме.
Предпросмотр категорий читает уже сохранённый набор. Пока шапка не сохранена, панель XML показывает старые разделы.
Блок Фильтры есть на Магазине (target = resource) и на Предложениях (target = offer).
| Кнопка | Что происходит |
|---|---|
| Добавить условие | Сразу пишет строку: первая колонка списка, оператор =, пустое значение |
| Сохранить у строки | Пишет колонку, оператор и значение этой строки |
| Удалить у строки | Удаляет условие |
Подсказки берут опубликованные товары: не больше 100 разных строк, в списке 30. Для is null и is not null поле значения скрыто и при сохранении уходит пустым.
Пустое значение у оператора, которому оно нужно, выборку не сужает. Оба списка условий применяются к одним и тем же товарам. См. категории и фильтры.
Вкладка Предложения при первом открытии запрашивает порцию из 20 строк. Поиск сужает по строке и возвращает на первую страницу. Назад и Дальше листают порции, если строк больше 20.
Над таблицей счётчики: найдено, пропущено, просмотрено товаров.
ID товара и ID варианта задают фрагмент XML одного предложения.
variant_id и строка, которую убрал skip или exclude, дают HTTP 422, код domain_error. Пустой XML не приходитСохранить настройки пишет режим, интервал, площадку, путь и URL. Площадка здесь та же, что в шапке: её смена заново собирает дерево тегов.
| Кнопка | Право | Файл |
|---|---|---|
| Сгенерировать | generate | Пишет. Повтор во время записи отвечает generation_locked |
| Предпросмотр YML | view | Сборка в памяти, файл не меняется |
| Показать сгенерированный YML | view | Текст уже записанного файла |
| Скачать YML | view | Тот же файл как загрузку |
Пока идёт Сгенерировать, журнал под кнопками обновляется каждые 1,5 секунды и показывает последние 80 строк. Опрос останавливается на статусе success, error, warning или partial.
Кнопки «сгенерировать все ожидающие» в менеджере нет. Тот же отбор делают планировщик и cron.php.
Панель рядом с деревом обновляется примерно через 0,4 секунды после сохранения тега, атрибута или условия. Панель не заменяет файл на диске.
Для Яндекса панель показывает фрагмент: магазин, категории или одно предложение. Для google.rss20 панель категорий пишет комментарий, что элемента категорий нет. Панели магазина и предложения у Google показывают весь RSS, не кусок дерева тегов.
| Действие | Что происходит |
|---|---|
| Поиск, Обновить | Читают журнал. Непустой номер в фильтре оставляет запуски этого прайса. Пустое поле показывает все |
| Подробнее | Открывает запуск: статус, счётчики, ссылку на прайс и список сообщений. В строке уровень, текст и при наличии тип id · поле. Пустой список: замечаний не было |
| Назад | Возвращает к списку журнала |
Потолок числа сообщений задаёт ms3yandexmarket_log_entry_cap. Ссылка на прайс открывает его карточку.
Раздел только читает среду. Кнопок записи нет.
Разбор строк: журнал и диагностика.