Yii2 - 网格视图显示使用搜索时的所有数据

时间:2016-09-27 15:39:11

标签: php search gridview yii2

我创建了一个显示Global Search的{​​{1}},但这是第一次加载搜索页面或搜索字段为空并且您搜索时的所有数据将显示数据库。

我在另一个视图中使用了grid view视图 _search.php查看:

_search

主要观点:

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'method' => 'get',
]); ?>


<?= $form->field($model, 'globalSearch') ?> 


<div class="form-group">
    <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
    <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
</div>

<?php ActiveForm::end(); ?>   

还需要其他什么吗?让我知道。

2 个答案:

答案 0 :(得分:1)

如果要显示网格,请在全局搜索为空时让过滤器模型返回没有结果的数据提供者

class FilterModel extends Model {
    public $globalSearch;
    ::
    ::
    public function search($params) {
        $provider = new ActiveDataProvider(
            $query = SomeModel::find();
        );

        if (!$this->globalSearch) {
            $query->where('1=0'); // returns no results
            return $provider;
        }

        // other code to return results with filter applied
        ::
        ::
        return $provider;
    }   
} 

答案 1 :(得分:0)

我不知道你是如何应用这个globalSearch过滤器的,但这是网格过滤器的默认行为:当未定义过滤器时 - GridView将显示匹配的数据项(===所有项目)。 / p>

但是如果你想改变这种行为,你就不能在空滤镜的情况下渲染GridView:

<?php echo $this->render("../ads/_search", ['model' => $model]); ?>

<?php 

if(!empty($model->globalSearch)){

    Pjax::begin(); 

    echo GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $model,
        'showOnEmpty'=>false,
        'summary'=>'',
        'showFooter'=>false,
        'showHeader' => false,

        'columns' => [
            'name',
            'type',
            'explanation',
            'address',
            'province_name',
            'cost',
        ],
    ]);

    Pjax::end(); 
}

?>