Выборка товаров по свойствам в MS2 2.2.0

Приветствую!
Осваиваю свойства товаров в minishop 2.2.0 beta.

Не пойму, как сделать выборку по свойствам товара.
Тут написано:
В сниппете msProducts добавлен параметр &optionFilters для фильтрации товаров по характеристикам. Он автоматически подключает нужные таблицы и дополняет указанное в &where. Пример:
&optionFilters=`{“core_count:>”:4}`
Делаю у себя так:
[[!msProducts?
&tpl=`msProductRow.tpl`
&parents=`5`
&includeThumbs=`250x250`
&optionFilters=`{"ctrana:>":Россия}`
]]
Но ничего не выводится.
Как правильно выборку сделать? Подскажите!
Rootiys
09 августа 2015, 08:21
modx.pro
1
4 099
0

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

Иван Климчук
09 августа 2015, 12:52
+2
в параметре &optionFilters=`{«ctrana:>»: Россия}` должен быть валидный json, у вас нет.
    Виталий Киреев
    09 августа 2015, 15:14
    +1
    &optionFilters=`{"ctrana":"Россия"}`
      Rootiys
      10 августа 2015, 19:01
      0
      Спасибо парни!

      Вот если нужно выбрать товары по нескольким свойствам:
      &optionFilters=`{"ctrana":"Россия","class":"33"}`
      то выводятся только те товары, у которых первое свойство совпадает. С классом 33 не выводятся.
      Как быть?
        Виталий
        10 января 2017, 13:58
        0
        Привет!
        Чтобы не создавать новую тему пишу здесь, вопрос тот же
        Пробую фильтровать по опциям товара, которые создаются в настройках minishop2. Не плагинам!
        Создал характеристику множественный список HDsizeTV с одним из вариантов 720p HD
        и хочу фильтровать по этой характеристике
        [[!msProducts?
            &parents=`27` 
        	&includeThumbs=`235x235`
            &showLog=`1`
        	&optionFilters=`{"HDsizeTV":"720p HD"}`
        ]]
        но ничего не выводит
        0.0000648: xPDO query object created
        0.0001709: leftJoined msProductData as Data
        0.0001340: leftJoined msVendor as Vendor
        0.0013409: leftJoined msProductFile as 235x235
        0.0008750: leftJoined msProductOption as HDsizeTV
        0.0000050: Grouped by msProduct.id
        0.0001221: Added selection of msProduct: 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.0000441: Added selection of msProductData: `sku_id`, `article`, `sku_name`, `default`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`, `availability`
        0.0000360: 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.0000279: Added selection of msProductFile: `url` as `235x235`
        0.0015800: Processed additional conditions
        0.0023448: Added where condition: class_key=msProduct, 0(Array), msProduct.parent:IN(27,140,189,245,255,256,353,354,355,356,357,374,375,376,382,383,416,420,438,439,440,450,486,504,510,511,576,598,599,623,624,649,670,688,692,693,694,750,751,752,778,780,783,800,811,824,842,843,845,852,910,913,914,925,926,935,940,1052,1054,1093,1057,1107,1108,1109,1120,1121,1126), msProduct.published=1, msProduct.deleted=0
        0.0001099: Sorted by msProduct.id, ASC
        0.0000050: Limited to 10, offset 0
        0.0005281: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`sku_id`, `Data`.`article`, `Data`.`sku_name`, `Data`.`default`, `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`, `Data`.`availability`, `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`, `235x235`.`url` as `235x235` FROM `modx_site_content` AS `msProduct` LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id`=`Data`.`id` LEFT JOIN `modx_ms2_vendors` `Vendor` ON `Data`.`vendor`=`Vendor`.`id` LEFT JOIN `modx_ms2_product_files` `235x235` ON `235x235`.`product_id` = `Data`.`sku_id` AND `235x235`.`parent` != 0 AND `235x235`.`path` LIKE '%/235x235/' LEFT JOIN `modx_ms2_product_options` `HDsizeTV` ON `HDsizeTV`.`product_id`=`Data`.`id` AND `HDsizeTV`.`key`='HDsizeTV' WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `HDsizeTV`.`value` = '720p HD' AND `msProduct`.`parent` IN (27,140,189,245,255,256,353,354,355,356,357,374,375,376,382,383,416,420,438,439,440,450,486,504,510,511,576,598,599,623,624,649,670,688,692,693,694,750,751,752,778,780,783,800,811,824,842,843,845,852,910,913,914,925,926,935,940,1052,1054,1093,1057,1107,1108,1109,1120,1121,1126) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )  GROUP BY msProduct.id ORDER BY msProduct.id ASC LIMIT 10 "
        0.0029981: SQL executed
        0.0001061: Total rows: 0
        0.0000129: Rows fetched
        0.0000141: Returning raw data
        0.0115149: Total time
        15 204 352: Memory usage
          Василий Наумкин
          10 января 2017, 15:15
          +1
          Вот, проверил. Сделал один товар, заполнил опцию


          Выбираю её
          [[!msProducts?
              &parents=`0`
              &optionFilters=`{"Test1":"324235"}`
              &showLog=`1`
          ]]
          И всё работает


          Судя по твоему SQL — ошибок нет, всё в порядке. Возможно, нужный товар находится в другой категории, попробуй указать &parents=`0`

          P.S. Еще меня смущает у тебя строка в логе
          Added where condition: class_key=msProduct, 0(Array),
          Хотя в SQL и всё верно. Однако, в моей выборке указывается прямо опция
          Added where condition: class_key=msProduct, Test1.value=324235,
          Возможно, у тебя старая версия pdoTools?
            Виталий
            10 января 2017, 17:47
            0
            версия была 2.7.5, обновил.
            если указываю &parents=`0` выводит товар, но из абсолютно других разделов каталога, где я еще не устанавливал опции. Причем, я пробую задавать другие опции, а эти товары в большинстве своем повторяются.

            строка в логе не изменилась

            0.0000432: xPDO query object created
            0.0002759: leftJoined msProductData as Data
            0.0001831: leftJoined msVendor as Vendor
            0.0015111: leftJoined msProductFile as 235x235
            0.0004840: leftJoined msProductOption as HDsizeTV
            0.0000029: Grouped by msProduct.id
            0.0001309: Added selection of msProduct: 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.0000472: Added selection of msProductData: `sku_id`, `article`, `sku_name`, `default`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`, `availability`
            0.0000231: 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.0000141: Added selection of msProductFile: `url` as `235x235`
            0.0000470: Processed additional conditions
            0.0004928: Added where condition: class_key=msProduct, 0(Array), msProduct.published=1, msProduct.deleted=0
            0.0000648: Sorted by msProduct.id, ASC
            0.0000019: Limited to 10, offset 0
            0.0003810: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`sku_id`, `Data`.`article`, `Data`.`sku_name`, `Data`.`default`, `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`, `Data`.`availability`, `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`, `235x235`.`url` as `235x235` FROM `modx_site_content` AS `msProduct` LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id`=`Data`.`id` LEFT JOIN `modx_ms2_vendors` `Vendor` ON `Data`.`vendor`=`Vendor`.`id` LEFT JOIN `modx_ms2_product_files` `235x235` ON `235x235`.`product_id` = `Data`.`sku_id` AND `235x235`.`parent` != 0 AND `235x235`.`path` LIKE '%/235x235/' LEFT JOIN `modx_ms2_product_options` `HDsizeTV` ON `HDsizeTV`.`product_id`=`Data`.`id` AND `HDsizeTV`.`key`='HDsizeTV' WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `HDsizeTV`.`value` = '720p HD' AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )  GROUP BY msProduct.id ORDER BY msProduct.id ASC LIMIT 10 "
            0.0096250: SQL executed
            0.0002019: Total rows: 32
            0.0002129: Rows fetched
            0.0003281: Returning raw data
            0.0010099: Checked the active modifiers
            0.0037611: Loaded "modChunk" with name "tpl.msProducts.row"
            0.0097723: Loaded options for products
            0.0000191: Returning processed chunks
            0.0680981: Total time
            16 515 072: Memory usage
            у меня minishop версии 2.3, может в этом дело?
              Василий Наумкин
              10 января 2017, 18:54
              0
              Учитывая, что она так и не была дописана — запросто.
                Виталий
                11 января 2017, 11:33
                0
                Не помогло – обновил minishop на локалхосте

                Строка Added where condition стала такой же как в вашем примере, но по-прежнему не выводит товар, точнее, товар с указанными опциями из нужной категории.
                0.0156672: pdoTools loaded.
                0.0020339: Conditions prepared
                0.0001001: xPDO query object created
                0.0005281: leftJoined msProductData as Data
                0.0003650: leftJoined msVendor as Vendor
                0.0022731: leftJoined msProductFile as 235x235
                0.0015390: leftJoined msProductOption as HDsizeTV
                0.0000081: Grouped by msProduct.id, `235x235`.url
                0.0000911: Added selection of msProduct: 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.0000501: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`, `availability`
                0.0001042: 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.0000348: Added selection of msProductFile: url as `235x235`
                0.0033131: Processed additional conditions
                0.0040870: Added where condition: class_key=msProduct, HDsizeTV.value=720p HD, msProduct.parent:IN(27,140,189,245,255,256,353,354,355,356,357,374,375,376,382,383,416,420,438,439,440,450,486,504,510,511,576,598,599,623,624,649,670,688,692,693,694,750,751,752,778,780,783,800,811,824,842,843,845,852,910,913,914,925,926,935,940,1052,1054,1093,1057,1107,1108,1109,1120,1121,1126), msProduct.published=1, msProduct.deleted=0
                0.0001769: Sorted by msProduct.id, ASC
                0.0000081: Limited to 10, offset 0
                0.0010231: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `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`, `Data`.`availability`, `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`, `235x235`.url as `235x235` FROM `modx_site_content` AS `msProduct` LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id` =  `Data`.`id` LEFT JOIN `modx_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `modx_ms2_product_files` `235x235` ON `235x235`.product_id = msProduct.id AND `235x235`.rank = 0 AND `235x235`.path LIKE '%/235x235/%' LEFT JOIN `modx_ms2_product_options` `HDsizeTV` ON `HDsizeTV`.product_id = Data.id AND `HDsizeTV`.key = 'HDsizeTV' WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `HDsizeTV`.`value` = '720p HD' AND `msProduct`.`parent` IN (27,140,189,245,255,256,353,354,355,356,357,374,375,376,382,383,416,420,438,439,440,450,486,504,510,511,576,598,599,623,624,649,670,688,692,693,694,750,751,752,778,780,783,800,811,824,842,843,845,852,910,913,914,925,926,935,940,1052,1054,1093,1057,1107,1108,1109,1120,1121,1126) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )  GROUP BY msProduct.id, `235x235`.url ORDER BY msProduct.id ASC LIMIT 10 "
                0.0132489: SQL executed
                0.0003381: Total rows: 0
                0.0000310: Rows fetched
                0.0000319: Returning raw data
                0.4491699: Total time
                15 728 640: Memory usage
                  Виталий
                  11 января 2017, 16:55
                  +1
                  Проблема решилась обновлением минишоп и пересозданием опций. Спасибо!
            ck
            ck
            27 февраля 2017, 22:55
            0
            Подскажите, пожалуйста, как в optionFilters указать значение опции текущего товара?

            Вот в таких вариантах optionFilters не работает, в отличии от where
            (значения переменным $_modx->resource.key и $option присваиваются):
            {$_modx->runSnippet('!msProducts', [
                     'where' => '{"Data.brands:!=":$_modx->resource.brands}',  
                     'optionFilters' => '{"key":$_modx->resource.key}'
            ])}
            и
            {set $option = $_modx->resource.key}
            {$_modx->runSnippet('!msProducts', [
                     'where' => '{"Data.brands:!=":$_modx->resource.brands}',  
                     'optionFilters' => '{"key:=":$option}'
            ])}

            При указании точного значения, выборка работает. Например:
            'optionFilters' => '{"key":55}'
            'optionFilters' => '{"key:=":55}'
              ck
              ck
              27 февраля 2017, 23:24
              0
              Интересно, что стандартный вывод без fenom работает:
              [[!msProducts?
                  &optionFilters=`{"key:=":[[+key]]}`
              ]]
                ck
                ck
                27 февраля 2017, 23:41
                0
                А where такое же значение не принимает:
                [[!msProducts?
                    &where=`{"Data.brands:=":[[+brands]]}` 
                ]]
                  Василий Наумкин
                  28 февраля 2017, 01:37
                  +1
                  Потому что число и строка в JSON кодируются по-разному.
                  &where=`{"Data.brands:=":"[[+brands]]"}`

                  А в Fenom можно кодировать родной функцией:
                  'optionFilters' => json_encode(['Data.brands:=' => $_modx->resource.brands]),
                    ck
                    ck
                    28 февраля 2017, 02:17
                    0
                    Действительно, заработало. Спасибо!
                    {$_modx->runSnippet('msProducts', [
                        'where' => json_encode([
                    	'Data.brands:!=' => $_modx->resource.brands
                        ]),
                        'optionFilters' => json_encode([
                    	'key:=' => $_modx->resource.key
                        ])
                    ])}
                    Теперь ещё и здесь прочёл о ней.

                Сергей
                26 января 2021, 22:44
                0
                У меня задача похожая. У товара есть заполненная опция «group». Мне нужно на странице товара вывести блок с товарами у которых group совпадает с текущим товаром.
                Пробую:
                [[!pdoPage?
                    &element=`msProducts`
                    &includeThumbs=`small`
                    &parents=`0`
                    &depth=`10`
                    &limit=`0`
                    &tpl=`tpl-shop-item`
                    &limit=`10`
                    &optionFilters=`{"group:LIKE":"36842"}`
                    &showLog=`1`
                ]]
                То это превращает мою страницу в белый экран. Подскажите как правильно прописать optionFilters
                  Сергей
                  26 января 2021, 23:10
                  0
                  Через fenom получилось вывести нужные товары:
                  {$_modx->runSnippet('!msProducts', [
                      'parents'=>0,
                      'limit'=>10,
                      'tpl'=>'tpl-shop-item',
                      'optionFilters' => ' { "group:=":11111 }' 
                  ])}
                  Пытаюсь вывести вместо 11111 подставить значение опции «group» текущего товара: {$_modx->resource.group.0}
                  Но выборка пропадает.
                  Подскажите как правильно прописать вывод значения опции в optionFilters.
                  Сам по себе {$_modx->resource.group.0} — работает
                    Сергей
                    27 января 2021, 10:31
                    0
                    Получилось сделать так:
                    {$_modx->runSnippet('!msProducts', [
                                   'parents'=>0,
                                    'limit'=>10,
                                    'tpl'=>'tpl-shop-item-small',
                                    'optionFilters' => ' { "group:=":[[+group.value]] }' 
                    ])}
                    Но почему {$_modx->resource.group.0} — не работает внутри параметра optionFilters?
                      Андрей
                      27 января 2021, 11:16
                      0
                      Так должно работать
                      {'!msProducts' | snippet : [
                      	'parents' => 0,
                      	'limit' => 10,
                      	'tpl' => 'tpl-shop-item-small',
                      	'optionFilters' => '{"group:=": '~$_modx->resource.group.0~'}'
                      ]}
                        Сергей
                        27 января 2021, 11:34
                        0
                        Да, так работает, спасибо
                          Сергей
                          27 января 2021, 14:45
                          0
                          Столкнулся с такой ситуацией: если в выборку попадает 0 товаров, то выводится все подряд, а как бы сделать, что бы блок не выводится, если в выборке ничего нет?
                            Андрей
                            27 января 2021, 15:25
                            0
                            Тогда надо сделать так:
                            {'!msProducts' | snippet : [
                            	'resources' => -$_modx->resource.id,
                            	'parents' => 0,
                            	'limit' => 10,
                            	'tpl' => 'tpl-shop-item-small',
                            	'innerJoin' => '{ "Options":{ "class":"msProductOption"}}',
                            	'groupby' => 'msProduct.id',
                            	'where' => '{ "Options.key":"group","Options.value:=": '~$_modx->resource.group.0~'}'
                            ]}

                            И parents можно указать верхний уровень каталога, товары же не в корне сайта лежат, смысл перебирать всё от корня сайта.
                              Сергей
                              27 января 2021, 15:56
                              0
                              Не сработало.
                              Нюанс такой, что group всегда заполнен Т.е. на пустоту мы не можем group проверять.
                              И вот проблема возникает, если этот group только у текущего товара и больше ни у кого, сниппету нечего вывести и он выводит каталог с начала.
                              {'!msProducts' | snippet : [
                              	'resources' => -$_modx->resource.id,
                              	'tplWrapper'=>'@INLINE <div class="group-item"><h2 class="title-3">Другие цвета:</h2>[[+output]]</div>'
                              	'parents' => 35,
                              	'limit' => 10,
                              	'includeThumbs'=>'small',
                              	'tpl' => 'tpl-shop-item-small',
                              	'innerJoin' => '{ "Options":{ "class":"msProductOption"}}',
                              	'groupby' => 'msProduct.id',
                              	'where' => '{ "Options.key":"group","Options.value:=": '~$_modx->resource.group.0~'}'
                              ]}
                              Я где встречал, парамерт, который выводит пустоту если в выборку ничего не попало, но не могу вспомнить где =)
                                Сергей
                                27 января 2021, 16:03
                                0
                                Нашел конструкцию:
                                [[!msProducts:default=`
                                выводим по умолчанию ,если пусто
                                `?
                                тут параметры
                                `
                                ]]
                                Осталось научиться в fonom это изобразить
                                  Андрей
                                  27 января 2021, 16:12
                                  0
                                  У меня этот код корректно работает, проверено. Если значение только у одного товара то не выводится ничего (текущий исключается в параметре resources).

                                  minishop2 2.8.0-pl (на 2.7.0 также работает), pdoTools 2.12.9-pl.

                                  Включай showLog, и смотри что в запросе. В случае с where должно выводить только совпадения, в отличии от параметра optionFilters, который дополняет where запрос.
                                    Сергей
                                    27 января 2021, 16:19
                                    0
                                    У меня тоже minishop2-2.7.0-pl и pdotools-2.12.9-pl.
                                    Но выводит каталог, если пусто.
                                    Вот лог, где должно быть пусто:
                                    0.0000510: pdoTools loaded. 0.0000970: Conditions prepared 0.0000150: xPDO query object created 0.0000792: innerJoined msProductOption as Options 0.0000639: leftJoined msProductData as Data 0.0000460: leftJoined msVendor as Vendor 0.0000579: leftJoined msProductFile as small 0.0000019: Grouped by msProduct.id, `small`.url 0.0000231: Added selection of msProduct: `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `alias_visible`, `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.0000100: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source` 0.0000091: 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.0000041: Added selection of msProductFile: url as `small` 0.0292971: Processed additional conditions 0.0309110: Added where condition: class_key=msProduct, msProduct.id:NOT IN(1261), msProduct.parent:IN(35,36,1002,1019,1033,1050,1058,1068,1072,1081,1099,1105,1109,1120,1151,1156,1179,37,539,723,973,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,38,39,40,41,42,43,44,45,46,47,48,49,50,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,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,7596,7596,7596,7596,7598,7599,7600,7601,7602,7602,7603,7603,7603,7603,7603,7621,7623,7623,7624,7624,7628,7629,7629,7630,7630,7634,7634,7635,7635,7636,7636,7657,7658,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7694,7698,7698,7698,7698,7699,7699,7699,7699,7699,7704,7705,7706,7707,7708,7712,7714,7715,7716,7718,7718,7718,7718,7718,7718,7718,7758,7758,7759,7768,7794,7795,7796,7797,7798,7804,7806,7806,7807,7826,7826,7827,7863,7864,7872,7876,7877,7888,7889,7889,7898,7899,7926,7927,7927,7927,7934,7934,7935,7935,7951,7963,7966,7967,7968,7969,7982,7983,7984,7986,7987,7988,7989,7990,7993,8001,8002,8026,8026,8027,8027,8028,8028,8030,8032,8033,8034,8035,8035,8039,8040,8042,8042,8043,8043,8044,8168,8169,8224,8224,8225,8229,8230,8250,8250,8250,8250,8250,8251,8251,8251,8251,8251,8251,8251,8257,8261,8262,8263,8267,8272,8287,8287,8288,8288,8288,8289,8289,8289,8290,8290,8290,8292,8293,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8316,8317,8318,8318,8319,8320,8320,8321,8321,8322,8322,8323,8323,8324,8324,8325,8325,8326,8326,8327,8327,8333,8334,8335,8336,8337,8338,8339,8340,8349,8349,8350,8351,8352,8353,8354,8355,8399,8408,8416,8503,8504,8505,8506,8507,8507,8526,8526,8527,8528,8528,8538,8541,8542,8543,8543,8544,8545,8546,8549,8550,8552,8553,8554,8554,8555,8555,8556,8556,8557,8558,8559,8559,8561,8562,8563,8564,8565,8567,8585,8587,8587,8589,8589,8590,8594,8609,8610,8655,8661,8662,8663,8664,8665,8666,8668,8669,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8692,8708,8708,8712,8714,8748,8762,8778,8800,8801,8802,8803,8804,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8818,8824,8825,8831,8832,8833,8834,8835,8842,8842,8847,8848,8851,8851,8852,8852,8853,8853,8854,8855,8856,8857,8858,8859,8860,8860,8861,8861,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901,8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8915,8916,8929,8931,8932,8933,8934,8935,8936,8937,8937,8940,8941,8942,8943,8943,8944,8944,8945,8945,8946,8946,8947,8947,8948,8948,8949,8950,8951,8967,8969,8974,8976,8980,8987,8988,8989,8990,8991,8991,8992,8992,8993,8994,8995,8995,8996,9004,9005,9006,9007,9008,9009,9013,9017,9018,9029,9030,9030,9031,9032,9033,9034,9035,9036,9038,9041,9043,9051,9053,9054,9055,9063,9064,9065,9066,9067,9068,9069,9070,9071,9072,9073,9075,9076,9077,9078,9079,9080,9080,9080,9080,9080,9089,9089,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9101,9102,9103,9104,9105,9106,9107,9108,9110,9111,9123,9130,9142,9142,9143,9143,9144,9144,9145,9145,9146,9146,9151,9152,9153,9159,9159,9160,9165,9165,9165,9166,9166,9167,9168,9181,9181,9182,9182,9183,9183,9184,9184,9185,9191,9191,9192,9192,9193,9193,9198,9199,9200,9204,9204,9204,9213,9213,9213,9213,9216,9219,9219,9222,9223,9224,9225,9232,9232,9232,9233,9234,9240,9241,9263,9264,9272,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9313,9314,9314,9315,9315,9316,9316,9317,9317,9317,9318,9319,9319,9320,9320,9321,9322,9322,9323,9323,9329,9329,9330,9331,9331,9332,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9352,9356,9357,9358,9359,9360,9361,9398,9424,9425,9425,9436,9448,9449,9450,9451,9452,9453,9453,9458,9472,9473,9474,9485,9486,9486,9487,9487,9488,9489,9490,9491,9491,9493,9494,9495,9496,9496,9498,9502,9502,9502,9503,9504,9505,9506,9507,9508,9512,9512,9521,9522,9523,9524,9525,9526,9527,9528,9530,9530,9531,9532,9533,9534,9536,9537,9538,9540,9541,9542,9543,9544,9545,9545,9545,9546,9546,9546,9547,9547,9547,9548,9549,9550,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9573,9573,9577,9578,9609,9610,9611,9618,9618,9620,9620,9621,9621,9622,9622,9623,9623,9624,9625,9626,9627,9628,9629,9630,9634,9635,9635,9636,9637,9637,9637,9637,9638,9639,9646,9647,9648,9649,9650,9651,9652,9656,9665,9666,9667,9681,9682,9683,9684,9685,9686,9686,9687,9687,9688,9688,9689,9689,9690,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9702,9703,9727,9728,9743,9744,9754,9755,9756,9759,9760,9761,9761,9787,9788,9789,9790,9801,9802,9803,9804,9805,9806,9807,9808,9809,9828,9828,9829,9829,9830,9830,9831,9831,9832,9844,9845,9846,9849,9849,9849,9851,9851,9852,9852,9853,9854,9854,9855,9855,9856,9856,9857,9857,9858,9858,9859,9859,9860,9860,9861,9861,9862,9862,9863,9863,9864,9865,9866,9867,9868,9868,9869,9869,9870,9870,9871,9871,9872,9872,9873,9873,9874,9874,9875,9875,9876,9876,9877,9877,9878,9878,9879,9879,9880,9880,9881,9881,9882,9882,9883,9883,9884,9884,9885,9885,9886,9886,9887,9887,9888,9888,9889,9889,9890,9890,9891,9891,9892,9892,9893,9893,9894,9894,9895,9895,9896,9896,9897,9897,9898,9898,9899,9899,9900,9900,9901,9901,9902,9902,9903,9903,9904,9905,9906,9907,9908,9908,9909,9909,9910,9910,9911,9911,9912,9912,9913,9913,9914,9914,9915,9915,9916,9916,9917,9917,9918,9918,9919,9919,9920,9920,9921,9921,9922,9922,9923,9935,9949,9952,9955,9963,9963,9963,9964,9964,9964,9965,9965,9966,9966,9967,9967,9968,9968,9969,9969,9970,9970,9971,9971,9978,9979,9987,9989,9990,9991,10028,10029,10030,10031,10032,10033,10034,10035,10036,10039,10040,10157,10158,10159,10215,10215,10217,10218,10219,10227,10227,10228,10228,10229,10233,10237,10246,10265,10266,10279,10296,10297,10297,10302,10303,10304,10305,10306,10307,10308,10308,10310,10322,10322,10322,10322,10324,10326,10331,10332,10333,10338,10339,10350,10354,10358,10359,10360,10361,10362,10363,10364,10364,10365,10366,10371) ) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 ) GROUP BY msProduct.id, `small`.url ORDER BY msProduct.id ASC LIMIT 10 " 5.0496991: SQL executed 0.0000789: Rows fetched 0.0001650: Returning raw data 0.0003860: Checked the active modifiers 0.0024819: Loaded "modChunk" with name "tpl-shop-item-small" 0.0022821: Compiled Fenom chunk with name "modchunk/73" 0.0069017: Time to load products options 5.0999141: Total time 12 582 912: Memory usage
                                    Обновление на minishop2 2.8.0-pl не помогло
                                      Андрей
                                      27 января 2021, 16:39
                                      0
                                      Так может опция group пустая в тех товарах что выводятся? Вообще если есть возможность, присылай доступы на почту или в телегу, попробуем разобраться что не так.
                                        Сергей
                                        27 января 2021, 17:20
                                        0
                                        Нет, не пустая. Вобще у каждого товара group проставлена, пустых нет
                                        Сергей
                                        27 января 2021, 17:45
                                        0
                                        Кажется заметил проблему:
                                        там где работает правильно group содержит только цифры, например 36550,
                                        а там где вываливается весь каталог, group содержит и цифры и буквы: Z2416

                                        На стринице товара с group = Z2416 в логе, вобще не содержится Options.key и Options.value.
                                        Видимо поэтому и сыпется весь каталог.

                                        получается { «Options.key»:«group»,«Options.value:=»: '~$_modx->resource.group.0~'} — выводит только числовое значение, текстовое уже не переваривает
                                        Андрей
                                        27 января 2021, 22:49
                                        0
                                        а там где вываливается весь каталог, group содержит и цифры и буквы: Z2416
                                        Да, действительно, у меня опция была числовая, потому не проверял с буквами. Сделай такой вывод, работает правильно:
                                        {'!msProducts' | snippet : [
                                        	'resources' => -$_modx->resource.id,
                                        	'parents' => 35,
                                        	'limit' => 10,
                                        	'tpl' => 'tpl-shop-item-small',
                                        	'innerJoin' => '{ "Options":{ "class":"msProductOption"}}',
                                        	'groupby' => 'msProduct.id',
                                        	'where' => ['Options.key' => 'group', 'AND:Options.value:=' => $_modx->resource.group.0]
                                        ]}
                                        Сергей
                                        28 января 2021, 08:46
                                        0
                                        Спасибо
                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                    30