MS2 Требуется вывести все мультикатегории - РЕШЕНО
Друзья, кто поможет?
MS2
Имеется «Товар 1»
Назначил ему vendor с ID 22
Назначил ему parent с ID 33
Назначил ему мультикатегорию с ID 44
Задача:
На странице производителя vendor с ID 22 вывести список мультикатегорий, в которых есть товары с vendor 22.
В итоге с помощью Руслана и Василия разобрался.
Для тех, кому понадобится такая нестандартная выборка:
MS2
Имеется «Товар 1»
Назначил ему vendor с ID 22
Назначил ему parent с ID 33
Назначил ему мультикатегорию с ID 44
Задача:
На странице производителя vendor с ID 22 вывести список мультикатегорий, в которых есть товары с vendor 22.
В итоге с помощью Руслана и Василия разобрался.
Для тех, кому понадобится такая нестандартная выборка:
[[pdoResources?
&tplWrapper=`@INLINE <span>Коллекции: </span> [[+output]]`
&tpl=`TPL.collection.item.for.products.page`
&class=`msProduct`
&parents=`0`
&outputSeparator=`, `
&where=`{
"Data.vendor":"[[+id]]",
"msCategory.template":"9"
}`
&leftJoin=`{
"Data": {
"class": "msProductData",
"on": "msProduct.id = Data.id"
},
"msCategoryMember": {
"class": "msCategoryMember",
"on": "msCategoryMember.product_id = msProduct.id"
},
"msCategory": {
"class": "msCategory",
"on": "msCategory.id = msCategoryMember.category_id"
}
}`
&select=`{
"msCategory":"longtitle,id,pagetitle,template,menutitle"
}`
&groupby=`msCategory.id`
&showLog=`0`
&sortby=`msCategory.menutitle`
&sortdir=`ASC`
]]
Комментарии: 11
А что такое мультикатегория? Это категория с подкатегориями?
Вот, сделал скрин.
yadi.sk/i/GmP36rMQfsyTT
yadi.sk/i/GmP36rMQfsyTT
Нужно выбрать товары с vendor = 22 и приджоинить к ним msCategory через msCategoryMember.
Один запрос c двумя join, можно сделать через pdoResources.
Один запрос c двумя join, можно сделать через pdoResources.
Вот так?
[[!pdoResources?
&tpl=`@INLINE коллекция [[+pagetitle]]`
&parents=`22`
&innerJoin=`{
"msCategoryMember": {
"class": "msCategoryMember",
"on": "msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1"
}
}`
&showLog=`1`
]]
Только что-то совсем не то выводится… Нужно выбрать товары с vendor = 22а у тебя
&parents=`22`По идее нужно:
&parents=`0`
&where={Data.vendor :22}
Ой, да, туплю. Вот так:
[[!pdoResources?
&tpl=`@INLINE коллекция [[+pagetitle]]`
&parents=`0`
&where=`{Data.vendor :22}`
&innerJoin=`{
"msCategoryMember": {
"class": "msCategoryMember",
"on": "msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1"
}
}`
&showLog=`1`
]]
Но, всё равно:0.0005679: Could not process query, error #1054: Unknown column 'msProduct.id' in 'on clause'
Полный лог:0.0001349: pdoTools loaded
0.0000329: xPDO query object created
0.0003889: innerJoined msCategoryMember as msCategoryMember
0.0005510: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
0.0000510: Processed additional conditions
0.0006220: Added where condition: 0=, modResource.published=1, modResource.deleted=0
0.0001190: Sorted by modResource.publishedon, DESC
0.0003531: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties` FROM `site_content` AS `modResource` JOIN `ms2_product_categories` `msCategoryMember` ON msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1 WHERE ( `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY modResource.publishedon DESC "
0.0005679: Could not process query, error #1054: Unknown column 'msProduct.id' in 'on clause'
0.0029020: Total time
15 728 640: Memory usage
я с джоинами не дружу, если можно потыкаю пальцем в небо. У тебя pdoResources, а с товарами работает msProduct или как он там.
Как-то так:
[[!pdoResources?
&tpl=`@INLINE коллекция [[+pagetitle]]`
&class=`msProduct`
&parents=`0`
&where=`{"Data.vendor":22}`
&leftJoin=`{
"Data": {
"class": "msProductData",
"on": "msProduct.id = Data.id"
},
"msCategoryMember": {
"class": "msCategoryMember",
"on": "msCategoryMember.product_id = msProduct.id"
},
"msCategory": {
"class": "msCategory",
"on": "msCategory.id = msCategoryMember.category_id"
}
}`
&select=`{
"msCategory":"pagetitle"
}`
&groupby=`msCategory.id`
&showLog=`1`
]]
Спасибо, Руслан, большущее!
Разобрался. Для тех, кому еще понадобится такая выборка, немного доработанная мной:
Разобрался. Для тех, кому еще понадобится такая выборка, немного доработанная мной:
[[pdoResources?
&tplWrapper=`@INLINE <span>Коллекции: </span> [[+output]]`
&tpl=`TPL.collection.item.for.products.page`
&class=`msProduct`
&parents=`0`
&outputSeparator=`, `
&where=`{
"Data.vendor":"[[+id]]",
"msCategory.template":"9"
}`
&leftJoin=`{
"Data": {
"class": "msProductData",
"on": "msProduct.id = Data.id"
},
"msCategoryMember": {
"class": "msCategoryMember",
"on": "msCategoryMember.product_id = msProduct.id"
},
"msCategory": {
"class": "msCategory",
"on": "msCategory.id = msCategoryMember.category_id"
}
}`
&select=`{
"msCategory":"longtitle,id,pagetitle,template,menutitle"
}`
&groupby=`msCategory.id`
&showLog=`0`
&sortby=`menutitle`
&sortdir=`ASC`
]]
Только вот беда, что по menutitle не сортирует почему-то… Все вперемешку. Непонятно из-за чего.
Можно попробовать указать явно таблицу:
Ну и вообще, стоит убедиться, что menutitle везде заполнен, потому что mySql не подставит pagetitle вместо пустого menutitle как сниппет pdoMenu.
&sortby=`msCategory.menutitle`
Ну и вообще, стоит убедиться, что menutitle везде заполнен, потому что mySql не подставит pagetitle вместо пустого menutitle как сниппет pdoMenu.
О! Сработало! Спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.