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