Сортировка по цене. Товары с ценой 0 в конце
Здравствуйте.
У меня кнопка сортировки написана так:
Подскажите как сделать? Спасибо
У меня кнопка сортировки написана так:
<a href="#" data-sort="ms|price" data-dir="[[+mse2_sort:is=`ms|price:desc`:then=`desc`]]" data-default="desc" class="sort">По цене <span></span></a>
Но нужно, что бы товары с ценой 0 отображались в конце списка, даже если мы сортируем по возрастанию цены.Подскажите как сделать? Спасибо
Комментарии: 5
Мне кажется теми средствами, что есть в mFilter2 из коробки никак. Нужно писать свою сортировку.
Помимо поля price нужно добавить еще одно поле, отражающее, например, возможность купить товар can_buy.
И обновлять его по логике can_buy = (price > 0)
Теперь в mFilter можно прописать сортировку сначала по can_buy, а затем уже по цене. Тогда товары с нулевой ценой будут всегда в конце.
И обновлять его по логике can_buy = (price > 0)
Теперь в mFilter можно прописать сортировку сначала по can_buy, а затем уже по цене. Тогда товары с нулевой ценой будут всегда в конце.
В
В общем решение не самое красивое, но рабочее.
1) Копируем файл
2) В этом файле везде
1) Копируем файл
/assets/components/msearch2/js/web/default.js
и называем его /assets/components/msearch2/js/web/custom.js
.2) В этом файле везде
mse2Config['actionUrl']
заменяем на '/assets/components/msearch2/actionCustom.php'
3) Копируем файл /assets/components/msearch2/action.php
и называем его /assets/components/msearch2/actionCustom.php
4) В html коде сортировки указываем <a href="#" data-sort="ms|price" data-dir="[[+mse2_sort:is=`ms|price:desc`:then=`desc`]]" data-default="desc" class="sort">По цене <span></span></a>
5) В файле actionCustom.php
на 76 строчке меняем$paginatorProperties['sortby'] = !empty($sort)
? $mSearch2->getSortFields($sort)
: '';
на$sorting = '';
if (!empty($sort)) {
$sorting = $mSearch2->getSortFields($sort);
if ($sorting == '`Data`.`price` desc') {
$sorting = 'IF (`Data`.`price` > 0, 1, 0) desc, `Data`.`price` desc';
} elseif ($sorting == '`Data`.`price` asc') {
$sorting = 'IF (`Data`.`price` > 0, 1, 0) desc, `Data`.`price` asc';
}
}
$paginatorProperties['sortby'] = $sorting;
Радуемся
Так же нужно скопировать mFilter2 и назвать его mFilter2Custom.
В этом файле на 289 строке заменить
В этом файле на 289 строке заменить
if (!empty($sort)) {
$paginatorProperties['sortby'] = $mSearch2->getSortFields($sort);
$paginatorProperties['sortdir'] = '';
}
наif (!empty($sort)) {
$sorting = $mSearch2->getSortFields($sort);
if ($sorting == '`Data`.`price` desc') {
$sorting = 'IF (`Data`.`price` > 0, 1, 0) desc, `Data`.`price` desc';
} elseif ($sorting == '`Data`.`price` asc') {
$sorting = 'IF (`Data`.`price` > 0, 1, 0) desc, `Data`.`price` asc';
}
$paginatorProperties['sortby'] = $sorting;
$paginatorProperties['sortdir'] = '';
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.