Как в GridView сделать самописный фильтр?
Как в GridView сделать самописный фильтр?
По-умолчанию в grid view фильтр просто как input строка. Мне непонятно как нацепить на неё виджет выбора даты(ибо при обычном джиквери навешивании не срабатывает, т.к при клике на дату теряется фокус и таблица сразу обновляется). И ещё хочу узнать как сделать нестандартный фильтр(ну в нём будет несколько полей-фильтров(inxut,checkbox итд итп))
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Как в GridView сделать самописный фильтр?
Я делал так, для User:
View:
UserSearch:
View:
Код: Выделить всё
//...
[
'attribute' => 'last_visit',
'filter' => \yii\jui\DatePicker::widget([
'model' => $searchModel,
'attribute' => 'date_from',
'dateFormat' => 'dd.MM.yyyy',
'options' => [
'class' => 'form-control',
'placeholder' => 'Select Date',
'data' => [
'pjax' => true,
],
]
]),
'format' => 'datetime',
],
//...
Код: Выделить всё
//...
class UserSearch extends User
{
public $date_from;
public function rules()
{
return [
[['id', 'status', 'created_at', 'updated_at'], 'integer'],
[['username', 'date_from', 'email'], 'safe'],
];
}
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
public function search($params) {
$query = User::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
$query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'id' => $this->id,
'status' => $this->status,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
]);
$query->andFilterWhere(['like', 'username', $this->username])
->andFilterWhere(['like', 'email', $this->email])
->andFilterWhere(['>=', 'last_visit', $this->date_from ? strtotime($this->date_from . ' 00:00:00') : null])
->andFilterWhere(['<=', 'last_visit', $this->date_from ? strtotime($this->date_from . ' 23:59:59') : null]);
return $dataProvider;
}
}
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Как в GridView сделать самописный фильтр?
Спасибо, а нестандартный можно ли сделать?
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Как в GridView сделать самописный фильтр?
Что значит не стандартный?
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Как в GridView сделать самописный фильтр?
Вот я делал для темизированной адмники фильтр с bootstrap-datepicker
UserSearch тот же.
Код: Выделить всё
$language = Yii::$app->language;
$js = new \yii\web\JsExpression("
$(document).on('ready pjax:success', function() {
$('#datepicker').datepicker({
language: '{$language}',
autoclose: true,
format: 'dd.mm.yyyy'
});
});
");
$this->registerJs($js, \yii\web\View::POS_END);
//...
[
'attribute' => 'last_visit',
'filter' => '<div class="form-group"><div class="input-group date"><div class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></div>'
. Html::activeInput('text', $searchModel, 'date_from', [
'id' => 'datepicker',
'class' => 'form-control',
'placeholder' => 'Select Date',
'data' => [
'pjax' => true,
],
]) . '</div></div>',
'format' => 'datetime',
'headerOptions' => [
'style' => 'width: 165px;'
]
],
//...
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Как в GridView сделать самописный фильтр?
Прикольно,спасибо.