Archive for the ‘php’ Category

Multiple Dropdownlist dalam Yii

Posted: 24 January, 2014 in php, programming

Salam semua kepada pembaca blog ini. Alhamdulillah dah masuk tahun baru dah kita, semoga semangat baru dapat menyemarakkan prestasi dan sumbangan kita pada agama, bangsa dan negara. Cewah. Awal tahun ni aku disibukkan dengan tugas tugas yang memang sangat-sangat memeningkan kepala, nak buat macam mana, nak tak nak kena hadap jugak kan. Hehehe.

Untuk awal tahun ni, aku ada nak buat satu Sistem Dashboard ICT JHEAINS, dalam sistem ini ada beberapa modul kecil yang akan dikembangkan dari masa ke semasa mengikut keperluan. Buat masa ni aku bercadang nak buat modul pinjaman peralatan ICT, modul aduan kerosakan ICT dan modul permohonan email rasmi jabatan.

Paparan Sistem Dashboard ICT JHEAINS

Paparan Sistem Dashboard ICT JHEAINS

Buat masa ni aku tengah cuba siapkan Modul Pinjaman Peralatan dulu. Berikut adalah paparan Borang Permohonan Pinjaman Peralatan yang di isi oleh pengguna.

Borang Permohonan Pinjaman Peralatan

Borang Permohonan Pinjaman Peralatan

Kat bawah ni ada satu set dropdownlist. Bila pengguna memilih Jenis Peralatan, dropdownlist yang lain akan update valuenya secara automatik.

Multiple dropdownlist

Multiple dropdownlist

Berikut adalah code yang aku gunakan untuk tujuan ni.

Untuk form

<td bgcolor="#FFFFA8">Jenis Peralatan</td>
<td colspan="3" bgcolor="#FFFFA8">
<?php
echo $form->dropDownList($model,'jenis_peralatan',
CHtml::listData(JenisPeralatan::model()->findAll(),'kategori','kategori'),

array(
    'empty'=>'Pilih Kategori',
    'ajax' => array(
    'type' => 'POST',
    'url' => CController::createUrl('PermohonanPinjaman/namaperalatan'),
    'dataType'=>'json',
    'data'=>array('namaperalatan'=>'js:this.value'),

   'success'=>'function(data) {
$("#PermohonanPinjaman_jenis_perkakasan_1").html(data.dropDownPeralatan);
$("#PermohonanPinjaman_jenis_perkakasan_2").html(data.dropDownPeralatan);
$("#PermohonanPinjaman_jenis_perkakasan_3").html(data.dropDownPeralatan);
$("#PermohonanPinjaman_jenis_perkakasan_4").html(data.dropDownPeralatan);
$("#PermohonanPinjaman_jenis_perkakasan_5").html(data.dropDownPeralatan);
$("#PermohonanPinjaman_jenis_perkakasan_6").html(data.dropDownPeralatan);
   }',
)
));
?>

</td>
</tr>
<tr>
<tr>
<td bgcolor="#FFFFD7">Jenis Perkakasan</td>
<td bgcolor="#FFFFD7">
<?php
echo $form->dropDownList($model,'jenis_perkakasan_1',array(),array('prompt'=>'Pilih Perkakasan'));
?>
</td>

<td bgcolor="#FFFFD7">Bilangan Unit</td>
<td bgcolor="#FFFFD7">
<?php echo $form->textField($model,'unit_perkakasan_1',array('class'=>'span1','maxlength'=>1)); ?>
</td>
</tr>

<tr>
<td bgcolor="#FFFFA8">Jenis Perkakasan</td>
<td bgcolor="#FFFFA8">
<?php
echo $form->dropDownList($model,'jenis_perkakasan_2',array(),array('prompt'=>'Pilih Perkakasan'));
?>
</td>

<td bgcolor="#FFFFA8">Bilangan Unit</td>
<td bgcolor="#FFFFA8">
<?php echo $form->textField($model,'unit_perkakasan_2',array('class'=>'span1','maxlength'=>1)); ?>
</td>
</tr>
<tr>

