[Yii Framework] Menghilangkan Nilai Berulang Pada Dropdownlist

Saat menggunakan dropdownlist, sering kali kita mengambil nilainya dari suatu tabel yang ada pada database kita. Nilai yang kita ambil dari tabel itu sendiri terkadang ada nilai yang berulang. Nah, tentu saja pengguna akan kebingungan bukan jika ada nilai yang sama pada pilihan di dropdownlist ?? Nah, berikut cara untuk menghilangkan nilai yang berulang tersebut :

Misal dropdownlist anda sebelumnya seperti berikut :

<?php echo CHtml::dropDownList('dosen',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
        ?>

Untuk menghilangkan nilai berulang, anda cukup mengubah kode di atas menjadi seperti berikut :

<?php echo CHtml::dropDownList('dosen',"string",
                Chtml::listData(Dosen::model()->findAll(array('group'=>'dosen')),'id','dosen'),
                array('style'=>'width:200px'));
        ?>

Penjelasan : Pada kode diatas, kita melakukan operasi “group” pada pengambilan nilai dari database. Contoh kasus di atas adalah saya akan menampilkan semua nama dosen yang ada di database saya, tetapi jika ada dosen yang memiliki nama yang sama maka saya menampilkannya satu kali saja. Maka dari itu saya melakukan operasi “group” pada attribute “dosen”, sehingga tidak akan ada nama yang sama muncul dua kali…

Selesai.. Selamat mencoba..

Semoga membantu… 😀

[Yii Framework] Insert One to Many Relation dengan Data Yang Sudah Ada

Maksud dari postingan ini adalah untuk memecahkan permasalahan ketika kita ingin menginput data baru pada one to many relation tetapi dengan data yang sudah ada sebelumnya. Misal : Saya ingin menambahkan data mahasiswa mana yang telah mengambil mata kuliah dosen A, maka saat saya ingin menambahkan datanya, secara otomatis sistem akan menunjukkan semua list nama mahasiswa yang telah mengambil kuliah  dosen A. Okeh, berikut step-step nya :

Pada controller, buat 2 buah fungsi. Fungsi pertama adalah fungsi yang memerintahkan terlebih dahulu pengguna memilih dosen mana yang akan di masukkan, sedangkan fungsi kedua berfungsi untuk menginput nilainya. Berikut kodenya :

	public function actionUdosen()
	{
		if(isset($_POST['dosen']))
			$this->redirect(array('updosen','id'=>$_POST['dosen']));
		$this->render('udosen');
	}

	public function actionUpdosen($id)
	{
		$model=JunctionTab::model()->findAllByAttributes(array('dosenId'=>$id));

		if(isset($_POST['dosen']))
		{
			$total = count($_POST['mahasiswaId']);
		    for ($i = 0; $i <= $total; $i++)
		    {
		    	if(isset($_POST['mahasiswaId'][$i]))
		    	{
		     		$jiakakak = new JunctionTab;
		     		$jiakakak->dosenId =$_POST['dosen'];
		        	$jiakakak->mahasiswaId = $_POST['mahasiswaId'][$i];
		         	$jiakakak->save();
		    	}
		    }
			$this->redirect(array('admin'));
		}

		$this->render('dosenn',array(
			'model'=>$model,
		));
	}

Pada kedua fungsi tersebut, terlihat kita merender view “udosen” dan “dosenn”. Berikut adalah view “udosen” :

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'tinstrument-form',
	'enableAjaxValidation'=>false,
)); ?>
	<div class="row">
		<?php echo 'Pilih Dosen :'; ?>
        <?php echo CHtml::dropDownList('dosen',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
        ?>
	</div>

	<div class="row buttons">
		<?php echo CHtml::submitButton('Next'); ?>
	</div>

<?php $this->endWidget(); ?>

Dan berikut adalah view “dosenn” :

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'junction-tab-form',
	'enableAjaxValidation'=>false,
)); ?>

	<div class="row">
		<?php echo 'Nama Dosen :'; ?>
        <?php echo CHtml::dropDownList('dosen',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
        ?>
	</div>

	<div class="row">
	    <?php $this->widget('application.extensions.appendo.JAppendo',array(
        	'id' => 'repeateEnum',
        	'model' => $model,
        	'viewName' => 'dosen',
        	'labelDel' => 'Remove Row',
    	)); ?>
    </div>

	<div class="row buttons">
		<?php echo CHtml::submitButton('Save'); ?>
	</div>

<?php $this->endWidget(); ?>

</div>

Okeh, jika anda sudah melaksanakan semua kode di atas. Sekarang download extension jappendo seperti postingan saya disini dan ikuti langkah penggunaannya. Pada folder “protected/extensions/views” buat file .php baru dengan nama “dosen.php”, lalu masukkan kode berikut :

<table class="appendo-gii" id="<?php echo $id ?>">
	<thead>
		<tr>
			<th>Nama </th>
		</tr>
	</thead>
	<tbody>
    <?php if (count($model) == 0): ?>
		<tr>
            <td>
            <?php echo CHtml::dropDownList('mahasiswaId[]',"string",
                Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                array('style'=>'width:200px'));
            ?>
            </td>
		</tr>
    <?php else: ?>
        <?php for($i = 0; $i < count($model); ++$i): ?>
    		<tr>
                <td>
                <?php echo CHtml::dropDownList('mahasiswaId[]',$model[$i]->mahasiswaId,
                	Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                	array('style'=>'width:200px'));
                ?>
                </td>
            </tr>
        <?php endfor; ?>
    <?php endif; ?>
	</tbody>
</table>

Selesai…

Jika sudah membuat fungsi di atas, silahkan anda jalankan dengan menjalankan fungsi “udosen” terlebih dahulu dengan cara masuk ke link : http://localhost/namaProject/index.php?r=namaController/udosen. Anda akan diperintahkan memilih dosen yang akan di tambahkan. Setelah itu anda secara otomatis akan masuk ke halaman : http://localhost/mtom/index.php?r=junctiontab/updosen&id=1 dimana di halaman tersebut anda akan melihat list semua nama mahasiswa yang telah mengambil mata kuliah dosen yang telah anda pilih sebelumnya. Lalu anda bisa menginput data nya dan langsung menyimpannya..

Selamat mencoba..

Semoga membantu… 😀

[C#] Membuat Help dengan CHM File

Biasanya jika anda membuka menu “help” pada beberapa aplikasi seperti office, akan muncul sebuah menu help yg berisi banyak dokumen yang di dalamnya berisi informasi-informasi yang saling terkait seperti tampilan sebuah website. Itu adalah sebuah menu help yang dibangung dengan menggunakan CHM(Compiled Help Modules) File. Biasanya CHM file sendiri dibuat dengan beberapa file berekstensi .htm, .html yang di dalamnya sudah berisi tampilan-tampilan seperti halaman website. Yah, tentunya anda juga dapat membuat menu serupa untuk aplikasi anda sendiri. Bagaimana caranya?? mari kita bahas…

 

Sebelum dapat membuat fitur help, hal pertama yang kita perlukan adalah sebuah file .chm yang akan kita gunakan di menu website tersebut. Nah, untuk membuat file .chm sendiri, kita harus memiliki beberapa file .htm atau .html yang di dalamnya akan berisi menu help apa saja yang akan kita tampilkan..

Beberapa file .htm atau .html ===>>> CHM file ===>>> Membuat menu help

Pertama-tama silahkan anda buat beberapa file dengan ekstensi .html yang di dalamnya sudah berisi menu help yang akan anda buat. Yah, saya anggap anda sudah mengerti bagaimana caranya membuat sebuah file .html yang dapat berisi informasi di dalamnya 😀

 

Setelah anda sudah menyediakan file .html yang akan  di tampilkan di menu help anda, sekarang kita akan membuat .chm file dari gabungan beberapa file .html tadi. Ada beberapa step yang perlu anda lakukan untuk tahapan ini:

  • Download software untuk membundle beberapa file html tadi menjadi sebuah chm file disini. Silahkan anda download file dengan nama “KEL_CHM_Creator_Release”.
  • Jika sudah, sekarang download juga sebuah file yang digunakan untuk mengcompile file .chm disini. Silahkan anda download sebuah file bernama “htmlhelp.exe”
  • Jika kedua aplikasi tersebut sudah anda download, silahkan install keduanya di komputer anda.
  •  Sudah?? jika ya, sekarang jalankan sebuah aplikasi bernama “KEL CHM Creator”.
  • Setelah terbuka, silahkan pilih menu “File-New CHM Project”, lalu tentukan path tempat anda ingin menyimpan beserta nama dari file tersebut.
  • Jika sudah, pada frame “TOC” yang ada di dalam software “KEL CHM Creator”, silahkan klik kanan lalu pilih “node”. Pilih file .htm/.html yang ingin anda masukkan. (Cat : file .html yang ingin dimasukkan harus berada 1 folder dengan project chm anda).
  • Jika sudah selesai menambahkan beberapa file tersebut, silahkan anda pilih menu “build CHM”,
  • Anda akan diarahkan pada tab “Compiler” yang tersedia di dalam aplikasi tersebut, lalu pada isian “compiler”, arahkan  path nya ke path tempat anda menginstall “htmlhelp.exe”  tadi.
  • Setelah itu arahkan path tersebut ke file dengan nama “hhc.exe”
Okeh?? jika anda sudah menjalankannya dengan benar, akan tersimpan sebuah file .chm di tempat di mana anda melakukan “build” tadi…
Ya ya ya… kini kita telah memiliki sebuah file .chm yang dapat digunakan untuk menampilkan fitur “help” pada aplikasi kita.
Okeh2, sekarang mari kita coba menghubungkannya dengan sebuah aplikasi C# kita…
  • Buat sebuah project C#, lalu simpan di suatu tempat.
  • Copy paste file .chm yang sudah kita build tadi ke folder “NamaFolderProject\NamaProject\bin\Debug”.
  • Setelah itu mari kita kembali ke program kita..
  • Untuk uji coba, saya akan membuat sebuah button dimana jika saya klik tombol button tersebut akan muncul fitur help tadi.
Sekarang buatlah sebuah button control pada aplikasi anda, lalu pada event button click, masukkan code berikut :
private void button1_Click(object sender, EventArgs e)
        {
            string haha = Application.StartupPath + @"\as.chm";
            Help.ShowHelp(this, haha, HelpNavigator.TopicId);
        }

NB: Jangan lupa masukkan tambahan “using System.IO” pada aplikasi anda tersebut.

Penjelasan : kode di atas digunakan untuk memanggil menu help dari file .chm yang sudah kita miliki tadi..

Jika anda telah melakukannnya dengan benar, maka jika anda klik button pada aplikasi anda, anda akan melihat tampilan seperti berikut :


Yah, selesai…

Selamat mencoba…

Semoga membantu…  😀

[Yii Framework] Mengarahkan Error ke Page

Mungkin anda ingin mempercantik halaman error anda dengan suatu halaman yang sudah diatur tampilannya agar lebih interaktif ? Tentu hal tersebut bisa dilakukan dengan melakukan sedikit modifikasi pada actionError yang terdapat pada “protected/controllers/siteController.php”. Coba anda lihat fungsi actionError(), anda akan melihat code seperti berikut:

public function actionError()
	{
	    if($error=Yii::app()->errorHandler->error)
	    {
	    	if(Yii::app()->request->isAjaxRequest)
	    		echo $error['message'];
	    	else
	        	$this->render('error', $error);
	    }
	}

Nah, bisa jadi anda ingin membuat sebuah halaman dengan error yang lebih spesifik lagi, misal error404, error403, dll..

Anda bisa melakukan itu dengan cara membuat actionError() nya menjadi seperti berikut:

	public function actionError()
	{
	    if($error=Yii::app()->errorHandler->error)
	    {
	    	if(Yii::app()->request->isAjaxRequest)
	    		echo $error['message'];
	    	else
		{
			switch($error['code'])
			{
				case 404:
					$this->render('halamanTampilanError404', $error);
					break;
				default:
					$this->render('halamanTampilanError', $error);		
			}
		}
	    }
	}

Penjelasan : code diatas berguna untuk mengarahkan action tersebut ke halaman tertentu. Disana anda dapat lihat terdapat kondisi switch-case, dimana jika yang tertangkap adalah error404, maka error akan mengarahkan ke halaman “halamanTampilanError404”. Halaman “halamanTampilanError404” adalah sebuah halaman berekstensi .php yang sudah anda buat di “protected/views/site/”. Sedangkan jika yang ditangkap bukan error404, maka tampilan akan di arahkan ke “halamanTampilanError”..

Selesai… Selamat mencoba..

Semoga membantu… 😀

[Yii Framework] Send Email with PHP Mailer

Berikut step-step mengirim email dengan menggunakan PHP Mailer dengan Yii Framework:

1. Download PHP Mailer extensions untuk Yii Framework disini.

2. Extract hasil downloadan anda, lalu pindahkan hasilnya ke dalam folder “protected/extensions/”.

3. Lalu buat sebuah action di controller anda seperti berikut:

public function actionKirimemail()
	{
    	$mailer = Yii::createComponent('application.extensions.mailer.EMailer');
     	$mailer->IsSMTP();
     	$mailer->IsHTML(true);
     	$mailer->SMTPAuth = true;
     	$mailer->SMTPSecure = "ssl";
     	$mailer->Host = "smtp.gmail.com";
     	$mailer->Port = 465;
     	$mailer->Username = "alamatemailpengirim@gmail.com";
     	$mailer->Password = 'passwordemailpengirim';
     	$mailer->From = "Sabit Huraira";
     	$mailer->FromName = "Percobaan Kirim Email";
     	$mailer->AddAddress("alamatemailtujuan@yahoo.com");
     	$mailer->Subject = "Percobaan.";
     	$mailer->Body = "Ini hanya percobaan mengirim email.";
     	if($mailer->Send()) 
     	{
          	echo "Message sent successfully!";
     	}
     	else 
     	{
          echo "Fail to send your message!";
     	}
	}

Penjelasan : code di atas akan melakukan pengiriman email. Anda harus melakukan konfigurasi email pengirim+password nya beserta beberapa attribut lain sesuai dengan yang anda butuhkan.

Jalankan action di atas dengan cara mengarahkan browser anda pada link actionnya..

Selesai…

Catatan : jika saat anda menjalankan fungsi tersebut lalu anda menemukan pesan error seperti berikut : SMTP Error: Could not connect to SMTP host.

Anda harus aktifkan terlebih dahulu open_ssl.dll di php.ini anda

Selamat mencoba..

Semoga membantu.. 😀

My SELVA

SELVA, Sistem E-Library dengan Web Service BPS Republik Indonesia.. Yah, ini adalah tugas akhir/skripsi saya…  Sebuah perpustakaan digital yang bertujuan untuk mempermudah penyebaran informasi dari BPS ke masyarakat…

  • Inspirasi UI dari METRO UI

Metro UI, UI yang dipopulerkan oleh microsoft lewat produk-produk terbarunya seperti Windows Phone 7, Zune, Windows 8, dll.. Dan tentu saja, ini adalah UI yang sangat berbeda dari UI yang ada pada software yang sering kita lihat. Saya sendiri sangat tertarik dan tentu, hal itu mendorong saya untuk menerapkannya di sistem yang saya buat…

  • Pencarian Cepat dengan Apache Solr

Menggunakan apache solr untuk melakukan pencarian cepat. Apache solr sendiri menurut saya pribadi adalah sesuatu yang sangat powerfull untuk melakukan indexing data. Kesaktian apache solr sendiri bisa dilihat dari banyaknya perusahaan kelas dunia yang menggunakannya pada implementasi sistem mereka..

 

  • Web Service

Web Service saya terapkan pada implementasi sistem saya agar sistem saya dapat diakses dari berbagai platform yang independent baik dari sisi perangkat yang menjalankan, bahasa pemrograman pada aplikasi yang menjalankan, ataupun sistem operasi yang menjalankan.. Dengan web service, jelas apa yang anda buat bisa diakses baik dari web application, desktop, mobile, dll…

 

  • Statistik Pengunjung

Yah, adalah penting untuk mengetahui lalu lintas pengaksesan yang terjadi dalam suatu sistem. Sistem ini sendiri menyediakan fitur untuk melakukan hal itu, dimana sistem dapat melihat statistik pengunjung yang mengakses…

  • Yii Framework

Yii Framework, sebuah PHP framework yang powerfull. Dari PHP framework yang saya coba, Yii Framewok adalah satu-satunya yang saya rasa bisa melebihi development time dari ASP.NET.  Dan tentunya fitur dan konsep yang sangat baik yang sudah ada pada Yii Framework..

 

Dan inilah halaman beranda hasil pekerjaan saya…

Yah, sekian..

Terima kasih banyak untuk semua pihak yang telah membantu…

[Yii Framework] Membuat Entry Data Many to many dengan Tabel Dinamis

Sebelumnya sudah pernah ada paparan mengenai langkah-langkah membuat entry data one to many dengan tabel dinamis disini. Nah, sekarang muncul permasalah lain dimana kita perlu membuat entry data untuk tabel yang memiliki hubungan many to many relation. Okeh, sebelumnya saya akan memberikan contoh untuk tabel “Mahasiswa” dan tabel “Dosen”. Misal saya definisikan bahwa mahasiswa bisa memiliki banyak dosen yang mengajarinya, dan dosen juga bisa memiliki banyak mahasiswa yang diajarinya. Nah, sudah kita ketahui jika ada tabel yang memiliki hubungan many to many, maka kita perlu membuat sebuah tabel penghubung antara kedua tabel tersebut. Pada kasus ini saya akan membuat sebuah tabel penghubung bernama “JunctionTab” Berikut gambaran lengkap tabel nya:

CREATE TABLE IF NOT EXISTS `dosen` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dosen` varchar(50) NOT NULL,
  `jk` enum('laki-laki','perempuan') NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

CREATE TABLE IF NOT EXISTS `junctiontab` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `dosenId` int(11) NOT NULL,
  `mahasiswaId` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `dosenId` (`dosenId`),
  KEY `mahasiswaId` (`mahasiswaId`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

CREATE TABLE IF NOT EXISTS `mahasiswa` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mahasiswa` varchar(50) NOT NULL,
  `jk` enum('laki-laki','perempuan') NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

ALTER TABLE `junctiontab`
  ADD CONSTRAINT `junctiontab_ibfk_2` FOREIGN KEY (`mahasiswaId`) REFERENCES `mahasiswa` (`id`),
  ADD CONSTRAINT `junctiontab_ibfk_1` FOREIGN KEY (`dosenId`) REFERENCES `dosen` (`id`);

 

Okeh, setelah anda membuat tabel-tabel tersebut di database anda, silahkan anda generate model dan CRUD nya dengan menggunakan GII. Pada pembahasan tentang “Entry Data One to many” saya sudah menerangkan bahwa saya disana menggunakan sebuah extension bernama JAppendo. Saya sarankan anda pelajari terlebih dahulu postingan saya sebelumnya agar anda dapat lebih memahaminya. Sekarang silahkan anda download JAppendo tersebut, kemudian pindahkan ke dalam “project/protected/extensions/”. Setelah itu pada folder “appendo/views” buatlah sebuah file .php bernama “dosen.php”, lalu masukkan code berikut ke dalam file tersebut:

<table class="appendo-gii" id="<?php echo $id ?>">
	<thead>
		<tr>
			<th>Nama </th>
		</tr>
	</thead>
	<tbody>
    <?php if ($model->mahasiswaId == null): ?>
		<tr>
            <td>
            <?php echo CHtml::dropDownList('mahasiswaId[]',"string",
                Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                array('style'=>'width:200px'));
            ?>
            </td>
		</tr>
    <?php else: ?>
        <?php for($i = 0; $i < sizeof($model->mahasiswaId); ++$i): ?>
    		<tr>
                <td>
                <?php echo CHtml::dropDownList('mahasiswaId[]',$model->enum_type[$i],    
                	Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                	array('style'=>'width:200px'));
                ?>
                </td>
            </tr>
        <?php endfor; ?>
		<tr>
            <td>
            <?php echo CHtml::dropDownList('mahasiswaId[]',"string",
                Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                array('style'=>'width:200px'));
            ?>
            </td>
		</tr>
    <?php endif; ?>
	</tbody>
</table>

Penjelasan : code tersebut digunakan untuk melakukan perulangan agar kita bisa melakukan entry data dengan kondisi misal “ENTRY SEMUA MAHASISWA YANG DIBIMBING OLEH DOSEN A”.

Setelah itu, di dalam folder yang sama silahkan anda buat lagi sebuah file .php dengan nama “mahasiswa.php”. Lalu isi code berikut:

<table class="appendo-gii" id="<?php echo $id ?>">
	<thead>
		<tr>
			<th>Nama </th>
		</tr>
	</thead>
	<tbody>
    <?php if ($model->dosenId == null): ?>
		<tr>
            <td>
            <?php echo CHtml::dropDownList('dosenId[]',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
            ?>
            </td>
		</tr>
    <?php else: ?>
        <?php for($i = 0; $i < sizeof($model->dosenId); ++$i): ?>
    		<tr>
                <td>
                <?php echo CHtml::dropDownList('dosenId[]',$model->enum_type[$i],    
                	Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                	array('style'=>'width:200px'));
                ?>
                </td>
            </tr>
        <?php endfor; ?>
		<tr>
            <td>
            <?php echo CHtml::dropDownList('dosenId[]',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
            ?>
            </td>
		</tr>
    <?php endif; ?>
	</tbody>
</table>

Penjelasan : Sama seperti code sebelumnya. Hanya saja code di atas digunakan untuk melakukan perulangan. Misal untuk melakukan entry data dengan kondisi “ENTRY SEMUA NAMA DOSEN YANG MENGAJARI MAHASISWA A”.

Setelah selesai melaksanakan instruksi di atas, kini silahkan menuju “protected/controllers/junctiontabcontroller”. Lalu buatlah sebuah function baru bernama “actionDosen”, lalu masukkan code seperti berikut:

	public function actionDosen()
	{		
		$model=new JunctionTab;

		if(isset($_POST['dosen']))
		{
			$total = count($_POST['mahasiswaId']);
		    for ($i = 0; $i <= $total; $i++)
		    {
		    	if(isset($_POST['mahasiswaId'][$i]))
		    	{
		     		$jiakakak = new JunctionTab;
		     		$jiakakak->dosenId =$_POST['dosen'];
		        	$jiakakak->mahasiswaId = $_POST['mahasiswaId'][$i];
		         	$jiakakak->save();
		    	}
		    }
			$this->redirect(array('admin'));
		}

		$this->render('dosenn',array(
			'model'=>$model,
		));
	}

Penjelasan : fungsi di atas berguna untuk menjalankan proses yang akan di jalankan untuk melakukan entry data dan penyimpanan pada kondisi “ENTRY DATA NAMA MAHASISWA YANG DIAJARI OLEH DOSEN ?”.

Setelah itu buat juga fungsi untuk mengentry dengan kondisi “ENTRY DATA NAMA DOSEN YANG MENGAJARI MAHASISWA ?”. Masukkan code berikut di dalam controller:

	
	public function actionMahasiswa()
	{		
		$model=new JunctionTab;

		if(isset($_POST['mahasiswa']))
		{
			$total = count($_POST['dosenId']);
		    for ($i = 0; $i <= $total; $i++)
		    {
		    	if(isset($_POST['dosenId'][$i]))
		    	{
		     		$jiakakak = new JunctionTab;
		     		$jiakakak->dosenId =$_POST['dosenId'][$i];
		        	$jiakakak->mahasiswaId = $_POST['mahasiswa'];
		         	$jiakakak->save();
		    	}
		    }
			$this->redirect(array('admin'));
		}

		$this->render('mahasiswan',array(
			'model'=>$model,
		));
	}

Okeh, selesai sudah kita bermain-main dengan controller. Sekarang silahkan menuju folder “protected/views/junctiontab”. Lalu buat sebuah file .php dengan nama “dosenn.php” dan “mahasiswan.php”. Setelah itu pada dosenn.php, masukkan code berikut:

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'junction-tab-form',
	'enableAjaxValidation'=>false,
)); ?>



	<div class="row">
		<?php echo 'Nama Dosen :'; ?>
        <?php echo CHtml::dropDownList('dosen',"string",
                Chtml::listData(Dosen::model()->findAll(),'id','dosen'),
                array('style'=>'width:200px'));
        ?>
	</div>

	
	<div class="row">
	    <?php $this->widget('application.extensions.appendo.JAppendo',array(
        	'id' => 'repeateEnum',
        	'model' => $model,
        	'viewName' => 'dosen',
        	'labelDel' => 'Remove Row',
    	)); ?>
    </div>

	<div class="row buttons">
		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
	</div>

<?php $this->endWidget(); ?>

</div>

Penjelasan : code di atas adalah tampilan yang akan muncul jika kita memilih menu actionDosen.

Setelah itu pada mahasiswan.php sendiri, masukkan code berikut:

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'junction-tab-form',
	'enableAjaxValidation'=>false,
)); ?>



	<div class="row">
		<?php echo 'Nama Mahasiswa :'; ?>
        <?php echo CHtml::dropDownList('mahasiswa',"string",
                Chtml::listData(Mahasiswa::model()->findAll(),'id','mahasiswa'),
                array('style'=>'width:200px'));
        ?>
	</div>

	
	<div class="row">
	    <?php $this->widget('application.extensions.appendo.JAppendo',array(
        	'id' => 'repeateEnum',
        	'model' => $model,
        	'viewName' => 'mahasiswa',
        	'labelDel' => 'Remove Row',
    	)); ?>
    </div>

	<div class="row buttons">
		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
	</div>

