[mFilter2] Сортировка товаров при загрузке страницы.

Здравствуйте.

Вопрос знатокам, подскажите пож-а возможно ли сделать следующее:
  • на сайте настроен вывод товаров через mFilter2;
  • на данный момент, при первоначальной загрузке страницы каталога, продукты фильтруются по цене
    &sort=`ms|price:asc`
  • для товаров создал опцию «Наличие товара». Ключ для него —
    availability
    Тип свойства — числовое;
  • если availability = 0, то на карточке товара появляется надпись «под заказ», если availability > 0, то «в наличии»;
  • товары «под заказ» и «в наличии» имеют цену.
Возможно ли, использую поле availability, отфильтровать товары так, чтобы пользователю сразу отображались доступные товары, а уже только потом шли товары с пометкой «под заказ»?
И при использовании опции «цена по возрастанию» и «цена по убыванию», товары «в наличии» отображались первыми.

Мой вызов mFilter2, на всякий пожарный:
[[!mFilter2?
	&limit=`28`
	&parents=`[[*id]]`
	&element=`msProducts`
	&filters=`
          ms|vendor:vendors,
          ms|price:number,
          msoption|figure,
          msoption|height:number,
          msoption|width:number,
          msoption|color,
          msoption|bore_diameter,
          msoption|landing_distance,
          msoption|heating_method,
          msoption|connection,
          msoption|material_filter,
          msoption|quantity_of_crossbeams,
      `
      &aliases=`
        ms|vendor == vendor,
        ms|price == price,
        msoption|figure == figure,
        msoption|height == height,
        msoption|width == width,
        msoption|color == color,
        msoption|bore_diameter == bore_diameter,
        msoption|landing_distance == landing_distance,
        msoption|connection == connection,
        msoption|material_filter == material_filter,
        msoption|quantity_of_crossbeams == quantity_of_crossbeams,
      `
      &class=`msProduct`
      &sort=`ms|price:asc`
      &suggestions=`0`
		   
      &tplOuter=`tpl.dmFilter2.outer`
      &tplFilter.row.default=`tpl.dmFilter2.filter.checkbox`
      &tplFilter.outer.default=`tpl.dmFilter2.filter.outer`
      
      &tplFilter.outer.price=`tpl.dmFilter2.filter.slider`
      &tplFilter.row.price=`tpl.dmFilter2.filter.number`
      
      &tplFilter.outer.height=`tpl.dmFilter2.filter.slider`
      &tplFilter.row.height=`tpl.dmFilter2.filter.number`
      
      &tplFilter.outer.width=`tpl.dmFilter2.filter.slider`
      &tplFilter.row.width=`tpl.dmFilter2.filter.number`
	    
      &tpl=`tpl.dmCatalogProduct`
      &includeThumbs=`medium`
      &paginator=`pdoPage@ajaxPage`
      &ajax=`1`
      &tplPageWrapper=`@INLINE  <div class="pagination"><ul class="pagination__list">[[+prev]][[+pages]][[+next]]</ul></div>`
      &tplPage=`@INLINE <li class="pagination__item"><a class="pagination__link" href="[[+href]]">[[+pageNo]]</a></li>`
      &tplPageActive=`@INLINE <li class="active pagination__item"><a class="pagination__link" href="[[+href]]">[[+pageNo]]</a></li>`
              
      &tplPageLast=`@INLINE <li class="control pagination__item"><a class="pagination__link" href="[[+href]]">Последняя</a></li>`
      &tplPageFirst=`@INLINE <li class="control pagination__item"><a class="pagination__link" href="[[+href]]">Первая</a></li>`
              
      &tplPagePrev=`@INLINE <li class="control pagination__item"><a class="pagination__link icon-left-open" href="[[+href]]"></a></li>`
      &tplPageNext=`@INLINE <li class="control pagination__item"><a class="pagination__link icon-right-open" href="[[+href]]"></a></li>`
              
      &tplPagePrevEmpty=`@INLINE <li class="disabled pagination__item"><span class="pagination__link icon-left-open"></span></li>`
      &tplPageNextEmpty=`@INLINE <li class="disabled pagination__item"><span class="pagination__link icon-right-open"></span></li>`
    ]]
Спасибо.
Егор
10 февраля 2021, 00:47
modx.pro
93
0

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

Евгений Webinmd
10 февраля 2021, 11:21
0
В документации написано:
Можно указывать несколько полей через запятую, например: «resource|publishedon:desc,ms|price:asc».
В вашем случае
msoption|availability:asc,ms|price:asc

Тут вот либо ASC либо DESC
    Егор
    10 февраля 2021, 12:54
    0
    Я так понял, что пример в документации распространяется на поля, которые уже «под капотом» есть, такие как price,color, publishedon и т.д. А на опции товара, которые создаются дополнительно, нужно что-то еще кастануть )
    Приведенный пример:
    msoption|availability:asc,ms|price:asc
    Пробовал, но получаю ошибку в логах:
    pdotools/pdofetch.class.php : 172) [pdoTools] Error 42S22: Unknown column 'availability' in 'order clause'
      Роман
      10 февраля 2021, 13:09
      0
      Примерно, как-то так нужно делать, но вообще я бы вам рекомендовал добавить кастомное поле в товары.
      [[!mFilter2?
          &parents=`0`
          &element=`msProducts`
          &leftJoin=`{
              "Test1": {
                  "class": "msProductOption",
                  "on": "Test1.key = 'test1' and Test1.product_id = msProduct.id"
              }
          }`
          &sortAliases=`{"test1":"Test1"}`
          &aliases=`test1|value==test1`
          &sort=`test1:desc`
      ]]
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3