別のフォームが絶対に必要というわけではありません。追加の 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の空の配列をチェックしていないため、この例は少し粗雑であることに注意してください。