@EVOSandru6

Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?

Добрый день.

У меня в файле _search Есть набор для фильтрации dataProvider в ListView:

<?php $form = ActiveForm::begin([
          'options' => ['data-pjax' => true ],
        'method' => 'post',
    ]); ?>
<?= $form->field($model, 'id')->textInput([
        'type'=>'number'
    ]) ?>

<!-- рабочий price filter -->

<?= $form->field($model, 'name')->textInput() ?>
<?php ActiveForm::end(); ?>


Помимо фильтрации я хочу выполнять сортировку.

Глянул на примере обычного грида в Network уходят запросы типа:

По возрастанию:

products?sort=id

По убыванию:

products?sort=-id

Хочу сделать dropDown для сртировки, варианты которого -

1. name от а до я
2. name от я до а
3. price по возрастанию
4. price по убыванию

Предполагаю, что нужно создать новое свойство в ProductsSearch и каким то образов вставлять его значение в defaultSort. Или же есть какое то более коробочное решение? Подскажите пожалуйста, кто сталкивался.
  • Вопрос задан
  • 271 просмотр
Решения вопроса 2
  • qonand
    @qonand
    Freelancer/Web Software Engineer
    Предполагаю, что нужно создать новое свойство в ProductsSearch и каким то образов вставлять его значение в defaultSort.

    Как то не правильно добавлять в поисковую модель свойство для сортировки, все таки это логически разные вещи.

    Просто сделайте select с значениями
    [
        'name' => 'name от а до я',
        '-name' =>  'от я до а',
        'price' => 'price по возрастанию',
        -'price' => 'price по убыванию'
    ]

    и на уровне JS ловите выбор из этого списка значения и перезагружайте страницу
    Ответ написан
  • evgenybuckharev
    @evgenybuckharev
    Сортировка настраивается посредством свойства sort дата провайдера
    $dataProvider = new ActiveDataProvider([
         'query' => $query,
         'sort'=> [
         'attributes' => [
                'age',
                'name' => [
                    'asc' => ['first_name' => SORT_ASC, 'last_name' => SORT_ASC],
                    'desc' => ['first_name' => SORT_DESC, 'last_name' => SORT_DESC],
                    'default' => SORT_DESC,
                    'label' => 'Name',
                ],
            ],
     ]);

    Заполните массив attributes параметрами по которым вам необходимо сортировать, и далее передавайте данные параметры через get строку запроса в виде ...?sort=-name
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы