2016-09-27 7 views
0

grid viewと表示されたGlobal Searchが作成されましたが、これは初めて検索ページが読み込まれるときや検索フィールドが空白のときに問題が発生します。 db内のデータが表示されます。Yii2 - 検索を使用するとすべてのデータがグリッド表示されます

と私は別のビュー内に_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(); ?> 

メインビュー:

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

<?php Pjax::begin(); ?> 

<?= GridView::widget([ 

    'dataProvider' => $dataProvider, 
    'filterModel' => $model, 
    'showOnEmpty' => false, 
    'summary'  => '', 
    'showFooter' => false, 
    'showHeader' => false, 
    'columns'  => [ 
     'name', 
     'type', 
     'explanation', 
     'address', 
     'province_name', 
     'cost', 
    ], 

]);?> 

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

他に何が必要ですか?お知らせ下さい。

答えて

0

このglobalSearchフィルタの適用方法はわかりませんが、グリッドフィルタのデフォルトの動作です。フィルタが定義されていない場合、GridViewは一致するデータ項目(===すべての項目)を表示します。

しかし、あなたは、この動作を変更したい場合は、単に空のフィルタの場合には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(); 
} 

?> 
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; 
    } 
} 
関連する問題