<td bgcolor="#FFFFD7">Jenis Perkakasan</td>
<td bgcolor="#FFFFD7">
<?php
echo $form->dropDownList($model,'jenis_perkakasan_3',array(),array('prompt'=>'Pilih Perkakasan'));
?>
</td>
<td bgcolor="#FFFFD7">Bilangan Unit</td>
<td bgcolor="#FFFFD7">
<?php echo $form->textField($model,'unit_perkakasan_3',array('class'=>'span1','maxlength'=>1)); ?>
</td>
</tr>

<tr>
<td bgcolor="#FFFFA8">Jenis Perkakasan</td>
<td bgcolor="#FFFFA8">
<?php echo $form->dropDownList($model,'jenis_perkakasan_4',array(),array('prompt'=>'Pilih Perkakasan'));
?>
</td>
<td bgcolor="#FFFFA8">Bilangan Unit</td>
<td bgcolor="#FFFFA8">
<?php echo $form->textField($model,'unit_perkakasan_4',array('class'=>'span1','maxlength'=>1)); ?>
</td>
</tr>

<tr>
<td bgcolor="#FFFFD7">Jenis Perkakasan</td>
<td bgcolor="#FFFFD7">
<?php echo $form->dropDownList($model,'jenis_perkakasan_5',array(),array('prompt'=>'Pilih Perkakasan'));
?>
</td>
<td bgcolor="#FFFFD7">Bilangan Unit</td>
<td bgcolor="#FFFFD7">
<?php echo $form->textField($model,'unit_perkakasan_5',array('class'=>'span1','maxlength'=>1)); ?>
</td>
</tr>

<tr>
<td bgcolor="#FFFFA8">Jenis Perkakasan</td>
<td bgcolor="#FFFFA8">
<?php echo $form->dropDownList($model,'jenis_perkakasan_6',array(),array('prompt'=>'Pilih Perkakasan'));
?>
</td>
<td bgcolor="#FFFFA8">Bilangan Unit</td>
<td bgcolor="#FFFFA8">
<?php echo $form->textField($model,'unit_perkakasan_6',array('class'=>'span1','maxlength'=>1)); ?>
</td>
</tr>

Untuk controller

public function actionNamaperalatan()
{

$data=JenisPeralatan::model()->findAllByAttributes(array('kategori'=>$_POST['namaperalatan']));

$data=CHtml::listData($data,'jenis_perkakasan','jenis_perkakasan');

    $dropDownPeralatan = "";
        foreach($data as $value=>$name)
        {
           $dropDownPeralatan .= CHtml::tag('option',
           array('value'=>$value),CHtml::encode($name),true);
        }
    echo CJSON::encode(array(
    'dropDownPeralatan'=>$dropDownPeralatan
    ));

}

Ok lah buat masa ni. Insya Allah ada masa nanti aku update lagi blog ni yer.

Happy h4ckin dari pokcik gh1mau 🙂
210166.strip

Advertisements

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

Salam semua, hari ni dah 13 Ramadhan dah, badan pun dah mula letih, perut rasa lapar, kepala rasa berat jer, ni semua lah antara ujian kecil di bulan Ramadhan. Ada yang tanya apa yang special sangat bulan Ramadhan ni, pada aku, bulan ni dimuliakan kerana diturunkan al – Quran padanya. Ok la, cukuplah tu, citer panjang-panjang pun bab ni aku bukannya ustaz. Hehehe

(Masa yang diwajibkan kamu berpuasa itu ialah) bulan Ramadan yang padanya diturunkan Al-Quran, menjadi petunjuk bagi sekalian manusia, dan menjadi keterangan-keterangan yang menjelaskan petunjuk dan (menjelaskan) perbezaan antara yang benar dengan yang salah. Oleh itu, sesiapa dari antara kamu yang menyaksikan anak bulan Ramadan (atau mengetahuinya), maka hendaklah ia berpuasa bulan itu; dan sesiapa yang sakit atau dalam musafir maka (bolehlah ia berbuka, Kemudian wajiblah ia berpuasa) sebanyak hari yang ditinggalkan itu pada hari-hari yang lain. (Dengan ketetapan yang demikian itu) Allah menghendaki kamu beroleh kemudahan, dan Ia tidak menghendaki kamu menanggung kesukaran. Dan juga supaya kamu cukupkan bilangan puasa (sebulan Ramadan), dan supaya kamu membesarkan Allah kerana mendapat petunjukNya, dan supaya kamu bersyukur.

