[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 — это уже опытные. 
А если умеют компоненты делать — так вообще полубоги.
                    А если умеют компоненты делать — так вообще полубоги.
                было бы очень здорово            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.