Сортировка через mFilter2 (опций тов.) по asc/desc
Добрый день, помогите пожалуйста решить задачу, пытаюсь сделать сортировку через mFilter2, характеристик (опции minishop2) по asc/desc на лету, но при сортировки через фильтр ругается Could not process query, error #1054: Unknown column 'voltageadapter' in 'order clause', хотя таблица опций джоинится.
Другие поля price, article и.т.д сортирует по возрастанию и убыванию на ура, tvшки так же нормально,
?sort=msoption|price:desc — работает
?sort=msoption|voltageadapter:asc — не работает, такие поля инклюдить не хочет.
Может кто сталкивался с таким вопросом уже?
Другие поля price, article и.т.д сортирует по возрастанию и убыванию на ура, tvшки так же нормально,
?sort=msoption|price:desc — работает
?sort=msoption|voltageadapter:asc — не работает, такие поля инклюдить не хочет.
Может кто сталкивался с таким вопросом уже?
Комментарии: 10
Неужели никто не знает?
Я сомневаюсь, что здесь есть телепаты.
Покажи полный вызов mFilter2, глядишь, кто-то и поможет.
Покажи полный вызов mFilter2, глядишь, кто-то и поможет.
Вызываю так
[[!mFilter2?
&limit=`0`
&showLog=`1`
&element=`msProducts`
&parent=`0`
&filters=`
ms|price:number
,parent:categories
,msoption|tags
,ms|vendor:vendors
,ms|availability:availability
,msoption|voltageadapter
`
&tpls=`tpl.msProducts.row`
&class=`msProduct`
&tplOuter=`tpl.mFilter2.outer`
&tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
&tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
]]
Результат0.0000598: xPDO query object created
0.0002789: leftJoined msProductData as Data
0.0002301: leftJoined msVendor as Vendor
0.0000062: Grouped by msProduct.id
0.0001261: 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.0000398: Added selection of msProductData: `article`, `price`, `old_price`, `weight`, `image`, `thumb`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`, `availability`, `rating_item`
0.0000339: 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.0000741: Processed additional conditions
0.0004179: Added where condition: class_key=msProduct, msProduct.id:IN(189,193,198,256,257,258,259,260,261,323), msProduct.published=1, msProduct.deleted=0
0.0000951: Sorted by `voltageadapter` desc,
0.0006618: 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`, `Data`.`rating_item`, `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` 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` WHERE ( `msProduct`.`class_key` = 'msProduct' AND `msProduct`.`id` IN (189,193,198,256,257,258,259,260,261,323) AND `msProduct`.`published` = 1 AND `msProduct`.`deleted` = 0 ) GROUP BY msProduct.id ORDER BY `voltageadapter` desc "
0.0049410: Could not process query, error #1054: Unknown column 'voltageadapter' in 'order clause'
0.0081840: Total time
5 767 168: Memory usage
0.0003221: pdoTools loaded.
0.0121579: Getting filters for saved ids: (189,193,198,256,257,258,259,260,261,323)
0.0044332: Filters retrieved.
0.0008869: Suggestions retrieved.
0.0323491: Total filter operations: 20
0.0501812: Total time
5 767 168: Memory usage
Стандартная сортировка по полю тому же publishedon работает как нужно<div id="mse2_sort">
[[%mse2_sort]]
<a href="#" data-sort="resource|publishedon" data-dir="[[+mse2_sort:is=`resource|publishedon:desc`:then=`desc`]]" data-default="desc" class="sort">[[%mse2_sort_publishedon]]</a>
</div>
Пытаюсь выбрать так<div id="mse2_sort">
[[%mse2_sort]]
<a href="#" data-sort="msoption|voltageadapter" data-dir="[[+mse2_sort:is=`msoption|voltageadapter:desc`:then=`desc`]]" data-default="desc" class="sort">Вольтаж</a>
</div>
Соответственно пишет что нет данных для отображения но тут и логично, не понятно как получить опцию для сортировки на лету.
А куда пишутся данные voltageadapter? У тебя ругается, что нет такой колонки, соответственно и нет результата.
Те таблицы что ты джонишь, ни в одной нет такой колонки, а выборку пытаешься сделать по ней.
Те таблицы что ты джонишь, ни в одной нет такой колонки, а выборку пытаешься сделать по ней.
Получается так что сами данные записаны в таблице modx_ms2_options — опций самого магазина minishop2, и там уже идут поля, id, key, caption, description, measure_unit, category, type, properties, соответственно где key, сама опция voltageadapter и потом значении самой опции properties, например варианты вольтажа у опции voltageadapter. Не сосем понимаю как правильно запрос организовать через mFilter2, а именно как приджоинить таблицу modx_ms2_options корректно.
присоединяюсь к вопросу. Как подключить опции для сортировки, вроде надо использовать &leftJoin но что-то не пойму как оформить запрос для mfilter2. Может кто подскажет)
вот такое нагуглил но что-то не проходит
Ошибка где-то что-ли?
'leftJoin'=>'{
"data": {
"class": "msProductOptions",
"on": "msProduct.id = data.product_id"
}'
вызов ?sort=data|tip:ascОшибка где-то что-ли?
Вот пример сортировки по опциям товаров в документации к mSearch2:
[[!mFilter2?
&parents=`0`
&element=`msProducts`
&leftJoin=`{
"Option": {
"class": "msProductOption",
"on": "Option.key = 'test1' and Option.product_id = msProduct.id"
}
}`
&sortAliases=`{"msoption":"Option"}`
&sort=`msoption|value:asc`
]]
А можно по подробнее, мне непонятен пример. Если мне нужно еще две опции сюда подтянуть, то как будет пример выглядеть? Можете подсказать?
Подскажите, а как можно сделать сортировку не через ссылку , а через выпадающий список ?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.