al baqarah : 185

Entri kali ni, aku nak kongsikan macam mana kita nak buat autocomplete dropdown list. Kita akan upgrade sistem emihrab ni. Biarlah orang tak nak pakai atau tak nak appreciate sistem ni, lantak hang la wei! Hehehe.
At least aku dapat jugak brush up skill programming dan belajar benda-benda baru 🙂

Dalam versi yang sebelum ini, kita menggunakan dropdown list yang biasa. Valuenya di populate dari satu table tertentu. Kalau kita tengok gambar dibawah, bila kita pilih nama masjid (dropdown list), dia akan menyenaraikan semua nama masjid yang ada dalam table senarai_masjid. Ini sedikit sebanyak menyukarkan pengguna sistem, sebab perlu scroll satu satu untuk mencari nama masjid yang berkaitan.

autocomplete1

Berikut adalah code untuk tujuan paparan dropdown list yang biasa. (Seperti dalam gambar di atas)

<table>
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout=
"this.style.backgroundColor='#d4e3e5';">
<td>
<?php echo $form->labelEx($model,'nama_masjid'); ?>
</td>

<td>
<?php echo $form->dropDownList($model,'nama_masjid', CHtml::listData(SenaraiMasjid::model()->findAll(), 'nama_masjid','nama_masjid'), array(
'empty'=>'PILIH NAMA MASJID',
));
?>
</td>
</tr>
</table>

Sekarang ni, kita buang code dropdown list yang kat atas tu. Kita akan gunakan CJuiAutoComplete. Buat perubahan pada fail _form.php. Berikut adalah code bagi bahagian view.

<table>
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout=
"this.style.backgroundColor='#d4e3e5';">
<td><?php echo $form->labelEx($model,'nama_masjid'); ?></td>
<td>
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete',
array(
'name'=>'namamasjid',
'model'=>$model,
'attribute'=>'nama_masjid',
'source'=>$this->createUrl('ajk/autocomplete'),

'options'=>array(
'showAnim'=>'fold',
),

'htmlOptions'=>array(
'style'=>'width: 400px;',
),
));
?>
</td>
</tr>
</table>

Pada bahagian controller pulak, kita taipkan code seperti dibawah. Untuk contoh ni aku gunakan ajk controller. Dan ingat kita perlu declarekan nama function yang kita buat ni dalam function access rule.

public function actionAutocomplete() {
$res =array();

if (isset($_GET['term'])) {
$qtxt ="SELECT nama_masjid FROM senarai_masjid WHERE nama_masjid LIKE :nama_masjid";
$command =Yii::app()->db->createCommand($qtxt);
$command->bindValue(":nama_masjid", '%'.$_GET['term'].'%', PDO::PARAM_STR);
$res =$command->queryColumn();
}

echo CJSON::encode($res);
Yii::app()->end();
}

Dan hasilnya adalah seperti dalam gambar dibawah. Jadi pengguna tak perlu nak scroll satu-satu nama masjid seperti sebelum ni, hanya taipkan nama masjid (keyword), dan sistem akan paparkan nama masjid yang berkaitan.

autocomplete2

autocomplete3

System Developer berhempas pulas memikirkan dan upgrade sistem supaya memudahkan pengguna hingga ke peringkat maksimum, tapi selalunya pengguna sistem macam hampeh, bukannya nak guna sistem. Bila sistem tak der bukan main suh buat. Ini lah lumrah manusia. Biarkan.. Biarkan.. Biarkan..

Happy h4ckin dari pokcik gh1mau 🙂

