我有一张具有多年记录的表格(2017、2018、2019等)。默认情况下,我需要gridView显示更大的年份(在此示例中为“ 2019”)。 我是这样做的。可以吗?
MaintenanceController.php
$greaterYear = Maintenance::find()->select(['year'])->where(['id_type' => $id_type])->orderBy(['year' => SORT_DESC])->one();
$searchModel->year = $greaterYear->year;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('view', [
'model' => $this->findModel($id_type),
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
?>
但是我需要与其他年份进行过滤,现在我已经有了与其他年份的链接:
view.php
<?php echo Html::a('2017', '', ['class' => 'year label label-default', 'id' => '2017']) ; ?>
当我单击其他年份的链接时,我现在需要过滤器gridView 我使用Pjax制作了“技巧”,但是我认为这不好,而且如果我从gridView中隐藏“年份”显然不起作用。
view.php
<?php
$script = <<< JS
$(function(){
$('body').on('click', '.year', function(e) {
e.preventDefault();
$('input[name="PlanoManutencaoSearch[ano]"').val($(this).attr("id"));
$("#w0").yiiGridView("applyFilter");
});
});
JS;
$this->registerJs($script);
?>
哪种方法实现呢?
请注意,我在与this/controller/action?id_type=8
之类的url参数一起使用此gridView的情况下,因此无法完全更改该url,因此我需要可以从其他“属性”中添加过滤器(url是增量的)
更新添加完整的视图文件。
<div class="maintenance-view">
<div class="panel-group">
<div class="panel panel-primary">
<div class="panel-heading">Filter</div>
<div class="panel-body">
<?php echo Html::a('2019', '', ['class' => 'year label label-default', 'id' => '2019']) ; ?>
<?php echo Html::a('2018', '', ['class' => 'year label label-default', 'id' => '2018']) ; ?>
<?php echo Html::a('2017', '', ['class' => 'year label label-default', 'id' => '2017']) ; ?>
</div>
</div>
</div>
<?php Pjax::begin(); ?> <?php echo GridView::widget([
'dataProvider' => $dataProvider,
//'filterModel' => $searchModel,
'columns' => [
'year',
['attribute' => 'id_client',
'value' => function($model){
if (isset($model->idClient->name)) {
return $model->idClient->name;
}
}
],
],
]); ?>
<?php Pjax::end(); ?>
</div>
<?php
$script = <<< JS
$(function(){
$('body').on('click', '.year', function(e) {
e.preventDefault();
$('input[name="PlanoManutencaoSearch[ano]"').val($(this).attr("id"));
$("#w0").yiiGridView("applyFilter");
});
});
JS;
$this->registerJs($script);
?>
在这种情况下,我需要在页面加载时在gridView中显示记录,其中“ year” =“ 2019”($greaterYear->year
(可随控制器而变化))。
当我单击其他年份(例如“ 2017”)的label
时,GridView仅显示年份=“ 2017”的记录。
答案 0 :(得分:0)
如果要手动通过searchModel过滤器:
取消注释您的filterModel *
<?php echo GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel, //<--- Renable....
...
?>
过滤器链接
<?php
$route = '?PlanoManutencaoSearch[ano]=2019';
echo Html::a('2019', $route, ['class' => 'year label label-default', 'id' => '2019']) ;
?>