Вывод категорий с присоединением товара (вывод категории с изображением первого товара в ней)
Здравствуйте!
Прошу подсказать, где я ошибся:
Нужно вывести на главной странице сайта список подкатегорий товаров из заданной главной категории. В списке категория должна содержать Пункт меню и Изображение первого выбранного товара из этой категории. У подкаегорий могут быть дочерние подкатегории, то есть, глубина вложенности может быть разная. По сути, нужно решить старую задачу, которую разбирал Василий Наумкин вот тут https://bezumkin.ru/sections/tips_and_tricks/2058/.
Пытаюсь собрать результат вот так
Спасибо в карму всем, кто поделиться полезной информацией.
Прошу подсказать, где я ошибся:
Нужно вывести на главной странице сайта список подкатегорий товаров из заданной главной категории. В списке категория должна содержать Пункт меню и Изображение первого выбранного товара из этой категории. У подкаегорий могут быть дочерние подкатегории, то есть, глубина вложенности может быть разная. По сути, нужно решить старую задачу, которую разбирал Василий Наумкин вот тут https://bezumkin.ru/sections/tips_and_tricks/2058/.
Пытаюсь собрать результат вот так
{'msProducts'| snippet : [
'class' => 'msCategory',
'select' => '{
"msCategory":"msCategory.id,msCategory.parent,msCategory.menutitle,"
,"msProduct":"msProduct.id as product_id, msProduct.uri as product_uri, msProduct.pagetitle as product_pagetitle"
,"small":"small.url as small"
}',
'innerJoin' => '{
"msProduct": {"class":"msProduct", "alias":"msProduct", "on":"msProduct.parent = msCategory.id AND msProduct.class_key = msProduct"}
}',
'leftJoin' => '{
"small": {"class":"msProductFile","alias":"small", "on": "small.product_id = msProduct.id AND small.path LIKE %/small/ AND small.rank=0"}
}',
'tpl' => 'msCategoryHomeFilter',
'includeTVs' => 'class',
'where' => '{"class_key":"msCategory"}',
'depth' => 20,
'wrapIfEmpty' => 0,
'sortby' => 'msCategory.menuindex',
'sortdir' => 'ASC',
'limit' => 100,
'showLog' => 1
]}но получаю ошибку:Could not process query, error #1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN `kr_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `kr_ms2_produc' at line 1результат лога:
0.0000000: pdoTools loaded.
0.0000000: Conditions prepared
0.0010002: xPDO query object created
0.0000000: Included list of tvs: class
0.0000000: innerJoined msProduct as msProduct
0.0009999: leftJoined msProductData as Data
0.0000000: leftJoined msVendor as Vendor
0.0020001: leftJoined msProductFile as small
0.0000000: leftJoined modTemplateVarResource as TVclass
0.0000000: Grouped by msProduct.id
0.0000000: Added selection of msProduct: msProduct.id as product_id, msProduct.uri as product_uri, msProduct.pagetitle as product_pagetitle
0.0000000: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`
0.0000000: Added selection of msVendor: `name` AS `vendor.name`, `resource` AS `vendor.resource`, `country` AS `vendor.country`, `logo` AS `vendor.logo`, `address` AS `vendor.address`, `phone` AS `vendor.phone`, `fax` AS `vendor.fax`, `email` AS `vendor.email`, `description` AS `vendor.description`, `properties` AS `vendor.properties`
0.0000000: Added selection of msCategory: msCategory.id,msCategory.parent,msCategory.menutitle,
0.0000000: Added selection of msProductFile: small.url as small
0.0000000: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `class`
0.0000000: Replaced TV conditions
0.0009999: Processed additional conditions
0.0009999: Added where condition: class_key=msCategory, msCategory.parent:IN(2,4,5,15,128,134,139,153,154,155,103,104,105,106,107,108,109,110,111,112,126,113,114,115,116,117,118,119,120,121,122,123,124,125,127,129,130,131,132,133,137,138,140,141,142,143,144,145,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185), msCategory.published=1, msCategory.deleted=0
0.0009999: Replaced TV conditions
0.0009999: Sorted by msCategory.menuindex, ASC
0.0000000: Limited to 100, offset 0
0.0000000: SQL prepared "SELECT msProduct.id as product_id, msProduct.uri as product_uri, msProduct.pagetitle as product_pagetitle, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`, msCategory.id, msCategory.parent, msCategory.menutitle, ``, small.url as small, IFNULL(`TVclass`.`value`, '') AS `class` FROM `kr_site_content` AS `msCategory` JOIN `kr_site_content` `msProduct` ON msProduct.parent = msCategory.id AND msProduct.class_key = msProduct LEFT JOIN `kr_ms2_products` `Data` ON LEFT JOIN `kr_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `kr_ms2_product_files` `small` ON small.product_id = msProduct.id AND small.path LIKE %/small/ AND small.rank=0 LEFT JOIN `kr_site_tmplvar_contentvalues` `TVclass` ON `TVclass`.`contentid` = `msCategory`.`id` AND `TVclass`.`tmplvarid` = 1 WHERE ( `msCategory`.`class_key` = 'msCategory' AND `msCategory`.`parent` IN (2,4,5,15,128,134,139,153,154,155,103,104,105,106,107,108,109,110,111,112,126,113,114,115,116,117,118,119,120,121,122,123,124,125,127,129,130,131,132,133,137,138,140,141,142,143,144,145,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185) AND `msCategory`.`published` = 1 AND `msCategory`.`deleted` = 0 ) GROUP BY msProduct.id ORDER BY msCategory.menuindex ASC LIMIT 100 "
0.0010002: Could not process query, error #1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN `kr_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `kr_ms2_produc' at line 1
0.0070002: Total time
6 291 456: Memory usageПытаюсь собрать ручным MySQL запросом вот так:SELECT
msCategory.id,
msCategory.parent,
msCategory.menutitle,
`msProductData`.`image`,
`msProductData`.`thumb`,
image.url as image
FROM `kr_site_content` AS `msCategory`
JOIN `kr_site_content` `msProduct`ON msProduct.class_key = 'msProduct' AND msProduct.parent = msCategory.id
JOIN `kr_ms2_products` `msProductData` ON msProduct.id = msProductData.id
LEFT JOIN `kr_ms2_product_files` `image` ON image.product_id = msProduct.id AND image.path LIKE '%/small/' AND image.rank=0
WHERE msCategory.class_key = 'msCategory' AND msCategory.published = 1 AND msCategory.deleted = 0 AND msCategory.parent = 4
GROUP BY msCategory.id
ORDER BY msCategory.menuindexНо в результате получаю только те категории, у которых есть прямые дочерние продукты, без вложенных категорий.Спасибо в карму всем, кто поделиться полезной информацией.
Комментарии: 2
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Если много, то лучше посмотреть в сторону плагина — при сохранении товара проверить его menuindex. Если menuindex=0, то получать все его родительские категории и записывать в ТВ-шки пункт меню и путь к картинке. Тогда вывод категорий на сайте будет тривиальным.