Yii Dependent Dropdownlist

Posted: 23 July, 2013 in php, programming

Salam semua. hari ni dah 14 Ramadhan dah, macam menghitung hari nak raya pulak kan. Hehehe. Kali ni aku nak kongsi macam mana kita nak buat dependent dropdownlist dalam yii framework ni. Aku akan gunakan sistem emihrab sebagai demo untuk tujuan ni. Kira upgrade lagi version dia. Minor bug fix gitu šŸ™‚

Ok, tanpa membuang masa, kita terus ke technical part. Rajah dibawah menunjukkan sebahagian dari database diagram bagi sistem ni. Kalau kita tengok sekiran pengguna memilih parlimen tertentu, sepatutnya hanya dun yang dibawah parlimen dipilih sahaja dipaparkan.

drop1

Tapi disebabkan kekangan masa sewaktu nak buat sistem emihrab dulu (3 hari jer beb), fungsi ni tak sempat aku nak buat. Untuk menunjukkan perbezaan, berikut adalah paparan sistem ini sebelum ditambah dengan fungsi dependent dropdownlist. Setiap dropdown akan memaparkan semua data tanpa mengira parent atau child.

drop2

Apa yang kita nak lakukan adalah, bila dropdown parlimen dipilih, secara automatik dropdown nama dun dan kod dun akan memaparkan maklumat dun mengikut parlimen yang dipilih sahaja.

drop3

 

Berikut merupakan code pada controller yang berkaitan. Ingat, action yang baru kita buat, kita perlu declare pada access rules.

public function actionNamadun()
{
$data = Dun::model()->findAll('parlimen=:parlimen',
array(':parlimen'=>(int) $_POST['SenaraiMasjid']['parlimen']));

$data = CHtml::listData($data,'nama_dun','nama_dun');
foreach($data as $id => $value)
{
echo CHtml::tag('option',array('value' => $id),
CHtml::encode($value),true);
}

}

public function actionKoddun()
{
$data = Dun::model()->findAll('parlimen=:parlimen',
array(':parlimen'=>(int) $_POST['SenaraiMasjid']['parlimen']));

$data = CHtml::listData($data,'kod_dun','kod_dun');
foreach($data as $id => $value)
{
echo CHtml::tag('option',array('value' => $id),
CHtml::encode($value),true);
}
}

Dan ini pula code bagi view file.

<tr>
<td><?php echo $form->labelEx($model,'parlimen'); ?></td>
<td>
<?php
echo $form->dropDownList($model,'parlimen',
CHtml::listData(Parlimen::model()->findAll(),'parlimen','parlimen'),
array(
'empty'=>'PILIH PARLIMEN',
'ajax' => array(
'type' => 'POST',
'url' => CController::createUrl('senaraimasjid/namaDun'),
'update' => '#SenaraiMasjid_'.'dun2'
)
));
?>
</td>

<td><?php echo $form->labelEx($model,'daerah'); ?></td>
<td>
<?php
echo $form->dropDownList($model,'daerah',
CHtml::listData(Daerah::model()->findAll(), 'daerah','daerah'),
array(
'empty'=>'PILIH DAERAH',
));
?>
</td>
</tr>

<tr>
<td><?php echo $form->labelEx($model,'dun2'); ?></td>
<td>
<?php
echo $form->dropDownList($model,'dun2',
CHtml::listData(Dun::model()->findAll(),'nama_dun','nama_dun'),
array(
'empty'=>'PILIH NAMA DUN',
'ajax' => array(
'type' => 'POST',
'url' => CController::createUrl('senaraimasjid/kodDun'),
'update' => '#SenaraiMasjid_'.'dun1'
)
));
?>
</td>

<td><?php echo $form->labelEx($model,'dun1'); ?></td>
<td>
<?php
echo $form->dropDownList($model,'dun1',
CHtml::listData(Dun::model()->findAll('parlimen= :parlimen',
array(':parlimen'=>$model->parlimen)), 'kod_dun', 'kod_dun'),
array('empty'=>'PILIH KOD DUN'));
?>
</td>
</tr>

Dan hasilnya adalah seperti berikut, nama dun dan kod dun yang dipaparkan adalah mengikut parlimen yang dipilih. Lagi sekali, fungsi ini dibuat adalah untuk memudahkan pengguna menggunakan sistem. Hehehe. Nasib kau la labu.

drop4

 

drop5

Happy h4ckin dari pokcik gh1mau šŸ™‚

188976.strip.sunday

Advertisements
Comments
  1. yusri says:

    salam bro…cek fb ko..aku ada msg.. hahaha

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s