Страница 1 из 1
Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2017.09.14, 09:09
EVOSandru6
Добрый день.
У меня в файле
_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. Или же есть какое то более коробочное решение? Подскажите пожалуйста, кто сталкивался.
Re: Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2017.09.15, 18:58
futbolim
Код: Выделить всё
// SearchModel
const SORT_PRICE_ASC = 'price-asc';
const SORT_PRICE_DESC = 'price-desc';
public $sort;
// rules()
['sort', 'in', 'range' => array_keys(self::getSortLabels())],
// attributeLabels()
$labels['sort'] = 'Сортировка';
// search()
if(!empty($this->sort)) {
switch ($this->sort) {
case self::SORT_PRICE_DESC: {
$query->orderBy(['price' => SORT_DESC]);
break;
}
case self::SORT_PRICE_ASC: {
$query->orderBy(['price' => SORT_ASC]);
break;
}
default: {}
}
}
public static function getSortLabels() {
return [
self::SORT_PRICE_DESC => 'Цене, по убыванию',
self::SORT_PRICE_ASC => 'Цене, по возрастанию',
];
}
name сами доделаете по аналогии
Re: Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2017.09.16, 03:05
EVOSandru6
futbolim писал(а): ↑2017.09.15, 18:58
Код: Выделить всё
// SearchModel
const SORT_PRICE_ASC = 'price-asc';
const SORT_PRICE_DESC = 'price-desc';
public $sort;
// rules()
['sort', 'in', 'range' => array_keys(self::getSortLabels())],
// attributeLabels()
$labels['sort'] = 'Сортировка';
// search()
if(!empty($this->sort)) {
switch ($this->sort) {
case self::SORT_PRICE_DESC: {
$query->orderBy(['price' => SORT_DESC]);
break;
}
case self::SORT_PRICE_ASC: {
$query->orderBy(['price' => SORT_ASC]);
break;
}
default: {}
}
}
public static function getSortLabels() {
return [
self::SORT_PRICE_DESC => 'Цене, по убыванию',
self::SORT_PRICE_ASC => 'Цене, по возрастанию',
];
}
name сами доделаете по аналогии
Благодарю!
Re: Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2018.01.18, 12:58
macmillan
Подскажите, а как в view вывести кнопки с SORT_PRICE_DESC => 'Цене, по убыванию' и SORT_PRICE_ASC => 'Цене, по возрастанию' ?
Re: Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2018.01.18, 13:01
macmillan
futbolim писал(а): ↑2017.09.15, 18:58
Код: Выделить всё
// SearchModel
const SORT_PRICE_ASC = 'price-asc';
const SORT_PRICE_DESC = 'price-desc';
public $sort;
// rules()
['sort', 'in', 'range' => array_keys(self::getSortLabels())],
// attributeLabels()
$labels['sort'] = 'Сортировка';
// search()
if(!empty($this->sort)) {
switch ($this->sort) {
case self::SORT_PRICE_DESC: {
$query->orderBy(['price' => SORT_DESC]);
break;
}
case self::SORT_PRICE_ASC: {
$query->orderBy(['price' => SORT_ASC]);
break;
}
default: {}
}
}
public static function getSortLabels() {
return [
self::SORT_PRICE_DESC => 'Цене, по убыванию',
self::SORT_PRICE_ASC => 'Цене, по возрастанию',
];
}
Подскажите, а как в view вывести кнопки с SORT_PRICE_DESC => 'Цене, по убыванию' и SORT_PRICE_ASC => 'Цене, по возрастанию' ?
Re: Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2018.01.18, 13:12
macmillan
futbolim писал(а): ↑2017.09.15, 18:58
public static function getSortLabels() {
return [
self::SORT_PRICE_DESC => 'Цене, по убыванию',
self::SORT_PRICE_ASC => 'Цене, по возрастанию',
];
}
[/code]
Подскажите, а как в view вывести кнопки с SORT_PRICE_DESC => 'Цене, по убыванию' и SORT_PRICE_ASC => 'Цене, по возрастанию' ?
Re: Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2018.01.21, 08:16
futbolim
macmillan писал(а): ↑2018.01.18, 13:12
futbolim писал(а): ↑2017.09.15, 18:58
public static function getSortLabels() {
return [
self::SORT_PRICE_DESC => 'Цене, по убыванию',
self::SORT_PRICE_ASC => 'Цене, по возрастанию',
];
}
[/code]
Подскажите, а как в view вывести кнопки с SORT_PRICE_DESC => 'Цене, по убыванию' и SORT_PRICE_ASC => 'Цене, по возрастанию' ?
В смысле кнопки?
Нужны <a>, <button> или <select>?
Re: Как в Yii2 выполнить сортировку для dataProvider из _search файла с ActiveForm?
Добавлено: 2018.01.21, 22:25
Nerf
Лучше уж сделать сортировку через стандартный класс yii\data\Sort, чем вариант предложенный выше. Там и генерация ссылок есть.