@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. Или же есть какое то более коробочное решение? Подскажите пожалуйста, кто сталкивался.
  • Вопрос задан
  • 3657 просмотров
Решения вопроса 2
Сортировка настраивается посредством свойства 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
Ответ написан
qonand
@qonand
Software Engineer
Предполагаю, что нужно создать новое свойство в ProductsSearch и каким то образов вставлять его значение в defaultSort.

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

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

и на уровне JS ловите выбор из этого списка значения и перезагружайте страницу
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov
Web developer
Уже стандарт де-факто для сортировки - клик на заголовок столбца. Чем вас это не устраивает из коробки? Зачем все эти костыли с лишним селект-боксом?
Ответ написан
Ваш ответ на вопрос

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

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