Сортировка по умолчанию в mFilter2 Новый


Доброго времени суток.
Прошу помощь по выводу товаров с сортировкой по опциям товаров по умолчанию.

У меня есть товар с некоторыми характеристиками:


Вывожу на странице через mFilter2
Не могу поставить сортировку по умолчанию, например по полю: ширина
[[!mFilter2?
	&limit=`30`
	&element=`msProducts`
	&ajaxMode=`default`
	&includeThumbs=`231x225`
	&showLog=`1`
	&parents=`1,2,3` 
	&filters=`
	    ms|price:number
		,msoption|material_id:radio
		,msoption|type_id:radio
		,msoption|color_id:radio
		,msoption|size_h:number
		,msoption|size_w:number
		,msoption|size_d:number
	`
	&tpls=`tpl.msProducts.row`
	&class=`msProduct`

	&sort=`resource|size_w:desc` // тут нужно задать сортировку

	&tplOuter=`tpl.mFilter2.outer`
	&tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
	&tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
	&tplFilter.outer.msoption|size_h=`tpl.mFilter2.filter.slider`
	&tplFilter.row.msoption|size_h=`tpl.mFilter2.filter.number`
	&tplFilter.outer.msoption|size_w=`tpl.mFilter2.filter.slider`
	&tplFilter.row.msoption|size_w=`tpl.mFilter2.filter.number`
	&tplFilter.outer.msoption|size_d=`tpl.mFilter2.filter.slider`
	&tplFilter.row.msoption|size_d=`tpl.mFilter2.filter.number`
   	&tplFilter.outer.msoption|material_id=`tpl.mFilter2.filter.outer`
	&tplFilter.row.msoption|material_id=`tpl.mFilter2.filter.checkbox`
	&tplFilter.outer.msoption|color_id=`tpl.mFilter2.filter.outer`
	&tplFilter.row.msoption|color_id=`tpl.mFilter2.filter.checkbox`
]]
Посмотрев кеш ресурса с товаром, увидел что в массиве resource содержится
'size_w' => '1020',
Поэтому и решил прописать в &sort — resource
Так же пробовал заменить resource на эти: ms, ms_product, ms_vendor, tv. Не выводить ничего.
Как я понимаю, нужно подключить таблицу в вывод, чтобы значения откуда то брались, что-то на примере includeTVs, но в документации я не нашел ничего похожего.
Прошу помощи.

Логи показывают что нет такой колонки:
0.0478261: pdoTools loaded.
0.0000968: Conditions prepared
0.0000260: xPDO query object created
0.0000858: leftJoined msProductData as Data
0.0000570: leftJoined msVendor as Vendor
0.0000570: leftJoined msProductFile as 231x225
0.0000010: Grouped by msProduct.id, `231x225`.url
0.0000770: 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.0000420: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`, `srok_postavki`, `quantity_stock`
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.0000329: Added selection of msProductFile: url as `231x225`
0.0000670: Processed additional conditions
0.0001650: Added where condition: class_key=msProduct, msProduct.id:IN(32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,93,94,95,96,97,99,100,101,102,103,105,106,107,109,110,111,114,115,116,117,118,119,120,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,164,166,169,170,171,172,173,174,175,176,177,178,179,181,182,183,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,212,213,214,216,217,218,219,220,221,222,223,225,226,227,228,230,231,232,234,236,237,240,315,316,332,334,339,340,341,343,344,345,346,347,348,349,350,351,352,353,354,355,356,359,363,365,366,371,372,375,376,377,378,384,385,386,387,388,389,390,391,392,393,394,398,417), msProduct.published=1, msProduct.deleted=0
0.0000310: Sorted by `msProduct`.`size_h`desc, 
0.0000100: Limited to 30, offset 0
0.0001881: 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`.`srok_postavki`, `Data`.`quantity_stock`, `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`, `231x225`.url as `231x225` FROM `km_site_content` AS `msProduct` LEFT JOIN `km_ms2_products` `Data` ON `msProduct`.`id` =  `Data`.`id` LEFT JOIN `km_ms2_vendors` `Vendor` ON Data.vendor=Vendor.id LEFT JOIN `km_ms2_product_files` `231x225` ON `231x225`.product_id = msProduct.id AND `231x225`.rank = 0 AND `231x225`.path LIKE '%/231x225/%' WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `msProduct`.`id` IN (32,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,65,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,93,94,95,96,97,99,100,101,102,103,105,106,107,109,110,111,114,115,116,117,118,119,120,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,164,166,169,170,171,172,173,174,175,176,177,178,179,181,182,183,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,212,213,214,216,217,218,219,220,221,222,223,225,226,227,228,230,231,232,234,236,237,240,315,316,332,334,339,340,341,343,344,345,346,347,348,349,350,351,352,353,354,355,356,359,363,365,366,371,372,375,376,377,378,384,385,386,387,388,389,390,391,392,393,394,398,417) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 )  GROUP BY msProduct.id, `231x225`.url ORDER BY `msProduct`.`size_h`desc LIMIT 30 "
0.0023739: Could not process query, error #1054: Unknown column 'msProduct.size_h' in 'order clause'
0.1495512: Total time
6 291 456: Memory usage
30 мая 2017, 11:39    Илья   
0    306 0

Комментарии (4)

  1. Алексей Ерохин 30 мая 2017, 13:45 # +1
    &leftJoin=`{
                "size_h":{
                    "class":"msProductOption",
                    "on":"size_h.product_id = msProduct.id AND size_h.key = 'size_h'"
                }
            }`
          &select=`{
                "size_h":"COALESCE(size_h.value, 0) as size_h"
            }`,
    &sortby=`size_h`
    
    примерно так
    1. Илья 30 мая 2017, 14:49 # 0
      Я вот не совсем понимаю как работать с leftJoin, не могли бы Вы объяснить, чтобы дописать Вашу конструкцию
      1. Алексей Ерохин 30 мая 2017, 15:38 # +1
        Мы присоединяем к выборке еще одну таблицу (она определяется по «class»:«msProductOption») и даем ей алиас для удобства («size_h»). Условия присоединения: «on»:«size_h.product_id = msProduct.id AND size_h.key = 'size_h'» (то есть ищем совпадение по id продукта и по названию опции).
        &select=`{
                    "size_h":"COALESCE(size_h.value, 0) as size_h"
                }`,
        Здесь указываем что дополнительно нужно выбрать колонку COALESCE(size_h.value, 0) (функция вернет либо значение, либо 0 — если данных нет) с алиасом size_h, по которому она будет доступна в выборке.
        LEFT JOIN означает, что мы получим все данные из основной таблицы (msProduct) и данные из присоединенной таблицы (либо NULL если данных нет)
        1. Илья 30 мая 2017, 18:22 # 0
          Спасибо за разъяснения. Очень помогли. В доках оказывается есть подобное, но не сразу было понятно.
          Может кому пригодится, если нужно сделать сортировку по опциям товара miniShop2:
          2 поля size_h и color_id, которые нам надо отсортировать
          &leftJoin=`
          	{
                      "size_h":{
                          "class":"msProductOption",
                          "on":"size_h.product_id = msProduct.id AND size_h.key = 'size_h'"
                      },
                      "color":{
                          "class":"msProductOption",
                          "on":"color.product_id = msProduct.id AND color.key = 'color_id'" 
                      }
                  }`
          &sortAliases=`{"size_h":"size_h","color":"color"}` // добавляем псевдоним
          &sort=`size_w|value:desc,color|value:asc`
          
    Вы должны авторизоваться, чтобы оставлять комментарии.