<?php $this->endWidget(); ?>

</div>

Okeh, selesai sudah coding nya.. Jika code yang anda buat sudah benar, maka anda akan mendapati tampilan seperti ini jika memasukkan link http://localhost/mtom/index.php?r=junctiontab/dosen:

Lalu jika anda memanggil URL berikut http://localhost/mtom/index.php?r=junctiontab/mahasiswa, akan terlihat tampilan entri seperti berikut:

Nah, untuk menmpilkan hasil entry tabel nya, kita buat agar tampilannya lebih menarik. Maka masuk ke halaman “protected/views/junctiontab/admin.php” lalu edit komponen CGridView yang sebelumnya seperti ini:

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'junction-tab-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'id',
		'dosenId',
		'mahasiswaId',
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

Menjadi seperti berikut:

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'junction-tab-grid',
	'dataProvider'=>$model->search(),
	//'filter'=>$model,
	'columns'=>array(
		'id',
		array(
			'name'=>'Nama Dosen',
			'type'=>'raw',
			'value'=>'Dosen::model()->findByPk($data->dosenId)->dosen',
		),
		array(
			'name'=>'Nama Mahasiswa',
			'type'=>'raw',
			'value'=>'Mahasiswa::model()->findByPk($data->mahasiswaId)->mahasiswa',
		),
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

Sehingga tampilan halaman adminnya akan menjadi seperti berikut:

Yah, selesai…

Selamat mencoba…

Semoga membantu.. 😀

[Yii Framework] How to Backup Mysql

Berikut step-step membuat code untuk melakukan backup data untuk mysql database:

Pada controller anda, buatlah sebuah action yang bertugas melakukan backup database. Lalu masukkan code berikut :

public function actionBackup()
	{
		$user='root';
		$passw='';
		$dbName='namaDatabase';
		shell_exec("C:\wamp\bin\mysql\mysql5.5.8\bin\mysqldump $dbName > backup.sql --user=$user --password=$passw");
		header("Content-Disposition: attachment; filename=backup.sql");
		header("Content-type: application/download");
		$fp  = fopen("backup.sql", 'r');
		$content = fread($fp, filesize("backup.sql"));
		fclose($fp);
		echo $content;
	}

Penjelasan :

  • $user yang ada di atas adalah username pada DBMS anda
  • $passw adalah password dari DBMS anda
  • $dbName adalah nama database yang ingin anda akses
Perlu anda ketahui bahwa pada code di atas saya memasukkan path :

C:\wamp\bin\mysql\mysql5.5.8\bin\mysqldump

Nah, path di atas adalah path mysqldump.exe yang ada pada komputer saya. Path itu bisa saja berbeda-beda untuk setiap komputer, tergantung milik anda. Tapi untuk yang memakai Wamp Server, biasa nya sama dengan path di atas. Untuk pengguna XAMPP Server biasa nya terletak di  “C:\xampp\mysql\bin\mysqldump”. Dan pengguna paket server lain… silahkan dilihat sendiri yak 😀

 

Setelah anda selesai memasukkan code di atas, jangan lupa mengizinkan pengaksesan action backup di atas dengan cara mendefinisikannya di accessRule, seperti berikut:

public function accessRules()
	{
		return array(
			array('allow',
				'actions'=>array('backup'),
				'users'=>array('*'),
			),

Setelah itu untuk menjalankan fungsi backup tersebut, silahkan masukkan link dari fungsi tersebut:

http://localhost/realSkripsi/index.php?r=namaController/backup

Yah, untuk memperindah, anda dapat memasukkan link di atas dengan tampilan dalam bentuk link…

Selesai… Selamat mencoba..

Semoga membantu… 😀

[Yii Framework] Otak-atik CGridView, Change Pager Label

Yii pastinya telah membuat default untuk komponen yang digunakan di dalamnya, termasuk untuk labelnya. Salah satunya pada CGridView, yaitu pada label halaman “Previous” dan “Next”. Berikut langkah-langkah untuk merubah label tersebut:

Awalnya CGridView memiliki code berikut:

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'mddc-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'id',
		'isi',
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

nah, untuk merubahnya anda dapat mengedit kode tersebut menjadi seperti berikut:

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'mddc-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'pager'=>array(
		'header'=>'',
		'prevPageLabel'=>'&lt; Sebelumnya',
		'nextPageLabel'=>'Selanjutnya &gt;',
	),
	'columns'=>array(
		'kdDdc',
		'ketDdc',
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

Penjelasan : pada code di atas, saya merubah tabel “prev” menjadi “Sebelumnya” dan “next” menjadi “Selanjutnya”..

Selesai.. Selamat mencoba…

Semoga membantu… 😀

[Yii Framework] Otak-atik CGridView, Display HTML Content

Pada CGridView, content yang berisi HTML code biasa secara default akan ditampilkan apa adanya seperti code HTML biasa. Tapi tidak perlu khawatir, anda bisa menampilkan content HTML yang sudah menampilkan tampilan yang sudah di rubah menjadi tampilan biasa. Berikut langkah-langkah nya:

Misal code CGridView anda adalah sebagai berikut:

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'mddc-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'id',
		'Htmlcontent',
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

Saya asumsikan attribut “Htmlcontent” adalah data yang berisi content HTML. Nah untuk menampilkannya dengan tampilan biasa, maka anda rubah code di atas menjadi seperti berikut:

<?php $this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'mddc-grid',
	'dataProvider'=>$model->search(),
	'filter'=>$model,
	'columns'=>array(
		'id',
		'Htmlcontent:html',
		array(
			'class'=>'CButtonColumn',
		),
	),
)); ?>

Penjelasan : disana saya hanya mengubah “Htmlcontent” menjadi “Htmlcontent:html”, dan tampilan langsung berubah.. 😀

Selesai..

Selamat mencoba… Semoga membantu.. 😀