Yii2-动态搜索gridView

时间:2019-06-19 15:58:59

标签: gridview yii2 pjax

我有一张具有多年记录的表格(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”的记录。

1 个答案:

答案 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']) ; 
?>