2015-11-09 2 views
1

Я не знаю, как установить фильтр по умолчанию GridView. Это означает, что при загрузке страницы он загрузит фильтр с определенным условием, которое я установил.Фильтр по умолчанию в GridView с Yii2

Идея для этого? Благодаря

+0

Предоставлять Ваше Specific conditons в 'SearchModel' class –

ответ

6

Простой способ сделать это с помощью поисковой модели.

Я использую по умолчанию Gii сгенерированный код, чтобы объяснить способы

public function actionIndex() 
{ 
    $searchModel = new UserSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

    return $this->render('index', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
} 

Допустим, вы хотите динамический фильтр, когда страница загружена

использовать ссылку как

../ index.php? r = пользователь/индекс & UserSearch [id] = 7

Это добавит фильтр, где идентификатор = 7 то есть в моем случае, так как идентификатор является первичным ключом только один пользователь будет перечислен

Скажем, если вы хотите всегда применить фильтр, не показывая что-либо в URL

public function actionIndex() 
{ 
    $searchModel = new UserSearch(); 
    $searchModel->name = 'mid'; 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

    return $this->render('index', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
} 

Это позволит создать фильтр, где имя пользователя имеет строку «середина»

если вы хотите более продвинутые фильтры

вы можете редактировать поиска() функцию в UserSearch класса т здесь будет доступен запрос, используемый для заполнения данных и ActiveDataProvider. скажите, что вы не хотите указывать пользователей, которые неактивны.

public function search($params) 
    { 
     $query = User::find(); 

     $dataProvider = new ActiveDataProvider([ 
      'query' => $query, 
      ]); 

     $this->load($params); 
     $query->andFilterWhere(['active_status' => 1]); 
     .... 

этот метод даст вам безграничные способов фильтрации результатов .. Надеюсь, что это помогает ..

1

Yii2 ActiveDataProvider это сам нужен query builder, означает, что вы можете отфильтровать результаты при прохождении его объекта запроса, например:

$query = Post::find()->where['status' => 'published']; 
// Todo and more conditions with $query object 
$provider = new ActiveDataProvider([ 
    'query' => $query, 
    'pagination' => [ 
     'pageSize' => 20, 
    ], 
]); 
0

Немного поздно, но только вести запись на SO.

Одним из способов установления допустимых фильтров в Yii2 GridView виджете использовать rules функции своего filterModel объекта для возвращения разыскиваемой полой фильтрации, установленные с save атрибутами. Таким образом, вы можете удалить из этого списка все нежелательные фильтры, которые не должны отображаться в GridView.

Затем вы можете настроить запрос ActiveDataProvider в соответствии с search функцией filterModel для правильной сборки запрошенных фильтрованных данных.

2

У меня была такая же проблема, и она работала для меня

public function actionIndex() 
{ 
    $searchModel = new UserSearch(); 
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
    $dataProvider->query->andFilterWhere(['status'=>1]); 
    return $this->render('index', [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
    ]); 
} 

Это помогает выполнять фильтр для действий необходим и для всех, в моем случае мне нужно было в одиночку в условиях

Смежные вопросы