Сортировка через 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 — не работает, такие поля инклюдить не хочет.

Может кто сталкивался с таким вопросом уже?
Владимир
03 июня 2016, 11:55
modx.pro
2
6 781
0

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

Владимир
06 июня 2016, 14:27
0
Неужели никто не знает?
    Марат Марабар
    06 июня 2016, 18:53
    0
    Я сомневаюсь, что здесь есть телепаты.
    Покажи полный вызов mFilter2, глядишь, кто-то и поможет.
    Владимир
    06 июня 2016, 19:30
    0
    Вызываю так

    [[!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>
    Соответственно пишет что нет данных для отображения но тут и логично, не понятно как получить опцию для сортировки на лету.
      Марат Марабар
      06 июня 2016, 22:25
      0
      А куда пишутся данные voltageadapter? У тебя ругается, что нет такой колонки, соответственно и нет результата.
      Те таблицы что ты джонишь, ни в одной нет такой колонки, а выборку пытаешься сделать по ней.
      Владимир
      07 июня 2016, 18:05
      0
      Получается так что сами данные записаны в таблице modx_ms2_options — опций самого магазина minishop2, и там уже идут поля, id, key, caption, description, measure_unit, category, type, properties, соответственно где key, сама опция voltageadapter и потом значении самой опции properties, например варианты вольтажа у опции voltageadapter. Не сосем понимаю как правильно запрос организовать через mFilter2, а именно как приджоинить таблицу modx_ms2_options корректно.
        Ilya Ev
        17 августа 2016, 12:42
        0
        присоединяюсь к вопросу. Как подключить опции для сортировки, вроде надо использовать &leftJoin но что-то не пойму как оформить запрос для mfilter2. Может кто подскажет)
          Ilya Ev
          17 августа 2016, 15:45
          0
          вот такое нагуглил но что-то не проходит
          'leftJoin'=>'{
                  "data": {
                   "class": "msProductOptions",
                   "on": "msProduct.id = data.product_id"
                  }'
          вызов ?sort=data|tip:asc

          Ошибка где-то что-ли?
            ck
            ck
            31 мая 2017, 16:33
            2
            0
            Вот пример сортировки по опциям товаров в документации к 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`
            ]]
              Никита Серов
              26 марта 2021, 14:31
              0
              А можно по подробнее, мне непонятен пример. Если мне нужно еще две опции сюда подтянуть, то как будет пример выглядеть? Можете подсказать?
            Валерий
            25 мая 2017, 17:54
            0
            Подскажите, а как можно сделать сортировку не через ссылку , а через выпадающий список ?
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              10