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.
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.
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.
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.
Happy h4ckin dari pokcik gh1mau š
salam bro…cek fb ko..aku ada msg.. hahaha