How can I have a date field range filter above the grid?
I want to have a search by date not inside the grid but before the grid.
How can I have a date field range filter above the grid?
I want to have a search by date not inside the grid but before the grid.
hi dudunegrinhu,
in view/_search.php
use kartik\daterange\DateRangePicker;
echo DateRangePicker::widget([
'model'=>$model,
'attribute'=>'datetime_range',
'convertFormat'=>true,
'pluginOptions'=>[
'timePicker'=>true,
'timePickerIncrement'=>30,
'format'=>'Y-m-d h:i A'
]
]);
and in index or whatever file u want to call just call
<?php echo $this->render('_search', ['model' => $searchModel]); ?>
so that u can filter by date range before grid. if u do not want to render _search then copy _search code before grid it also works.
regards,
webin
I’m doing this:
<?php
$form = ActiveForm::begin();
echo FieldRange::widget([
'form' => $form,
'model' => $model,
'label' => 'Enter date range',
'attribute1' => 'order_placed',
'attribute2' => 'order_eta',
'type' => FieldRange::INPUT_WIDGET,
'widgetClass' => DateControl::classname(),
'widgetOptions1' => [
'saveFormat' => 'php:U'
],
'widgetOptions2' => [
'saveFormat' => 'php:U'
],
]);
?>
but I’m not sure what is the code to add in my ModelSaearch.php so it filter the date range.
<?php
$form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]);
echo FieldRange::widget([
'form' => $form,
'model' => $model,
'label' => 'Enter date range',
'attribute1' => 'order_placed',
'attribute2' => 'order_eta',
'type' => FieldRange::INPUT_WIDGET,
'widgetClass' => DateControl::classname(),
'widgetOptions1' => [
'saveFormat' => 'php:U'
],
'widgetOptions2' => [
'saveFormat' => 'php:U'
],
]);
?><div class="form-group">
<?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?></div>
<?php ActiveForm::end(); ?>
in SearchMOdel:
->andWhere('createdAt <= :dateTo', [':dateTo' => $datefilter['to']])
->andWhere('createdAt >= :dateFrom', [':dateFrom' => $datefilter['from']])
thank u it works.
It’s not working for me. This is my full code:
_search.php view
<div class="pre-invoice-search">
<?php
$form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]);
echo FieldRange::widget([
'form' => $form,
'model' => $model,
'label' => 'Enter date range',
'attribute1' => 'operation_date',
'attribute2' => 'order_eta',
'type' => FieldRange::INPUT_DATETIME,
]);
?>
<div class="form-group">
<?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
<?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Search Model
public function search($params)
{
$query = PreInvoice::find()
->where(['current_status' => ['Order Delivered', 'Cancelled']])
->orderBy(['id' => SORT_DESC]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere('order_eta <= :dateTo', [':dateTo' => $datefilter['to']])
->andFilterWhere('order_eta >= :dateFrom', [':dateFrom' => $datefilter['from']]);
return $dataProvider;
}
And I’m getting Undefined variable: datefilter
Also my database datetime format is: YYYY-MM-DD 00:00:00
$create = Yii::$app->formatter->asDate($this->created_at, 'php:Y-m-d'); // store in database ass y-m-d
$update = Yii::$app->formatter->asDate($this->updated_at, 'php:Y-m-d'); // store in database ass y-m-d
->andFilterWhere(['>=', 'created_at', $create ]) // compare createdate
->andFilterWhere(['<=', 'updated_at', $update ])// compare with updatedate