Исключить из выборки msProducts товары из неактивных категорий

Здравствуйте.

Задача в названии.

Код вызова сниппета msProducts:
[[!msProducts?
    &element=`msProducts`
    &parents=`[[*id]]`
    &tpl=`product.tpl`
    &sortby=`id`
    &sortdir=`DESC`
    &limit=`0`
    &leftJoin=`{
        "Remains": {
          "class": "msprRemains",
          "on": "msProduct.id = Remains.product_id AND Remains.remains > 0"
        }
    }`
    &groupby=`msProduct.id`
    &select=`{
        "msProduct": "*",
        "Remains": "SUM(Remains.remains) as remains"
    }`
    &where=`{
        "Remains.remains:>": "0",
        "Data.favorite":"0"
    }`
]]
Структура дерева:
Главный разрез
— Категория 1 (опубликована)
— — Товар 1
— — Товар 2
— Категория 2 (не опубликована)
— — Товар 1
— — Товар 2
— Категория 3 и т.д.

В списке товаров фигурируют товары из второй категории (сами товары активны).

Вопросы:
1. Так задумано, мол выборка ресурсов, и если они активны, то не важно что там с родителем?
2. Если ответ на первый вопрос «Да», то как сделать выборку с учетом родителя?
2.1. Получить через сниппент активные ресурсы первого уровня, загнать их в плейсхолдер, а потом выставить в parent?
2.2. Как-то иначе?
Скаут
7 часов назад
modx.pro
48
0

Комментарии: 1

Наумов Алексей
3 часа назад
+1
Правильный сценарий — это снять с публикации и товары (хотя это бывает часто не удобно для менеджеров и т.п.).
Но в целом компонент типа msPre позволяет сделать это быстро.

Дело в том, что в modx снятие с публикации страницы (любой) верхнего уровня не означает, что весь раздел снять с публикации.

Если же ответить на ваш вопрос — то нужно сделать еще один leftJoin (по аналогии с Remains), куда джойнить категорию товара. И в where добавить условие, что категория опубликована.

И ее забыть, что:
— товар все равно опубликован, он будет доступен по прямой ссылке
— товар опубликован, он попадает в разные выгрузки типа карты сайта, sitemap.xml и т.п., за всем этим нужно следить
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1