msProducts некорректно выводит товары

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

Пытаюсь вывести товары на сайте по следующей схеме:

Категория 1
— Подкатегория 1
— Товар 1
— Товар 2
— Товар 3
— Подкатегория 2
— Товар 1
— Товар 2
— Товар 3

В шаблоне Категории 1 вызываю сниппет:

[[pdoResources?
&parents=`[[*id]]`
&depth=`0`
&where=`{"class_key":"msCategory"}`
&tplWrapper=`@INLINE <ul class="category-products">[[+output]]<span class="clearfix"></span></ul>`
&tpl=`@INLINE <li class="clearfix"><a href="[[++site_url]]index.php?id=[[+id]]" class="category-products__category-names [[+classnames]]" [[+attributes]]>[[*pagetitle]] [[+pagetitle]]</a>[[$tpl.products]]</li>`
]]

Содержимое [[$tpl.products]]:

[[msProducts?
&parents=`[[+id]]`
&class=`msProduct`
&tpl=`tpl.product`
&limit=`0`
]]

И содержимое [[$tpl.product]]:

<div class="col-md-3"><a href="[[++site_url]]index.php?id=[[+id]]" class="column [[+classnames]]" [[+attributes]]><img src="{$thumb}" width="100%"/>{$pagetitle}</a></div>

В итоге Подкатегория 1 и Подкатегория 2 выводятся корректно, корректно выводятся их имена из [[+pagetitle]]. Если выводить их id по плейсхолдеру [[+id]], то тоже выводятся их правильные значения. Но вот сниппет msProducts несмотря на &parents=`[[+id]]` выводит все товары магазина в обоих подкатегориях, а так же в соседних категориях, которые вообще никак не касаются ни Категории 1 ни ее подкатегорий. Т.е. Выводятся и товары Категории 2, 3 и т.д.

При этом если в msProducts задать &depth=`1` не выводятся товары вообще, хотя фактически они лежат в Подкатегории 1 и Подкатегории 2.

Кстати, вместо msProducts пытался использовать pdoResources. В результате он выводит все в кучу, и товары и категории всего дерева ресурсов. Если указать параметр &depth=`1`, то почему то выводит родительскую категорию. Что тоже мне не понятно.

Прошу помочь разобраться в проблеме. Уже менял хостинг, версию PHP пробовал от 5.6 до 7.1. Хостинг sweb.ru

Благодарю за любые подсказки.
d.darby2018.1
02 июля 2017, 21:40
modx.pro
2 137
0

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

