msProducts некорректно выводит товары
Здравствуйте.
Пытаюсь вывести товары на сайте по следующей схеме:
Категория 1
— Подкатегория 1
— Товар 1
— Товар 2
— Товар 3
— Подкатегория 2
— Товар 1
— Товар 2
— Товар 3
В шаблоне Категории 1 вызываю сниппет:
Содержимое [[$tpl.products]]:
И содержимое [[$tpl.product]]:
В итоге Подкатегория 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
Благодарю за любые подсказки.
Пытаюсь вывести товары на сайте по следующей схеме:
Категория 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
Благодарю за любые подсказки.
Комментарии: 9
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Попробуй убрать параметр parents или заменить [[+id]] на [[*id]]
А вот подставлять их в &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]].
Я так понял, она выдается, когда в ресурсе из которого пытаемся вывести дочерние элементы, дочерних элементов не обнаружено. Но я вывожу товары из категории товаров по miniShop2, сами же ресурсы товаров являются товарами оттуда же. Товары там есть, корректно открываются. Пробовал даже галочки поставить для отображения товаров в дереве, но результат тот же.
Третий день занимаюсь только этой фигней. Помогите плиз кто-нибудь разобраться, в чем проблема.
и будет вам счастье
В tpl.subcategoryWrap и tpl.subcategoryRow спрятаны соответственно:
и
В [[$tpl.products]] лежит
Теперь pdoResources получает [[+id]] и корректно выводит его в шаблоне tpl.subcategoryRow, но в сниппет msProducts он передает его только первый раз, второй раз выводит то же самое. Т.е. имена подкатегорий он выводит всех, id подкатегорий просто текстом на экран выводит тоже какие надо, но товары выводит самой первой категории везде.
Пробовал вызвать msProducts некешируемым, результат тот же. А в логах теперь пусто.
Где-то снова не так? И, Владимир, или кто еше, кто знает, подскажите, пожалуйста, почему шаблон прописанный напрямую косячит, а в чанке работает корректно? Есть какая то разница?
Т.е. переменная [[+id]] некорректно передавалась через промежуточный чанк.
Спасибо всем, кто отозвался!
Но хотелось бы понять, почему так происходит технически. Может кто-то подсказать, почему так происходит?