Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Сортировка по полю Интернет-магазин

Страницы: 1  |  2
23.02.2017, 17:16
Нерсесов Сергей Николаевич

Зарегистрирован:
2014-06-16
Сообщений: 35

Не могу понять...не работает "Сортировка по полю"...в компоненте Интернет магазина...

Код:
$f_Price[DESC]


Сортирую по системному полю Цена по убыванию...ноль изменений...и так по любому полю...что я не правильно делаю?
24.02.2017, 08:48
Владимир
Web-Element

Зарегистрирован:
2011-07-07
Сообщений: 62

Видимо у вас в системных настройках этого компонента настроена другая сортировка. Ищите сортировку там.
09.03.2017, 16:51
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 125

Всем привет. Продолжу тему похожим вопросом. В компоненте с помощью системных настроек сделана возможность выборки товаров, вводятся параметры для запроса и потом товары выводятся в соответствии с выбором клиента по $query_where.
Цитата:
$ignore_cc = 1;
$query_where = 'новые условия выбора';

Допустим по новым условиям выборки, отобралось 10 товаров. Если после этого отсортировать товары по полю цена, таким образом
Код:
 if (isset($_GET['sortList'])) {
$orderPrice_query=$_GET['sortList'];
if($orderPrice_query == 'upPrice'){
$ignore_cc=1;
$query_order = "a.Price DESC";
}elseif($orderPrice_query == 'downPrice'){
$ignore_cc=1;
$query_order = "a.Price ASC";
}
}

то вся выполненная до этого выборка отменяется и показывается полный каталог товаров отсортированный по цене. Для выборки параметры собираются тоже через GET.
Подскажите плз, как так сделать, чтобы сортировка выполнялась только для результата выборки, а не по всему каталогу?
Плохо объяснил, но буду благодарен за любой комментарий.
16.04.2017, 14:46
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 954

Чтобы условия сортировки в одной строке не заменялись другой строкой, вам нужно там, где стоят if'ы, не перезаписывать $query_order, а дополнять его через запятую, примерно так:
$query_order .= ", a.Price ....";

22.05.2017, 10:25
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 125

Спасибо, Руслан. Но не совсем понял, если писать в таком виде $query_order .= "a.Price ASC"; то результат тот же, сортируется и выводится весь список товаров. А если добавлять запятую перед полем $query_order .= ", a.Price ASC"; то получаю ошибку синтаксиса.
22.05.2017, 10:40
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 954

Виталий, тогда нужно видеть полностью весь код системных настроек компонента. Иначе непонятно, что у вас формируется до того куска кода, который вы привели.

22.05.2017, 13:19
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 125

Получается так, сначала проверяем по сколько товаров на страницу выводить, потом сортировка по цене, а дальше получаем данные из формы для выбора тех или иных товаров по фильтру. Единственное что меня еще смущает, что в данном случае работают разные формы для получения данных сортировки и фильтрации и каждая делает свой submit.
Код:
//количество отображаемых товаров
if (isset($_GET['recList'])) {
$portion=$_GET['recList'];
$recNum = $portion==-1 ? 9999 : $portion;
}
//Сортируем по цене
if (isset($_GET['sortList'])) {
$orderPrice_query=$_GET['sortList'];
if($orderPrice_query == 'upPrice'){
$ignore_cc=1;
$query_order .= "a.Price ASC";
}elseif($orderPrice_query == 'downPrice'){
$ignore_cc=1;
$query_order .= "a.Price DESC";
}
}

//Получаем даннные для фильтра
//Средняя цена
if(isset($_GET['minCost'])){
$min = $_GET['minCost'];
}
if(isset($_GET['maxCost'])){
$max = $_GET['maxCost'];
}
if($min != 0){
$query_price = " AND "." (a.Price BETWEEN $min AND $max)";
}else{$query_price = "";}

//Тип мотоцикла
if(isset($_GET['type-moto'])){
$el = $_GET['type-moto'];
$query_bikeType = " AND ("."a.bike_type LIKE '".implode("' OR a.bike_type LIKE '",$el)."')";
}else{$query_bikeType = "";}

//Объем двигателя
if(isset($_GET['minValue'])){
$min = $_GET['minValue'];
}
if(isset($_GET['maxValue'])){
$max = $_GET['maxValue'];
}
if($min != 0){
$query_volume = " AND "." a.volume BETWEEN $min AND $max";
}else{$query_volume = "";}

$ignore_cc = 1;
$query_where = "1 $query_price $query_bikeType $query_volume";
22.05.2017, 13:56
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 954

Перечитал - похоже, я не совсем верно вначале понял ваш вопрос.
Если так, то вам нужно было всего лишь убрать строчки $ignore_cc и вернуть назад $query_order:
Код:
//Сортируем по цене
if (isset($_GET['sortList'])) {
$orderPrice_query=$_GET['sortList'];
if($orderPrice_query == 'upPrice'){
$query_order = "a.Price ASC";
}elseif($orderPrice_query == 'downPrice'){
$query_order = "a.Price DESC";
}
}


22.05.2017, 14:11
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 125

да, так и сделал, Спасибо. Но беда похоже все-таки в том что первый результат я получаю из формы, которая передает параметры в GET для подбора товаров, а второй когда хочу отсортировать по цене, также получаю из формы но только в GET параметрах уже пропадают данные фильтра и остается только с сортировкой. В итоге страница перезагружается и сортируются и выводятся полностью все товары.
Код:
<select class='sort-price' onchange="this.form.submit()" name='sortList'>
<option <?if($recList==''){ echo "selected";}?> disabled value=''>Выбрать</option>
<option <?if($sortList=='upPrice'){ echo "selected";}?> value='upPrice'>Возрастанию цены</option>
<option <?if($sortList=='downPrice'){ echo "selected";}?> value='downPrice'>Убыванию цены</option>
</select>

Это форма для сортировки. надо похоже с ней разбираться и с передачей параметров
22.05.2017, 14:27
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 954

Разве после того, как вы убрали в обоих местах $ignore_cc, у вас так и показываются все товары из всех разделов каталога? Такое может быть только если где-то в системных настройках не убрано $ignore_cc и/или $ignore_sub. Бывают, конечно, и экзотические ошибки, типа неправильно сформулированного OR в query_where.
Если вы владеете SQL - попробуйте вывести в префиксе списка объектов переменную $message_select, и тогда сможете однозначно увидеть причину, почему в условия выборки попадает что-то не то.

22.05.2017, 16:53
viros
Правдин Виталий

Зарегистрирован:
2008-12-03
Сообщений: 125

ignore все убраны, но что-то все таки выборка дурит. Попробую проверить запрос. Еще раз спасибо.
а сам каталог с товарами вотhttp://www.mr-moto.ru/Netshop/moto/motosalon/
198 196 2017-05-23 06:42:43 14706
Страницы: 1  |  2
Описание проекта