Страница 1 из 1

Реализация фильтров на Yii2

Добавлено: 2020.02.03, 12:11
Tonni_regoletti
Здравствуйте.
Подскажите пожалуйста, какие существуют методики в создании фильтров по категориям и ценам товаров.
Я понимаю как можно реализовать такой фильтр, но хочу сделать это правильно и красиво.
Вопрос конечно достаточно общий, но если можно хотя бы укажите направление в котором можно идти.
Заранее спасибо

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.03, 13:18
unknownby
Смотря какой вариант понравится тебе самому, так и делать.
Можно сделать в верхнем блоке сортировку. Такого плана
Можно сделать такого плана как в большинстве магазинов делают Фильтры
Если сильно не заморачиваться, то просто Обычный поиск

P.S. у меня вот так, только фильтры сразу закрыты Скриншот

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.03, 13:30
Tonni_regoletti
Спасибо за ответ.
Я не совсем о том, как организовать логику работы.
То есть как это должно выглядеть в беке ?

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.03, 13:44
unknownby
Во-1 у тебя идет вывод данных из какой-то основной модели.
Предположим это Product. Создается модель ProductSearch, которая расширяется (extends) основной моделью Products

Код: Выделить всё

class ProductSearch extends Product
Все твои фильтры должны отдавать параметры GET или POST в модель поиска через контроллер. Как тебе удобней.
В контроллере

Код: Выделить всё

$searchModel = new ProductsSearch;
$dataProvider = $searchModel->search(\Yii::$app->getRequest()->get());
В модели поиска организованы условия, например:

Код: Выделить всё

	$query->andFilterWhere([
		'productsextra_id' => $this->productsextra_id,
        ]);

        $query->andFilterWhere(['like', 'products_name', $this->products_name]);

        if('' != $this->products_price_min){
		$query->andFilterWhere(['>=', 'products_price', $this->products_price_min]);
	}

	if('' != $this->products_price_max){
		$query->andFilterWhere(['<=', 'products_price', $this->products_price_max]);
	}
Ну и сама модель поиска возвращает тебе dataProvider
Который приходит в тот же GridView или ListView, чтобы отобразить твои товары.

Ты это спрашивал?

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.03, 13:45
Tonni_regoletti
Да примерно про это спасибо.

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.07, 16:54
Tonni_regoletti
А нормально будет если не использовать dataProvider ?
А то он никак не ложится, так как мне нужно

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.07, 22:51
unknownby
Tonni_regoletti писал(а):
2020.02.07, 16:54
А нормально будет если не использовать dataProvider ?
А то он никак не ложится, так как мне нужно
А через что ты выводишь данные в представлении?

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.10, 10:28
Tonni_regoletti
unknownby писал(а):
2020.02.07, 22:51
Tonni_regoletti писал(а):
2020.02.07, 16:54
А нормально будет если не использовать dataProvider ?
А то он никак не ложится, так как мне нужно
А через что ты выводишь данные в представлении?
Получил в контроллере и передела в вид )

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.10, 11:45
unknownby
Tonni_regoletti писал(а):
2020.02.10, 10:28
Получил в контроллере и передела в вид )
Так в чем вопрос то? Если сделал как я написал, то проблем не должно быть с отображением информации.
Суть сама в том, как и что ты хочешь делать с данными в представлении. Если интересует просто вывод информации, то можно найти данные в модели и передать их на представление, если нужны фильтры и дополнительные возможности как есть у ListView (например), тогда делаем через dataProvider.

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.10, 14:26
bemulima
с помощью gii можете сгенерировать CRUD только надо еще указать путь Search Model Class и тогда у вас вся стандартная логика для фильтра создастся, как @unknownby описал выше.

Re: Реализация фильтров на Yii2

Добавлено: 2020.02.11, 14:08
Tonni_regoletti
Спасибо за ответы.