[Yii Framework] Select Many Data From CGridView
January 13, 2012 48 Comments
Untuk mempermudah user memodifikasi data yang jumlahnya cukup banyak, biasa nya kita menyediakan fasilitas agar user dapat memilih-milih data sekaligus. Biasanya hal ini kita lakukan dengan menyediakan sebuah tabel yang berisi data-data dan user dapat memilih data mana saja yang ingin dia gunakan seperti gambar berikut :
Disana anda dapat melihat kita menampilkan semua data dan user dapat memilih-milih data tertentu dengan cara mencentang checkbox yang terdapat disamping data tersebut…
Bagaimana cara membuatnya?? Kita dapat menggunakan CGridView untuk mempermudah pekerjaan kita melakukan hal tersebut.. Berikut step-stepnya :
Pertama-tama pada CGridView, kita harus menampilkan checkbox. Code CGridView anda yang awalnya seperti berikut :
<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'satu-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'satusatu', 'satudua', array( 'class'=>'CButtonColumn', ), ), )); ?>
Ubah menjadi seperti berikut :
<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'satu-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'selectableRows'=>2, 'columns'=>array( array( 'class'=>'CCheckBoxColumn', 'id'=>'haha', ), 'satusatu', 'satudua', array( 'class'=>'CButtonColumn', ), ), )); ?>
Penjelasan : pada code di atas kita menambahkan sebuah kolom yang berisi checkbox dan kita beri identitas ‘id’=haha. Setelah itu kita mengizinkan checkbox tersebut untuk di pilih banyak sekaligus dengan menyertakan code ‘selectableRows’=>2, . Kode “2” yang ada pada kode tersebut menandakan checkbox tersebut dapat dipilih banyak sekaligus. Berikut beberapa aturan pada “selectabelRows” :
- 0 – checkbox tidak bisa dirubah (read-only mode)
- 1 – hanya satu row yang dapat dipilih
- 2 atau lebih – anda dapat memilih banyak checkbox dan pada anda disediakan sebuah checkbox yang digunakan untuk melakukan “select all” data pada cgridview.
- Tidak melakukan setting – Jika anda tidak menyetting nilai selectabelRows, checkbox dapat dipilih sesuka user. Namun user tidak disediakan tombol “select all”.
Okeh, setelah kita telah berhasil menyediakan checkbox, sekarang saatnya kita menangkap nilai checkbox tersebut..
Anggaplah saya menyediakan sebuah tombol submit dimana tombol tersebut akan menangkap nilai yang ada pada CGridView tersebut dan menampilkannya pada suatu halaman. Saya membuat kode seperti berikut :
<?php $form=$this->beginWidget('CActiveForm', array( 'id'=>'satu-form', 'action'=>array('satu/viewmany'), 'enableAjaxValidation'=>false, )); ?> <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'satu-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'selectableRows'=>2, 'columns'=>array( array( 'class'=>'CCheckBoxColumn', 'id'=>'haha', ), 'satusatu', 'satudua', array( 'class'=>'CButtonColumn', ), ), )); ?> <?php echo CHtml::submitButton('Create'); ?> <?php $this->endWidget(); ?>
Penjelasan : Saya memubuat sebuah form yang dapat di POST dimana setiap ditekan tombol submit, form tersebut akan mengarah pada sebuah action yang terdapat pada “SatuController” dan action “viewmany”. Untuk itu, sekarang mari kita buat fungsi “viewmany”. Pada controller anda, buatlah sebuah fungsi berikut :
public function actionViewmany() { $vari=array(); if(isset($_POST['haha'])) { $all=$_POST['haha']; foreach($_POST['haha'] as $a=>$val) { $simpan=$this->loadModel($val); $vari[$a]=array('satusatu'=>$simpan->satusatu, 'satudua'=>$simpan->satudua); } $hasil=new CArrayDataProvider($vari, array( 'keyField'=>'satusatu', )); $this->render('viewm',array( 'dataProvider'=>$hasil, )); } }
Penjelasan : pada kode di atas kita membuat sebuah fungsi viewmany yang mana pada fungsi tersebut akan menangkap nilai “haha” yang terdapat pada form sebelumnya. Ingat kan kalo pada checkbox CGridView tadi saya memberi identitas dengan nama “haha”?? Yah, nilai itulah yang saya ambil. Setelah saya tangkap baris data yang telah dipilih oleh user, sekarang saya gunakan baris data tersebut untuk di tampilkan pada suatu halaman “viewm”. Buatlah sebuah halaman “viewm” pada view tepatnya pada folder “satu” sesuai dengan nama controller. Lalu isi kode berikut pada file tersebut :
<?php $this->breadcrumbs=array( 'Satus', ); $this->menu=array( array('label'=>'Create Satu', 'url'=>array('create')), array('label'=>'Manage Satu', 'url'=>array('admin')), ); ?> <h1>Satus</h1> <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'satu-grid', 'dataProvider'=>$dataProvider, 'columns'=>array( 'satusatu', 'satudua', ), )); ?>
yah, Selesai…
Selamat mencoba…
Semoga membantu… 🙂
Komentar