dilbert-strip

Sistem emihrab

Posted: 17 July, 2013 in php, programming, umum

Salam semua, hari ni dah 8 Ramadhan dah, cepatnya masa berlalu. kata orang-orang alim, ni tanda-tanda dunia hampir nak kiamat kubro. Kiamat kecil hari-hari orang alami, jadi sewajarnya kita kena la selalu ingat dan kenang kiamat kecil kita 🙂

Ok lah, entri kali ni tak der nak cerita banyak, aku di minta untuk menyiapkan sistem emihrab, sistem ni adalah versi baru bagi sistem emasjid. Dan aku menyiapkan sistem ni dalam masa 3 hari. Pergh, berasap kepalo pakcik nak menyiapkan eh. Sobab kononnya nak present dalam meeting. Bila sampai waktu dan ketikanya, pengerusi meeting kata tak yah, dia suh ada jabatan tu upah vendor buat sistem ni, katanya jabatan aku ni tak mampu dan tak der kemahiran nak buat. Dan yang sepatutnya defend pun duk diam dan akur sahaja. Huhuhu.. lantaklah, ikutkan memang sakit ati, tapi nak buat macam Saya Yang Menurut Perintah. Damn! Hehehe

Ok, berikut adalah paparan-paparan dalam sistem emihrab ni. Korang leh akses di alamat http://emihrab.ns.gov.my. Rancangan asalnya sistem ni nak ditambah dengan modul-modul lain, tapi skang ni aku dah malas. Pegi la upah vendor suh buat. Hahaha. Ada mana-mana agensi nak pakai sistem ni leh deal dengan aku 🙂

By the way, aku bangunkan sistem ni dengan menggunakan Yii Framework. Kalau ada yang berminat nak blajar menggunakan Yii ni boleh lah panggil aku. Insya Allah 🙂

mihrab1

mihrab2

mihrab3

mihrab4

mihrab5

mihrab6

Ni code snip macam mana aku grab data menggunakan CSqlDataProvider dari model lain.

$data=SenaraiMasjid::model()->find('id=:id', array(':id'=>$model->id));
$masjid = $data->nama_masjid;

$count=Yii::app()->db->createCommand("SELECT COUNT(*) FROM ajk WHERE nama_masjid ='". $masjid. "'")->queryScalar();
$sqlajk="SELECT * FROM ajk WHERE nama_masjid ='". $masjid. "' AND jawatan != 'IMAM 1' AND jawatan != 'IMAM 2' AND jawatan != 'IMAM 3' AND jawatan != 'BILAL' and jawatan != 'SIAK' and jawatan != 'PEMBANTU AM WANITA'";
$dataProviderAJK=new CSqlDataProvider($sqlajk, array(
'totalItemCount'=>$count,
'keyField'=>'id',
'sort'=>array(
'attributes'=>array(
'id','nama',
),
),
'pagination'=>array(
'pageSize'=>10,
),
));

<!-- table utk maklumat ajk masjid -->
<table border="1">
<tr>
<th colspan="5"><div align="center">Maklumat Ahli Jawatankuasa Masjid</div></th>
</tr>
<tr>
<th>Nama Ahli Jawatankuasa</th>
<th>No Kad Pengenalan</th>
<th>Jawatan</th>
<th>No Telefon</th>

</tr>
<?php $c = false; ?>
<?php foreach($dataProviderAJK->data as $maklumat):?>
<?php echo '<tr style="background:',(($c=!$c)? '#eee' : '#ddd' ),'">'; ?>
<?php echo "<td>$maklumat[nama]</td>"; ?>

<?php echo "<td>$maklumat[no_kp]</td>"; ?>

<?php echo "<td>$maklumat[jawatan]</td>"; ?>

<?php echo "<td>$maklumat[no_tel]</td>"; ?>

<?php echo "</tr>"; ?>
<?php endforeach?>

</table>
<!-- table utk maklumat ajk tamat -->

Happy h4ckin dari pokcik gh1mau 🙂

190491.strip