Сортировка товара по цене, по названию и.т.д?

Всем доброй ночи, подскажите как правильно сделать сортировку товаров, например по цене, по названию....

$sort = [
    1 => 'От дорогих к дешевым',
    2 => 'От дешевых к дорогим',
    3 => 'популярности',
    4 => 'названию',
];
Сортировать по: <?= Html::dropDownList('', '', $sort) ?>


Названия сортировак будут выпадающем списке, можете кинуть пример кода как это, не могу понять как это сделать...было бы не плохо если еще покажете пример сортировки безе перезагрузки страницы AJAX.
Заранее спасибо!
  • Вопрос задан
  • 1940 просмотров
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Так же как и в стандартном crud для gridView или listView. searchModel + activeDataProvider. Создаете в поисковой моделе публичную переменную sort, от ее значения зависит настройка сортировки для activeDataProvider
Если просто, то например так:
switch($this->sort){
  case 1:
    $order = ['price' => SORT_ASC];
    break;
  case 2:
    $order = ['price' => SORT_DESC];
    break;
  case 3:
    $order = ['rating' => SORT_ASC];
    break;
  default:
    $order = ['title' => SORT_ASC];
}
$query = MyModel::find()->where(['status' => 1]);
$provider = new ActiveDataProvider([
    'query' => $query,
    'pagination' => [
        'pageSize' => 10,
    ],
    'sort' => [
        'defaultOrder' => $order
    ],
]);
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Возможно Вам поможет этот виджет и статья.
Кроме официальной документации вот ещё одна подсказка, возможно натолкнёт Вас на решение.
Обработать выпадающий список можно примерно так:
$form->field($model, 'sort')->dropDownList([1 => 'От дорогих', 2 => 'От дешёвых', 3 => 'По популярности', 4 => 'По названию'],
            ['prompt' => 'Сортировать'),
             'onchange' => '
                            $.post(
                             "'.Url::toRoute('default/ajax').'",  // путь к действию контроллера
                             {id : $(this).val()}, // значение выбранного элемента списка
                             function(data){
                               $("div#city").html(data) // получение результата и подстановка в указанный div
                             }
                            )
                          '])

Действие в контроллере может быть таким:
public function actionAjax()
{
    if(Yii::$app->request->isAjax){
      // Тут выполняете запрос к базе и возвращаете результат работы запроса.
   }
}

Это Вам нужно в пользовательской части сайта сделать, как я понял.
Если в админке, то на основе поисковой модели, выпадающий список для сортировки в gridView и фильтрация по параметру надо делать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы