Hai guys. Pagi ini saya ingin berbagi tips tentang dependent dropdownlist Yii. Yang dimaksud dengan dependent dropdownlist adalah dua dropdownlist yang saling ketergantungan. Contohnya “Provinsi” dengan “Kabupaten”. Saat kita pilih provinsi, maka kabupaten yang dimunculkan hanya kabupaten yang dimiliki oleh provinsi tersebut. Oke langsung saja. Yang diperlukan adalah dua tabel. Tabel provinsi dan kabupaten. Jangan lupa buat foreign key di tabel kabupaten yang menghubungkan ke tabel provinsi.
Setelah tabel selesai, buat modelnya dengan gii. Saya anggap yang baca tutorial ini sudah paham menggunakan gii. Setelah model selesai, kita bisa tuliskan codingnya.
Coding di view form.php
<div class="row">
<div class="col-md-6">
<div class="form-group">
<?php echo $form->labelEx($model,'prov_asal',array('class'=>'control-label col-md-4')); ?>
<div class="col-md-8">
<?php echo $form->dropDownList($model,'prov_asal',CHtml::listData
(Provinsi::model()->findAll(array('order'=>'id_prov asc')),'id_prov','nama_prov'),
array('class'=>'form-control',
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('Mahasiswa/kota'), //url to call.
'data'=>array('nilai'=>'js:this.value'),
'update'=>'#Mahasiswa_kota_asal', //selector to update
))); ?>
<?php echo $form->error($model,'prov_asal'); ?>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<?php echo $form->labelEx($model,'kota_asal',array('class'=>'control-label col-md-4')); ?>
<div class="col-md-8">
<?php echo $form->dropDownList($model,'kota_asal',CHtml::listData
(Kota::model()->findAll(array('order'=>'id_kota asc')),'id_kota','nama_kota'),array('class'=>'form-control')); ?>
<?php echo $form->error($model,'kota_asal'); ?>
</div>
</div>
</div>
</div>
Dan di controller MahasiswaController.php berikut codingnya
public function actionKota()
{
$data=Kota::model()->findAll('id_prov=:parent_id',
array(':parent_id'=>(int) $_POST['nilai']));
$data=CHtml::listData($data,'id_kota','nama_kota');
foreach($data as $value=>$name)
{
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($name),true);
}
}
Tara... sudah jadi. Silahkan dicoba. Kalau ada yang kurang paham, bisa tanyakan di kolom komentar.
See you on next post!
See you on next post!
EmoticonEmoticon