[mFilter2] Как выводить сначала товары с определённым свойством?
Добрый день.
Подскажите, как можно с помощью mFilter2 выводить в результатах сортировки сначала товары с определённым свойством (например, какого-то конкретного производителя), а затем — все остальные? При фильтрации и сортировке сверху должны оставаться товары с указанным свойством (если они есть), ниже — остальные товары, т.е. товары с указанным свойством всегда должны оставаться выше остальных.
Спасибо за подсказку
Подскажите, как можно с помощью mFilter2 выводить в результатах сортировки сначала товары с определённым свойством (например, какого-то конкретного производителя), а затем — все остальные? При фильтрации и сортировке сверху должны оставаться товары с указанным свойством (если они есть), ниже — остальные товары, т.е. товары с указанным свойством всегда должны оставаться выше остальных.
Спасибо за подсказку
Комментарии: 11
'sortby' => 'CASE `Data`.`vendor` WHEN __VENDOR__ID__ THEN 1 ELSE 0 END ASC, msProduct.id',
Вместо __VENDOR__ID__ же нужно подставить id из таблицы modx_ms2_vendors? Если да, то не помогает
Что именно не помогоает? Єто общий принцип как именно можна ето сделать. Дальше все зависит от того, к какому снипету ето надо прикрутить и поддержывает ли етот снипет такие параметры
Сниппет mFilter2, вот такой вызов
{'!mFilter2' | snippet : [
'element'=>'msProducts',
'class'=>'msProduct',
'tplOuter'=>'tpl_mfilter_outer.tpl',
'tpl'=>'tpl.product.row.custom2',
'limit'=>'12',
'sort'=>'resource|menuindex:asc',
'showEmptyFilters'=>'false',
'filters'=>'
msoption|dlina:number,
msoption|karmany:number,
msoption|razmer:default,
msoption|sezon:default'
'aliases'=>'
msoption|dlina==dlina,
msoption|karmany==karmany,
msoption|razmer==razmer,
msoption|sezon==sezon',
'parents'=>$_modx->resource.id,
'tplPageWrapper'=>'@INLINE <ul id="mse2_pagination" class="pagination">{$first}{$prev}{$pages}{$next}{$last}</ul>',
'tplPageActive' => '@INLINE <li class="active"><a href="{$href}">{$pageNo}</a></li>',
'tplPageFirst' => '@INLINE <li class="control"><a href="{$href}">«</a></li>',
'tplPageLast' => '@INLINE <li class="control"><a href="{$href}">»</a></li>',
'tplPagePrev' => '@INLINE <li class="control"><a href="{$href}">‹</a></li>',
'tplPageNext' => '@INLINE <li class="control"><a href="{$href}">›</a></li>',
'tplPageSkip' => '@INLINE <li class="disabled"><span>...</span></li>',
'tplPageFirstEmpty' => '@INLINE <li class="control"><span>«</span></li>',
'tplPageLastEmpty' => '@INLINE <li class="control"><span>»</span></li>',
'tplPagePrevEmpty' => '@INLINE <li class="disabled"><span>‹</span></li>',
'tplPageNextEmpty' => '@INLINE <li class="disabled"><span>›</span></li>',
'includeTVs'=>'catalog_hide',
'where'=>'{"catalog_hide:IS": null}'
'sortby' => 'CASE `Data`.`vendor` WHEN 7 THEN 1 ELSE 0 END ASC, msProduct.id',
]}
Я не очень хорошо разбираюсь в сортировке. Если можно, подскажите хотя бы куда смотреть, что читать. Какие-то примеры…
Убери
'sort'=>'resource|menuindex:asc',
оставь только'sortby' => 'CASE `Data`.`vendor` WHEN 7 THEN 1 ELSE 0 END ASC, msProduct.id',
Спасибо. Это помогло. А можно ещё как-то сделать так, чтобы при сортировке, положим, по цене, сначала тоже выводились товары с указанным свойством с сортировкой по цене, а потом — остальные тоже с сортировкой. Например, сначала товары производителя «Х» от самого дорогого до самого дешёвого, а потом товары всех остальных производителей, тоже от дорогого до дешёвого? В одном списке.
Здесь немного сложнее, нужно расширить класс mse2FiltersHandler по этой инсрукции и отредактировать метод getSortFields, перед return нужно добавить еще пару строк
if(!empty($this->config['sortby'])){
//если хочеш использовать те параметри что были при инициализации mFilter2
$sortby = explode(",", $this->config['sortby']);
array_unshift($data, $sortby[0]);
//можно и напрямую заново определить sortby
//array_unshift($data, "CASE `Data`.`vendor` WHEN 7 THEN 1 ELSE 0 END ASC");
}
Это очень интересный кейс. @Тодор а чего бы тебе не написать чуть более расширенную заметку на эту тему. Что-то вроде «Сортировка с использованием операторов БД».
Не припоминаю, чтобы я тут такое встречал.
Не припоминаю, чтобы я тут такое встречал.
я не самый опытный в этом вопросе, но посмотрю может как-нибудь соберу вместе свои примеры по этому вопросу и опубликую
Ой да кто тут опытный, это же MODX. Тут если знают что такое PHP — это уже опытные.
А если умеют компоненты делать — так вообще полубоги.
А если умеют компоненты делать — так вообще полубоги.
было бы очень здорово
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.