Олег
03 июля 2017, 10:50
0
Я так понимаю [[+id]] пустой, потому выводит все товары.
Попробуй убрать параметр parents или заменить [[+id]] на [[*id]]
    d.darby2018.1
    03 июля 2017, 11:46
    0
    Нет, id выводится правильно, как я писал. Если выводить в [[$tpl.products]] просто [[+id]] за пределами вызова msProducts, то id-шники выводятся правильные.

    [[msProducts?
    &parents=`[[+id]]`
    &class=`msProduct`
    &tpl=`tpl.product`
    &limit=`0`
    ]]
    Выводим id подкатегорий - <b>[[+id]]</b>

    А вот подставлять их в &parents он почему то не хочет. Да, и логи выдают следующую ошибку:

    [2017-07-03 01:01:33] (ERROR @ /home/i/indigoverf/test/public_html/core/xpdo/om/xpdoquery.class.php: 766) Encountered empty IN condition with key id.

    Что примерно переводится как: «Обнаружено пустое условие IN с ключом id».

    Без &parents выводит то же самое, что и с ним — все товары обеих подкатегорий. С [[*id]] то же самое, соответственно.

    Да, забыл сказать еще, что если в &parents задать конкретную категорию, то тоже работает и выводит товары заданной категории. Т.е. проблема именно в подстановке id по плейсхолдеру [[+id]].
    d.darby2018.1
    03 июля 2017, 12:56
    0
    Поискал по поводу этой ошибки: [2017-07-03 01:01:33] (ERROR @ /home/i/indigoverf/test/public_html/core/xpdo/om/xpdoquery.class.php: 766) Encountered empty IN condition with key id

    Я так понял, она выдается, когда в ресурсе из которого пытаемся вывести дочерние элементы, дочерних элементов не обнаружено. Но я вывожу товары из категории товаров по miniShop2, сами же ресурсы товаров являются товарами оттуда же. Товары там есть, корректно открываются. Пробовал даже галочки поставить для отображения товаров в дереве, но результат тот же.
      Алексей Ерохин
      03 июля 2017, 14:03
      0
      [[$tpl.products? &id=`[[+id]]`]]
        d.darby2018.1
        03 июля 2017, 16:04
        0
        Разве в чанк можно передавать параметр для сниппета? Как бы там ни было, из любопытства попробовал. Результат — перестали выводиться товары вообще.
        d.darby2018.1
        03 июля 2017, 20:52
        0
        Дошло до маразма. Создал в подкатегориях TV, в которые прямо прописал числовые значения их id. А потом в &parents пытаюсь выводить эти TV. Вне сниппета TV выводятся корректно, а в снипете та же история и та же ошибка.

        Третий день занимаюсь только этой фигней. Помогите плиз кто-нибудь разобраться, в чем проблема.
          Володя
          03 июля 2017, 22:20
          0
          создайте обычный чанк для tpl, переместите туда
          <li class="clearfix"><a href="[[++site_url]]index.php?id=[[+id]]" class="category-products__category-names [[+classnames]]" [[+attributes]]>[[*pagetitle]] [[+pagetitle]]</a>[[$tpl.products]]</li>
          и будет вам счастье
            d.darby2018.1
            04 июля 2017, 00:19
            0
            Спасибо, стало лучше чем было. Но не до конца. Код выглядит так:

            [[pdoResources?
            &parents=`[[*id]]`
            &depth=`0`
            &where=`{"class_key":"msCategory"}`
            &tplWrapper=`tpl.subcategoryWrap`
            &tpl=`tpl.subcategoryRow`
            ]]

            В tpl.subcategoryWrap и tpl.subcategoryRow спрятаны соответственно:

            <ul class="category-products">[[+output]]<span class="clearfix"></span></ul>
            и
            <li class="clearfix"><a href="[[++site_url]]index.php?id=[[+id]]" class="category-products__category-names [[+classnames]]" [[+attributes]]>[[*pagetitle]] [[+pagetitle]] [[+id]]</a>[[$tpl.products]]</li>

            В [[$tpl.products]] лежит

            [[msProducts?
            &parents=`[[+id]]`
            &tpl=`tpl.product`
            &limit=`0`
            &showLog=`1`
            ]]

            Теперь pdoResources получает [[+id]] и корректно выводит его в шаблоне tpl.subcategoryRow, но в сниппет msProducts он передает его только первый раз, второй раз выводит то же самое. Т.е. имена подкатегорий он выводит всех, id подкатегорий просто текстом на экран выводит тоже какие надо, но товары выводит самой первой категории везде.

            Пробовал вызвать msProducts некешируемым, результат тот же. А в логах теперь пусто.

            Где-то снова не так? И, Владимир, или кто еше, кто знает, подскажите, пожалуйста, почему шаблон прописанный напрямую косячит, а в чанке работает корректно? Есть какая то разница?
          d.darby2018.1
          04 июля 2017, 01:52
          0
          Проблему решил следующим образом. Прописал вызов msProducts в чанк tpl.subcategoryRow не через другой чанк, а напрямую. В итоге в чанке tpl.subcategoryRow следующий код:

          <li class="clearfix"><a href="[[++site_url]]index.php?id=[[+id]]" class="category-products__category-names [[+classnames]]" [[+attributes]]>[[*pagetitle]] [[+pagetitle]] [[+id]]</a>[[msProducts?&parents=`[[+id]]`&tpl=`tpl.product`&limit=`0`&showLog=`1`]]</li>

          Т.е. переменная [[+id]] некорректно передавалась через промежуточный чанк.

          Спасибо всем, кто отозвался!

          Но хотелось бы понять, почему так происходит технически. Может кто-то подсказать, почему так происходит?
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            9