You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
На витрине сниппет msProducts не выводит товары, привязанные к текущей категории только как к дополнительной (ms3_category_members), хотя в админке привязка отображается и товар опубликован.
В карточке товара добавить B в дополнительные категории (ms3_category_members).
На странице категории B вывести msProducts с parents => id категории B.
Включить showLog под менеджером — в выборке только товары с parent = B, без товаров из msCategoryMember.
Ожидаемое поведение
На странице категории B отображаются:
товары с parent = B;
товары, у которых B указана в дополнительных категориях (ms3_category_members).
Поведение должно быть согласовано с miniShop2 и с логикой OptionCategoryService::getProductsInCategory().
Фактическое поведение
На версиях до ~1.2.3 (2026-01): pdoTools фильтровал выборку только по parent; дополнительные категории игнорировались.
На актуальных версиях (main, ≥ 1.2.3): проблема исправлена в elements/snippets/ms3_products.php — кастомный WHERE с msCategoryMember и отключением стандартной фильтрации pdoTools (parents = 0).
Скриншоты
Не приложены (форум: showLog видит только основные товары).
Окружение
MiniShop3: воспроизводится на ≤ 1.0.x–1.1.x; исправлено с ~1.2.3
MODX: 3.1.2-pl (из отчёта на MODX.Pro)
PHP: 8.1+ (из отчёта)
pdoTools: 3.x
Логи ошибок
Логи из core/cache/logs/error.log
Runtime-ошибок нет. При showLog видно, что WHERE не содержит OR по id из ms3_category_members (на старых версиях).
Дополнительный контекст
Анализ
Корневая причина (исторически): сниппет делегировал фильтрацию по parents pdoTools/Fetch, который работает с деревом ресурсов MODX (parent) и не знает про ms3_category_members.
Описание проблемы
На витрине сниппет
msProductsне выводит товары, привязанные к текущей категории только как к дополнительной (ms3_category_members), хотя в админке привязка отображается и товар опубликован.Типичный вызов (Fenom):
Источник: MODX.Pro #25216 (апрель 2025, MiniShop3
1.0.0-alpha).Шаги воспроизведения
parent = A, опубликовать.ms3_category_members).msProductsсparents => id категории B.showLogпод менеджером — в выборке только товары сparent = B, без товаров изmsCategoryMember.Ожидаемое поведение
На странице категории B отображаются:
parent = B;ms3_category_members).Поведение должно быть согласовано с miniShop2 и с логикой
OptionCategoryService::getProductsInCategory().Фактическое поведение
На версиях до ~1.2.3 (2026-01): pdoTools фильтровал выборку только по
parent; дополнительные категории игнорировались.На актуальных версиях (
main, ≥ 1.2.3): проблема исправлена вelements/snippets/ms3_products.php— кастомный WHERE сmsCategoryMemberи отключением стандартной фильтрации pdoTools (parents = 0).Скриншоты
Не приложены (форум: showLog видит только основные товары).
Окружение
Логи ошибок
Логи из core/cache/logs/error.log
Дополнительный контекст
Анализ
Корневая причина (исторически): сниппет делегировал фильтрацию по
parentspdoTools/Fetch, который работает с деревом ресурсов MODX (parent) и не знает проms3_category_members.Исправление (changelog 2026-01, «Сниппет msProducts»):
Файл:
core/components/minishop3/elements/snippets/ms3_products.php(блок ~стр. 146–250):parents/depth/ исключений (-id) вручную (толькоmsCategory).product_idизmsCategoryMemberдля целевых категорий.(`msProduct`.`parent` IN (...) OR `msProduct`.`id` IN (...)).$scriptProperties['parents'] = 0— отключение parent-фильтра pdoTools.Предложенное решение
Для пользователей на старых версиях: обновиться до MiniShop3 ≥ 1.2.3.
Для кодовой базы (follow-up):
main— закрыть issue после добавления регрессионного покрытия.msProducts/ SQL-условие сmsCategoryMember(сейчас тестов нет).docs.modx.pro) явно описать поведениеparentsи дополнительных категорий.Связанные issues
CategoryProductsListService), там фикса ещё нет.Проверка после обновления
showLog=1под mgr — в SQL должен бытьOR msProduct.id IN (...).ms3_category_membersдля пары(product_id, category_id).showZeroPrice=0товары с нулевой ценой по-прежнему скрываются (это ожидаемо, не баг).