NininSaptoHargiyanto sapto.hargi@depkeu.go.id LisensiDokumen: Copyright 20032012IlmuKomputer.Com Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah bebas atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com.
A. PENDAHULUAN
PHP merupakan singkatan rekursif (akronim berulang) dari PHP Hypertext Preprocessor. PHP adalah bahasa pemrograman script yang paling banyak dipakai saat ini atau dalam kata lain bisa diartikan sebuah bahasa pemrograman web yang bekerja di sisi server (server side scripting) yang dapat melakukan konektifitas pada database yang di mana hal itu tidak dapat dilakukan hanyadenganmenggunakansintakssintaksHTMLbiasa.
Konsep MVC adalah cara pandang membuat aplikasi web-based dengan memisahkan antara data (Model), tampilan (View) dan cara pemrosesan (Controller). DimanaMendapatkanYii? Download file di http://www.yiiframework.com/ release terakhir ketika tutorial ini ditulis adalahversi1.1dengannamafileyii1.1.10.r3566.tar.gz
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com 1
kemudianenter,laluuntukmembuatkerangkaaplikasiYii,jalankanperintahberikut:
php.exe C:\xampp\htdocs\yii-1.1.10.r3566\framework\yiic C:\xampp\htdocs\aplikasiku kemudianketikamunculpertanyaanketik:yes webapp
perintah diatas berfungsi untuk membuat folder bernama aplikasiku didalam root directory yaitu di C:\xampp\htdocs\ mengacu pada aturan yang dibuat oleh Yii, dimana Yii telah kita copy paste di dalam C:\xampp\htdocs\yii1.1.10.r3566. Hasilnya adalah akan muncul commandberikut:
Your application has C:\xampp\htdocs\aplikasiku been created successfully under
Wow, aplikasi anda telah sukses dibuat. Untuk mengetes benar tidaknya, Silahkan buka browserkesayanganandadanketikurlhttp://localhost/aplikasiku
Kemudian untuk mengganti footer default Yii, saya akan buka file di direktori C:\xampp\htdocs\aplikasiku\protected\views\layouts\main.php kemudian pada bagian bawahadatampilansepertiberikut:
<div id="footer"> Copyright copy; <?php echo date('Y'); ?> by My Company.<br/> All Rights Reserved.<br/> <?php echo Yii::powered(); ?> </div><!-- footer -->
Lalusayaubahmenjadisepertiini:
<div id="footer"> Copyright copy; <?php echo date('Y'); ?> by Hargi.<br/> All Rights Reserved.<br/> Powered by PusdiklatKU </div><!-- footer -->
yang berhungan dengan training, buka browser lalu ketikkan http://localhost/phpmyadmin, buat database baru dengan nama aplikasikudb, buat 4 tabel dengan ketentuan sebagai berikut: 1. Tableuserdengan4fieldyaitusebagaiberikut: a. iduser,int(11) b. username,varchar(45) c. password,varchar(45) d. namevarchar(45) 2. Tablecategorydengan2fieldyaitusebagaiberikut: a. idcategory,int(11) b. category_name,varchar(45) 3. Tabletrainingdengan5fieldyaitusebagaiberikut: a. idtraining,int(11) b. name_training,varchar(45) c. hours,varchar(45) d. time_start,(time) e. time_end,(time) 4. Tableparticipantdengan3fieldyaitusebagaiberikut: a. idparticipant,int(11) b. name_participant,varchar(45) c. nip,bigint(18) dengangambarEERsebagaiberikut:
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
Berikutscriptmysqlnya:
CREATE TABLE IF NOT EXISTS `category` ( `idcategory` int(11) NOT NULL AUTO_INCREMENT, `category_name` varchar(45) DEFAULT NULL, PRIMARY KEY (`idcategory`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `category` (`idcategory`, `category_name`) VALUES (1, 'Diklat Teknis Umum (DTU)'), (2, 'Diklat Fungsional (DF)'); CREATE TABLE IF NOT EXISTS `participant` ( `idparticipant` int(11) NOT NULL AUTO_INCREMENT, `name_participant` varchar(45) DEFAULT NULL, `nip` bigint(18) DEFAULT NULL, `city` varchar(45) DEFAULT NULL, `trainingid` int(11) NOT NULL, PRIMARY KEY (`idparticipant`), KEY `fk_participant_training1` (`trainingid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ; INSERT INTO `participant` (`idparticipant`, `name_participant`, `nip`, `city`, `trainingid`) VALUES (1, 'Pegawai1', 198607202007011004, 'Surabaya', 2), (2, 'Ninin Sapto Hargiyanto', 198607202007011001, 'Jakarta', 2); CREATE TABLE IF NOT EXISTS `training` ( `idtraining` int(11) NOT NULL AUTO_INCREMENT, `name_training` varchar(45) DEFAULT NULL, `hours` varchar(45) DEFAULT NULL, `time_start` date DEFAULT NULL, `time_end` date DEFAULT NULL, `categoryid` int(11) NOT NULL, PRIMARY KEY (`idtraining`), KEY `fk_training_category` (`categoryid`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `training` (`idtraining`, `name_training`, `hours`, `time_start`, `time_end`, `categoryid`) VALUES (1, 'Legal Drafting', '30', '2012-07-12', '2012-07-19', 1), (2, 'Pranata Komputer', '150', '2012-07-15', '2012-08-10', 2); CREATE TABLE IF NOT EXISTS `user` ( `iduser` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) DEFAULT NULL, `password` varchar(45) DEFAULT NULL, `name` varchar(45) DEFAULT NULL, PRIMARY KEY (`iduser`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; INSERT INTO `user` (`iduser`, `username`, `password`, `name`) VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 'Administrator'), (2, 'hargi', '69510e32280ccbb3eb99bb36fc24b312', 'Hargi'); ALTER TABLE `participant` ADD CONSTRAINT `participant_ibfk_1` FOREIGN KEY (`trainingid`) REFERENCES `training` (`idtraining`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE `training` ADD CONSTRAINT `fk_training_category` FOREIGN KEY (`categoryid`) REFERENCES `category` (`idcategory`) ON DELETE NO ACTION ON UPDATE NO ACTION;
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
Ubahcodenyamenjadisepertiberikut:
'modules'=>array( 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'passwordku', 'ipFilters'=>array('127.0.0.1','::1'), ), ),
Kode diatas berfungsi untuk mengaktifkan Yii Code Generator (Gii) dengan mengisikan passwordnya dengan nilai passwordku, kemudian cari lagi kode koneksi database nya sepertidibawahini:
/* 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=testdrive', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', ), */
Laluubahmenjadisepertiberikut:
'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=aplikasikudb', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', ),
Kode diatas memberikan koneksi ke database kita yang telah kita buat sebelumny. Buka lagi browser anda lalu ketikkan alamat http://localhost/aplikasiku/index.php?r=gii masukkan passwordku di kolom password lalau enter. Akan muncul 5 list, yang akan kita lakukan disini adalahModel GeneratordanCrud Generator saja. KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com 5
Pertama Klik pada Model Generator, pastikan anda ingat nama 4 tabel di database kita, isikanTableNamedengannamatabelkita,isikannamaModelClassdengannamatabel kitadenganhurufawalkapitalklikPreview,KlikGenerate.Ulangiuntuk3tabelkita KeduaKlikpadaCrudGenerator,isikanModelClassdengannilaipadastepPertamatadi, yaitu nama tabel dengan huruf awal kapital. Klik preview lalu Generate. Ulangi untuk 3 ModelClasslainnya. Selamat,kinikitatelahmempunyai 4fileModeldidalamfoldermodels,berekstensiphp 4fileControllerdidalamfoldercontrollers,berekstensiphp 4folderViewdidalamfolderviews Semuanya ada di dalam folder C:\xampp\htdocs\aplikasiku\protected. Kita akan fokus pada folder di dalam protected ya. Jika ada kesalahan pastikan anda telah benar melakukan generateModel GeneratordanCrud Generator Referensi:
Untuk menambah data baru, diperlukan login. Default Yii adalah menggunakan username : admin dan password : admin. Setelah berhasil login, Anda dapat melakukan penambahan data ke dalam tabel dengan melihat pada jendela Operations, lalu klik Createyangterdapatpadasisisampingtabellistingdata.
b) Mengurangi (Update)
Samasepertipadapointa,klikpadaUpdate
c) Menghapus (Delete)
Samasepertipadapointa,klikpadaDelete
d) Mengelola (Manage)
Sama seperti pada point a, klik pada Manage. Akan muncul listing data yang powerfull, fasilitas search berdasarkan data, ditambah pula 3 fitur Insert (Menambah), Update (Merubah),danMenghapus(Delete).
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
Ubahmenjadisepertiberikut:
<div id="mainmenu"> <?php $this->widget('zii.widgets.CMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('/site/index')), array('label'=>'Kelola Diklat', 'url'=>array('/category/index')),
Hasilnya memberikan link Kelola Diklat dengan tampilan (view) adalah category/index.php. kedalamMenu.
Menjadicukupsepertiini
<h2><?php echo CHtml::link(CHtml::encode($data->category_name), array('view', 'id'=>$data->idcategory)); ?></h2>
Ini akan menjadikan tampilan ketika di klik menu kategori, akan muncul listing data kategori saja.
Haliniakanmemberikantampilanjejakposisi(breadcrumbs)dengannamakategori. b. Selain breadcrumbs, tentunya harus ada isinya. Isi dari kategori setelah diklik adalah list diklat.Ada5langkahsbbyaitu: 1) Pada TrainingController definisikan dulu parameter Category pada bagian ActionCreate.BukafoldercontrollerlalubukafileTrainingController.phpaturhingga tampilanyasamadengancodedibawahini: KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com 7
public function actionCreate($id) { $model=new Training; if(isset($_POST['Training'])) { $model->attributes=$_POST['Training']; $model->categoryid=$id; if($model->save()) $this->redirect(array('view','id'=>$model>idtraining)); } $this->render('create',array( 'model'=>$model, )); }
Dengan kode ini, orang yang akan menambah diklat baru, harus melewati langkah mengeklik nama kategori dahulu. Ini bermanfaat supaya tidak ada diklat dibuat tanpakategorisamasekali. 2) Sekarang saatnya membuat link Menambah Diklat pada view Category. Masuk ke folderviewdarikategorilalubukafileview.phptambahkankodedibawahini:
<?php $this->menu=array( array('label'=>'Tambah Diklat Baru', 'url'=>array('training/create','id'=>$model->idcategory )),); ?>
3) Ubah juga view dari _form.php dari Training, hilangkan field Categoryid atau untuk amannyauncheckdengan//
<?php //echo $form->labelEx($model,'categoryid'); ?> <?php //echo $form->textField($model,'categoryid'); ?> <?php //echo $form->error($model,'categoryid'); ?>
Perintah diatas tidak digunakan karena pada langkah sebelumnya kita telah mendefinisikan kategori untuk setiap Diklat yang dipilih, selain itu kalau diaktifkan jugaakanterjadikonflikdualismekategori. 4) Dibagian view Kategori ini, selain bisa membuat training baru kita juga ingin menambah peserta ke masingmasing diklat. Buka CategoryController.php atur scriptpadaactionViewmenjadisepertiberikut:
public function actionView($id) { $totraining=new Training('search'); $totraining->unsetAttributes(); $totraining->categoryid=$id; $this->render('view',array( 'model'=>$this->loadModel($id), 'totraining'=>$totraining, )); }
5) Masuk ke folder view dari kategori lalu buka file view.php, kita ingin menampilkan listing diklat yang dikategorikan per masingmasing kategori, tambahkan kode sebagaiberikut:
<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'training-grid', 'dataProvider'=>$totraining->search(), //'filter'=>$totraining, 'emptyText'=>'Belum ada training pada kategori ini',
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
'summaryText'=>'', 'columns'=>array( array( 'name'=>'No', 'type'=>'raw', 'value'=>'$data->idtraining', ), array( 'name'=>'Nama diklat', 'type'=>'raw', 'value'=>'Chtml::link($data>name_training,array(\'training/view\',\'id\'=>$data->idtraining))', ), array( 'name'=>'Jamlat', 'type'=>'raw', 'value'=>'$data->hours', ), )));?>
Berhasilsudahandamembuattampilanstatiskategoridiklatsampaikeisiisinya.
Haliniakanmemberikantampilanjejakposisi(breadcrumbs)dengannamadiklat. b. Selain breadcrumbs, tentunya harus ada isinya. Isi dari diklat setelah diklik adalah list peserta.Ada5langkahsbbyaitu: 1) Pada ParticipantController definisikan dulu parameter Training pada bagian ActionCreate. Buka folder controller lalu buka file ParticipantController.php atur hinggatampilanyasamadengancodedibawahini:
public function actionCreate($id) { $model=new Participant; if(isset($_POST['Participant'])) { $model->attributes=$_POST['Participant']; $model->trainingid=$id; if($model->save()) $this->redirect(array('view','id'=>$model>idparticipant)); } $this->render('create',array(
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
'model'=>$model, )); }
Dengan kode ini, orang yang akan menambah diklat baru, harus melewati langkah mengeklik nama kategori dahulu. Ini bermanfaat supaya tidak ada diklat dibuat tanpakategorisamasekali. 2) Sekarang saatnya membuat link Menambah Peserta pada view Training. Masuk ke folderviewdariTraininglalubukafileview.phptambahkankodedibawahini:
<?php $this->menu=array( array('label'=>'Daftarkan Peserta', 'url'=>array('participant/create','id'=>$model->idtraining )),); ?>
3) Ubahjugaviewdari_form.phpdariParticipant,hilangkanfieldTrainingidatauuntuk amannyauncheckdengan//
<?php //echo $form->labelEx($model,'trainingid'); ?> <?php //echo $form->textField($model,'trainingid'); ?> <?php //echo $form->error($model,'trainingid'); ?>?>
Perintah diatas tidak digunakan karena pada langkah sebelumnya kita telah mendefinisikan Diklat untuk setiap Peserta yang dipilih, selain itu kalau diaktifkan jugaakanterjadikonflikdualismeDiklat. 4) Dibagian view Training ini, selain bisa membuat training baru kita juga ingin menambahpesertakemasingmasing diklat.Buka TrainingController.phpaturscript padaactionViewmenjadisepertiberikut:
public function actionView($id) { $toparticipant=new Participant('search'); $toparticipant->unsetAttributes(); $toparticipant->trainingid=$id; $this->render('view',array( 'model'=>$this->loadModel($id), 'toparticipant'=>$toparticipant, )); }
5) Masuk ke folder view dari Training lalu buka file view.php, kita ingin menampilkan listing diklat yang dikategorikan per masingmasing training, tambahkan kode sebagaiberikut:
<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'participant-grid', 'dataProvider'=>$toparticipant->search(), //'filter'=>$toparticipant, 'emptyText'=>'Belum ada Peserta yang mendaftar pada diklat ini', 'summaryText'=>'', 'columns'=>array( array( 'name'=>'No', 'type'=>'raw', 'value'=>'$data->idparticipant', ), array( 'name'=>'Nama Peserta', 'type'=>'raw', 'value'=>'Chtml::link($data>name_participant,array(\'participant/view\',\'id\'=>$data>idparticipant))',
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
10
),
), )));?>
Satu langkah lagi akan saya tambahkan yaitu tampilan dari Participant, buka folder view, participant,view.php 1. Breadcrumbsdariparticipant
$this->breadcrumbs=array( 'Participants'=>array('index'), $model->idparticipant, );
Ubahmenjadisepertiini
$this->breadcrumbs=array( 'Participants'=>array('index'), $model->name_participant, );
2. Ubahpulaoperationsdariparticipant
$this->menu=array( array('label'=>'List Participant', 'url'=>array('index')), array('label'=>'Create Participant', 'url'=>array('create')), array('label'=>'Update Participant', 'url'=>array('update', 'id'=>$model->idparticipant)), array('label'=>'Delete Participant', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model>idparticipant),'confirm'=>'Are you sure you want to delete this item?')), array('label'=>'Manage Participant', 'url'=>array('admin')), );
Ubahmenjadisepertiini
$this->menu=array( array('label'=>'Ubah Peserta', 'url'=>array('update', 'id'=>$model->idparticipant)), array('label'=>'Hapus Peserta', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model>idparticipant),'confirm'=>'Are you sure you want to delete this item?')), );
3. Kemudianubahpulatampilandaritulisanpesertadiklatdarimenjadi
<h1><?php echo $model->name_participant; ?></h1>
4. Datapesertajugainginkitaubah,darisepertiini
<?php $this->widget('zii.widgets.CDetailView', array( 'data'=>$model, 'attributes'=>array( 'idparticipant', 'name_participant', 'nip', 'city', 'trainingid', ), )); ?>
Menjadibegini
<?php $this->widget('zii.widgets.CDetailView', array( 'data'=>$model,
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
11
Langkah berikutnya, anda bisa berkreasi sendiri tentunya. Misal dihalaman update ingin diubah, atau halaman Manage menurut anda perlu ditampilkan, halaman create ingin dimodif dll. Hal penting yang harus diperhatikan adalah bahwa, setiap halaman view adalah hasil representasi dari proses coding yang telah kita buat di controller, function actionView, actionadalahakanmenghasilkanview.php,actionCreateakanmenghasilkancreate.phpdst.
B. REFERENSI
http://www.yiiframework.com/doc/guide/1.1/id http://www.yiiframework.com/wiki/250/yiiforbeginners/
C. BIOGRAFI PENULIS
NininSaptoHargiyanto.MenyelesaikanDiplomadiSTAN,seorangFungsionalPranataKomputer di Kementerian Keuangan, Jakarta. Bidang peminatan di Ilmu Komputer adalah Web Development,NetworkingsertaLinux.
KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com
12