MS2 Требуется вывести все мультикатегории - РЕШЕНО

Друзья, кто поможет?

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 апреля 2015, 06:48
modx.pro
4
3 260
0

Комментарии: 11

Павел Ширяев
08 апреля 2015, 21:10
0
А что такое мультикатегория? Это категория с подкатегориями?
    Серьёзный
    09 апреля 2015, 17:55
    0
    Вот, сделал скрин.
    yadi.sk/i/GmP36rMQfsyTT
      Василий Наумкин
      09 апреля 2015, 18:50
      0
      Нужно выбрать товары с vendor = 22 и приджоинить к ним msCategory через msCategoryMember.

      Один запрос c двумя join, можно сделать через pdoResources.
        Серьёзный
        09 апреля 2015, 23:22
        0
        Вот так?

        [[!pdoResources?
            &tpl=`@INLINE коллекция [[+pagetitle]]` 
            &parents=`22`
            &innerJoin=`{
                "msCategoryMember": {
                    "class": "msCategoryMember",
                    "on": "msCategoryMember.product_id = msProduct.id AND msCategoryMember.category_id = 1"
                }
            }`
            &showLog=`1`
        ]]
        Только что-то совсем не то выводится…
          Виктор
          09 апреля 2015, 23:26
          +1
          Нужно выбрать товары с vendor = 22
          а у тебя
          &parents=`22`
          По идее нужно:
          &parents=`0`
          &where={Data.vendor :22}
            Серьёзный
            09 апреля 2015, 23:31
            0
            Ой, да, туплю. Вот так:
            [[!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
              Виктор
              09 апреля 2015, 23:37
              0
              я с джоинами не дружу, если можно потыкаю пальцем в небо. У тебя pdoResources, а с товарами работает msProduct или как он там.
        Руслан Кундиус
        10 апреля 2015, 00:58
        +2
        Как-то так:
        [[!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`
        ]]
          Серьёзный
          10 апреля 2015, 17:13
          0
          Спасибо, Руслан, большущее!

          Разобрался. Для тех, кому еще понадобится такая выборка, немного доработанная мной:
          [[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 не сортирует почему-то… Все вперемешку. Непонятно из-за чего.
            Василий Наумкин
            10 апреля 2015, 18:20
            +1
            Можно попробовать указать явно таблицу:
            &sortby=`msCategory.menutitle`

            Ну и вообще, стоит убедиться, что menutitle везде заполнен, потому что mySql не подставит pagetitle вместо пустого menutitle как сниппет pdoMenu.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        11