[Yii Framework] Insert Banyak Data dengan Jappendo
May 28, 2012 16 Comments
Menanggapi request seorang teman yang ingin menginput banyak data sekaligus pada suatu tabel dengan menggunakan JAppendo. Dengan kasus misal input tabel dosen dan mahasiswa. Dimana dia ingin menginput beberapa data mahasiswa, mahasiswa diinput satu persatu, tetapi dosen hanya sekali terisi. Dimana semua nama mahasiswa tadi akan memiliki dosen yang telah diinput satu kali tadi. Sama seperti tutor tentang jappendo sebelumnya, kita definisikan dulu view di Jappendo yang kita miliki :
<table class="appendo-gii" id="<?php echo $id ?>"> <thead> <tr> <th>Nama Mahasiswa</th><th>Kelas</th> </tr> </thead> <tbody> <?php if (count($model) == 0): ?> <tr> <td><?php echo CHtml::textField('nama[]','',array('style'=>'width:190px')); ?></td> <td><?php echo CHtml::textField('kelas[]','',array('style'=>'width:190px')); ?></td> </tr> <?php else: ?> <?php //for($i = 0; $i < count($model); ++$i): foreach ($model as $value){ ?> <tr> <td><?php echo CHtml::textField('nama[]',$value->dosis,array('style'=>'width:90px')); ?></td> <td><?php echo CHtml::textField('kelas[]',$value->jumlah,array('style'=>'width:90px')); ?></td> </tr> <?php } ?> <tr> <td><?php echo CHtml::textField('nama[]','',array('style'=>'width:90px')); ?></td> <td><?php echo CHtml::textField('kelas[]','',array('style'=>'width:90px')); ?></td> </tr> <?php endif; ?> </tbody> </table>
Nah, pada kasus di atas saya umpamakan ada field: dosen, mahasiswa dan kelas. Di jappendo di atas hanya disimpan field mahasiswa dan kelas. Tapi di tidak ada field dosen..
Dimana field dosen, kita akan menambahkan field dosen di luar jappendo. Dimana nantinya user tinggal menginput field dosen 1 kali, dan mahasiswa bisa berkali-kali sesuai jumlah mahasiswa yang diinput. Setelah itu semua mahasiswa yang kita input tadinya akan memiliki nama dosen sesuai dengan yang sudah kita input sebelumnya.
Untuk membuat alur seperti itu, di form tempat kita input nanti masukkan code seperti berikut :
<div class="form"> <?php $form=$this->beginWidget('CActiveForm', array( 'enableAjaxValidation'=>false, )); ?> <p class="note">Fields with <span class="required">*</span> are required.</p> <?php echo $form->errorSummary($model); ?> <div class="row"> <?php echo $form->labelEx($model,'diagnosa'); ?> <?php echo $form->textField($model,'diagnosa',array('size'=>60,'maxlength'=>255)); ?> <?php echo $form->error($model,'diagnosa'); ?> </div> <div class="row"> <?php $this->widget('application.extensions.appendo.JAppendo',array( 'id' => 'repeateEnum', 'model' => $model, 'viewName' => 'namaViewJappendo', 'labelDel' => 'Remove Row', )); ?> </div> <div class="row buttons"> <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?> </div> <?php $this->endWidget(); ?> </div>
Kemudian setelah itu kita setting pada controller agar alur nya dapat sesuai dengan yang kita inginkan..
public function actionCreate() { $model=new Mahasiswa; if(isset($_POST['Mahasiswa'])) { $total = count($_POST['nama']); for ($i = 0; $i <= $total; $i++) { if(isset($_POST['nama'][$i])) { $model2 = new Mahasiswa; $model2->dosen =$_POST['Mahasiswa']['dosen']; $model2->nama=$_POST['nama'][$i]; $model2->kelas=$_POST['kelas'][$i]; $model2->save(); } } $this->redirect(array('admin')); } $this->render('create',array( 'model'=>$model, )); }
Pada code di atas kita memasukkan data mahasiswa dengan memasukkan masing-masing field yang ada pada jappendo.. Tetapi untuk field dosen kita ambil dari inputan dosen yang telah ada bukan di jappendo melainkan di form tersebut dan hanya diinput satu kali..
Selesai..
Selamat mencoba.. Semoga membantu..
Komentar