2

私は Yii フレームワークを使用しています。

以下を使用して、cgridview フィルター フィールドの 1 つに値を設定しました。

検索フィールドに値を割り当てるためのjQueryは次のとおりです。

$('#gridviewid').find('input[type=text],textarea,select').filter(':visible:first').val('".$_GET['value']."');

そして、ここで cgridview を呼び出すための私の PHP:

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bills-grid',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'cssFile'=>Yii::app()->baseUrl . '/css/gridview.css',
'pager'=>array(
    'class'=>'AjaxList',
    'maxButtonCount'=>25,
    'header'=>''
),
'columns' => $dialog->columns(),
'template'=>"<div class=\"tools\">".$dialog->link()."&nbsp;&nbsp;&nbsp;".CHtml::link($xcel.'  Export to excel', array('ExcelAll'))."</div><br />{items}{summary}<div class=\"pager-fix\">{pager}</div>",));

値が検索フィールドに表示され、cgridview は問題なく正しく動作しますが、cgridview をトリガーして更新またはフィルター処理することができません。ページの読み込み後に定義済みの値でフィルタリングするためにcgridviewをトリガーする人を知っている人はいますか?

追加情報が必要な場合はお知らせください。

ありがとうございました。

4

3 に答える 3

9

クライアント側のコードを変更せずに問題を解決できます。コントローラーアクションでは、以下に示すように属性のデフォルト値を設定するだけです

public function actionAdmin()
{
    $model = new Bills();
    $model->unsetAttributes();
    $model->attribute_name="default filter value";//where attribute_name is the attribute for which you want the default value in the filter search field
    if(isset($_GET['Bills'])){
        $model->attributes = $_GET['Bills'];
    }

    $this->render('admin',array('model'=>$model));
}
于 2012-05-11T12:49:59.183 に答える
1

gii が生成する「デフォルト」のインデックス アクションを見てください。

public function actionIndex()
{
    $model = new Bills();
    $model->unsetAttributes();
    if(isset($_GET['Bills'])){
        $model->attributes = $_GET['Bills'];
    }

    $this->render('index',array('model'=>$model));
}

したがって、次のような 1 行を追加すると$model->attribute = 'test';、完了です。もちろん、「属性」はデフォルトのフィルター値を持つ必要がある属性です(この場合、値は「テスト」です):)。したがって、コードは次のようになります。

public function actionIndex()
{
    $model = new Bills();
    $model->unsetAttributes();
    if(isset($_GET['Bills'])){
        $model->attributes = $_GET['Bills'];
    }

    if(!isset($_GET['Bills']['attribute']) {
        $model->attribute = 'test';
    }

    $this->render('index',array('model'=>$model));
}

もちろん、フィルター フィールドに何も入力しない限り、属性には (フィルターで) テスト値が設定されます。それがあなたが探しているものであることを願っています。フィルターはいつものように機能するはずです。

私の悪い英語でごめんなさい:)

よろしく

于 2012-05-11T07:14:06.597 に答える
0

Yii の更新を使用できます。

$.fn.yiiGridView.update('bills-grid', {
 type: 'GET',
 url: <?php echo Yii::app()->createUrl('controller/action') ?>"?Class[attribute]=<?php echo $_GET['value'] ?>
 success: function() {
  $.fn.yiiGridView.update('bills-grid');
 }
});

これは私が行う方法です。URLを変更するだけです。グリッドビューと同じコントローラーアクションであり、URLパラメーターをそこに表されている構造に変更する必要があります。 Bills[attribute]=valueのようになります。

于 2012-05-10T20:43:45.290 に答える