3

次のような CCheckBoxColumn を持つ CGridView ウィジェットがあります。

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        array(
            'class'=>'CCheckBoxColumn',
        ),
        'title',
        ....
    ),
));

質問: チェックされた値をコントローラ アクションに送信する方法は? フォーム、送信ボタンが必要なことは理解していますが、上部に検索ボックスが表示されるように、物をどこに置くかを明確に説明する必要があります。

前もって感謝します。

4

3 に答える 3

4

別のフォームが絶対に必要というわけではありません。追加の JavaScript が添付されたリンクを使用するだけです。

チェックされた値を取得するには、javascript 関数を呼び出すことができます。ここ$.fn.yiiGridView.getChecked(containerID,columnID)を参照してください。ID を含む配列が返されます。

完全な例 (ajax を使用):

あなたの見解では:

<?php
$this->widget('zii.widgets.grid.CGridView', array(
   'id'=>'example-grid-view-id', // the containerID for getChecked
   'dataProvider'=>$dataProvider,
   'columns'=>array(
       array(
           'class'=>'CCheckBoxColumn',
           'id'=>'example-check-boxes' // the columnID for getChecked
       ),
       'title',
       ....
   ),
));
?>
<div id="for-link">
<?php
   echo CHtml::ajaxLink('SomeLink',Yii::app->createUrl('somecontroller/someaction'),
        array(
           'type'=>'POST',
           'data'=>'js:{theIds : $.fn.yiiGridView.getChecked("example-grid-view-id","example-check-boxes").toString()}'
           // pay special attention to how the data is passed here
        )
   );
?>
<div>

コントローラーで:

...
public function actionSomeaction(){
    if(isset($_POST['theIds'])){
          $arra=explode(',', $_POST['theIds']);
          // now do something with the ids in $arra
          ...
    }
    ...
}
...

(ビューから) ajax によって渡すデータで、単純な文字列の代わりに json 文字列を使用することもできますが、代わりに(コントローラーで)explode()を使用します。json_decode()また、使用前にIDを検証/サニタイズすることをお勧めします。

ajax リンクの詳細については、 CHtml::ajaxLinkのドキュメントを参照してください。

チェックされたIDの空の配列をチェックしていないため、この例は少し粗雑であることに注意してください。

于 2012-04-10T17:50:00.593 に答える
1

これは CSRF 保護で動作し、GridView を更新します。

<?php
echo CHtml::ajaxLink('ClickMe',Yii::app()->createUrl('controller/action'),
array(
'type'=>'POST',
'data'=>'js:{"ids" : $.fn.yiiGridView.getChecked("grid_view_id","check_box_id").toString(),"YII_CSRF_TOKEN" : "'.Yii::app()->request->csrfToken.'"}',
'success'=>"$('#grid_view_id').yiiGridView.update('grid_view_id')"
));
?>
于 2012-04-18T16:07:26.457 に答える
0

Gridview を単純なフォームにラップすると、選択したチェックボックスを値に送信できます。

例:

意見

<form id="frmSubmit">
<?php
echo CHtml::dropDownList('user_id'
        , null
        , CHtml::listData(User::model()->findAll(), 'USER_ID', 'FULLNAME')
);

echo CHtml::ajaxSubmitButton('Save'
                            , Yii::app()->createUrl('query/ajaxUpdate')
                            , array('success' => 'js:reloadGrid', )
                            , array('class' => 'btn btn-success'));

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'query-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        array(
            'id' => 'query',
            'class'=>'CCheckBoxColumn',
            'selectableRows' => '2',
        ),
        'Contact',
        'Email',
        'Company',
    ),
)); ?>
</form>

<script type="text/javascript">
function reloadGrid(data) {
    $.fn.yiiGridView.update('query-grid');
}
</script>

コントローラ

public function actionAjaxUpdate()
{
    var_dump($_POST);
}
于 2014-04-15T23:14:55.343 に答える