Open monterarty opened 2 months ago
Пока вкрутил вот такой костыль, и это работает как надо, но там ведь могут быть и другие условия, наверно нужна более сложная проверка наличия ключей, чтобы затрагивало LIKE, IN, != и др
if (!array_key_exists('class_key:IN', $scriptProperties['where'])) { $where = array( 'class_key' => 'msProduct', ); }
есть такое решение от 2013 года
[[!msProducts?
&class=`msCategory`
&parents=`2`
&where=`{"class_key":"msCategory"}`
&tpl=`tpl.Products.category_light`
&tplOdd=`tpl.Products.category_dark`
&select=`{
"msCategory":"*"
,"msProduct":"msProduct.id as product_id, msProduct.uri as product_uri, msProduct.pagetitle as product_pagetitle"
,"msProductData":"*"
,"500x500":"500x500.url as 500x500"
}`
&innerJoin=`{
"msProduct": {"class":"msProduct", "alias":"msProduct", "on":"msProduct.parent = msCategory.id AND msProduct.class_key = 'msProduct'"}
,"msProductData": {"class":"msProductData", "alias":"msProductData", "on":"msProduct.id = msProductData.id"}
}`
&leftJoin=`{
"500x500": {"class":"msProductFile","alias":"500x500", "on": "500x500.product_id = msProduct.id AND 500x500.path LIKE '%/500x500/' AND 500x500.rank=0"}
}`
&sortby=`msCategory.menuindex`
&sortdir=`asc`
&showLog=`1`
]]
https://bezumkin.ru/topics/16d7ec84-6448-4a58-8b72-d9c7c082f8d1
Также можно использовать pdoResources с leftJoin и указанием class = msProduct
А сам сниппет msProducts предназначен для вывода товаров, поэтому не считаю описанное поведение ошибкой
А зачем в сниппете который выводит ТОВАРЫ пытаться засунуть вывод КАТЕГОРИИ? В чем практический смысл?
@Electrica Практический смысл что это работает кратно быстрее чем pdoResources и иногда хочется вывести ТОВАРЫ по КАТЕГОРИЯМ одним запросом, а не делать вызов pdoResources внутри чанка которого будет вызов msProducts для вывода продуктов таким образом получаем количество вызовов msProducts равное количеству категорий, а в решении выше - один вызов и все
Далее вывод в формате json и уже через fenom это все распределяешь как удобно
@webinmd смысл вывести и категории и товары в одном запросе. Если сделать запрос только по категориям то там и без leftjoin работает все
Сообщение об ошибке / Error message
Если в msProducts в where указать class_key:IN - правило добавляется но не работает, например
Поскольку теперь ключом массива является class_key:IN а по умолчанию msProducts заполняет ключ в where class_key (30-33 строки сниппета msProducts)
Получаем условие
WHERE (
msProduct.
class_key= 'msProduct' AND
msProduct.
class_keyIN ('msCategory','msProduct').....
Резюме / Summary
Не получается вывести в одном вызове сниппета сразу и категории и товары
Шаг для воспроизведения / Step to play
указать в параметрах 'where' => ['class_key:IN' => ['msCategory','msProduct']]
Наблюдаемое поведение / Observed behavior
Выводятся только товары
Ожидаемое поведение / Expected behavior
Выводятся и категории и товары
Environment
miniShop2 3.0.7