我创建了一个显示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(); ?>
还需要其他什么吗?让我知道。
答案 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();
}
?>