Beruflich Dokumente
Kultur Dokumente
NininSaptoHargiyanto sapto.hargi@depkeu.go.id LisensiDokumen: Copyright20032012IlmuKomputer.Com Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah 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 adalahbahasapemrogramanscriptyangpalingbanyakdipakaisaatiniataudalamkatalainbisa 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
perintahdiatasberfungsiuntukmembuatfolderbernamaaplikasikudidalamrootdirectory yaitudiC:\xampp\htdocs\mengacupadaaturanyangdibuatolehYii,dimanaYiitelahkita 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 -->
yangberhungandengantraining,bukabrowserlaluketikkanhttp://localhost/phpmyadmin, buatdatabasebarudengannama aplikasikudb, buat4tabeldenganketentuansebagai 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', ),
Kodediatasmemberikankoneksikedatabasekitayangtelahkitabuatsebelumny.Bukalagi browser anda lalu ketikkan alamat http://localhost/aplikasiku/index.php?r=gii masukkan passwordkudikolompasswordlalauenter.Akanmuncul5list,yangakankitalakukandisini adalahModel GeneratordanCrud Generator saja. KomunitaseLearningIlmuKomputer.Com Copyright20082012IlmuKomputer.Com 5
PertamaKlikpadaModelGenerator,pastikanandaingatnama4tabeldidatabasekita, isikanTableNamedengannamatabelkita,isikannamaModelClassdengannamatabel kitadenganhurufawalkapitalklikPreview,KlikGenerate.Ulangiuntuk3tabelkita KeduaKlikpadaCrudGenerator,isikanModelClassdengannilaipadastepPertamatadi, yaitunamatabeldenganhurufawalkapital.KlikpreviewlaluGenerate.Ulangiuntuk3 ModelClasslainnya. Selamat,kinikitatelahmempunyai 4fileModeldidalamfoldermodels,berekstensiphp 4fileControllerdidalamfoldercontrollers,berekstensiphp 4folderViewdidalamfolderviews SemuanyaadadidalamfolderC:\xampp\htdocs\aplikasiku\protected.Kitaakanfokuspada 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:admindanpassword:admin.Setelahberhasillogin,Andadapatmelakukan 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)
Samasepertipadapointa,klikpadaManage.Akanmuncullistingdatayangpowerfull, 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')),
Menjadicukupsepertiini
<h2><?php echo CHtml::link(CHtml::encode($data->category_name), array('view', 'id'=>$data->idcategory)); ?></h2>
Iniakanmenjadikantampilanketikadiklikmenukategori,akanmuncullistingdatakategori saja.
Haliniakanmemberikantampilanjejakposisi(breadcrumbs)dengannamakategori. b. Selainbreadcrumbs,tentunyaharusadaisinya.Isidarikategorisetelahdiklikadalahlist 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) Ubahjugaviewdari_form.phpdariTraining,hilangkanfieldCategoryidatauuntuk 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) Masukkefolderviewdarikategorilalubuka fileview.php, kitainginmenampilkan 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 menambahpesertakemasingmasingdiklat.BukaTrainingController.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) Masukke folderviewdari Training lalu buka file view.php, kita inginmenampilkan 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 dimodifdll.Halpentingyangharusdiperhatikanadalahbahwa,setiaphalamanviewadalah hasilrepresentasidariprosescodingyangtelahkitabuatdicontroller,functionactionView, 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