[Yii Framework] Membuat Chart

Data… sesuatu yang sangat penting tapi banyak orang yang tidak suka melihatnya karena bisa membuat pusing.. Tidak jarang untuk mempermudah orang melihat dan mempelajari data, maka data itu sendiri bisa di kemas dalam tampilan yang lebih interaktif dan menarik. Salah satu nya adalah menampilkannya dalam bentuk gambar berupa chart…

Dalam Yii Framework sendiri cukup mudah untuk melakukannya.. Sudah ada beberapa extension yang ada untuk menampilkan data. Saya sendiri menggunakan Yii Open Flash Chart untuk menampilkan chart. Extension itu sendiri saya pilih karena menurut saya fitur nya sudah cukup memenuhi kebutuhan saya dan ukurannya yang cukup ringan. Tapi tentu anda bisa explore sendiri extension lainnya yang menurut anda lebih baik :D.

Okeh, saya akan paparkan beberapa step untuk menambahkan chart pada aplikasi anda.. Pertama, download extension dari link yang sudah saya sediakan di atas. Lalu extract dan masukkan ke dalam “projectAnda/protected/extensions”. Untuk menampilkan chart yang data nya tidak terhubung ke database, anda bisa melihat contohnya di link yang sudah saya berikan di atas. Saya disini akan memaparkan cara menampilkan chart yang sudah terhubung dengan database kita…

Setelah anda extract file hasil download tadi, sekarang bukalah controller dimana anda akan menampilkan data anda. Ambil nilai dari database anda yang akan anda tampilkan. Saya sendiri membuat sebuah “actionChart” di controller saya seperti berikut:

	public function actionChart()
	{
		$aa=array();
		$aa[0]=array('nama'=>'NamaTabel1','nilai'=>Tabel1::model()->count());
		$aa[1]=array('nama'=>'NamaTabel2','nilai'=>Tabel2::model()->count());
		$aa[2]=array('nama'=>'NamaTabel3','nilai'=>Tabel3::model()->count());
		$aa[3]=array('nama'=>'NamaTabel4','nilai'=>Tabel4::model()->count());
		$this->render('chart',
			      array('aa'=>$aa,));
	}

Penjelasan : disana saya mendefinisikan sebuah nilai $aa dengan tipa array. Lalu saya memasukkan ke dalamnya data nama sesuai nama tabel masing-masing, dan nama “nilai” nya saya masukkan data nya sesuai dengan jumlah data pada masing-masing model. Disana sendiri saya mengirim variabel $aa agar bisa digunakan di view yang akan menampilkan chart nya.

Nah, setelah sudah mendefinisikan data dari controller tadi, sekarang kita definisikan chart nya di tampilan kita. Anda cukup masukkan code berikut di tampilan anda:

Untuk membuat “Line Chart”:

$flashChart = Yii::createComponent('application.extensions.chart.EOFC2');
 
$flashChart->begin();
$flashChart->setData($aa,'{n}.nilai','{n}.nama');
$flashChart->renderData('line');
$flashChart->render(400, 400);

Untuk membuat “Bar Chart”:

$flashChart = Yii::createComponent('application.extensions.chart.EOFC2');

$flashChart->begin();
$flashChart->setData($aa,'{n}.nilai','{n}.nama');
$flashChart->renderData('bar');
$flashChart->render(400, 400);

Untuk membuat “Pie Chart”:

$flashChart = Yii::createComponent('application.extensions.chart.EOFC2');

$flashChart->begin();
$haha=array();
$flashChart->setData($aa,'{n}.nilai','{n}.nama');
$flashChart->renderData('pie');
$flashChart->render(400, 400);

Untuk membuat “Bar Chart” dengan label:

$flashChart = Yii::createComponent('application.extensions.chart.EOFC2');

$flashChart->begin('SteppChart');
$flashChart->setTitle('Publikasi BPS RI','{color:#880a88;font-size:15px;padding-bottom:20px;}');
$flashChart->setData($aa);
$flashChart->setNumbersPath('{n}.nilai');
$flashChart->setLabelsPath('default.{n}.nama');
$flashChart->setLegend('x','Jenis Publikasi');
$flashChart->setLegend('y','Jumlah', '{color:#AA0aFF;font-size:12px;}');
$flashChart->renderData();
$flashChart->render(400,400);

Selesai… Silahkan anda coba dan liat hasilnya…

Semoga membantu… 😀

[Yii Framework] Membuat Forum Sederhana(3)

Lanjut lagi…

Sekarang kita akan mengarahkan actionCreate yang otomatis menginput nilai id_pertanyaan secara otomatis. Pada controller jawaban di actionCreate nya ubahlah code yang mulanya seperti berikut:

	public function actionCreate()
	{
		$model=new Jawaban;
	        if(isset($_POST['Jawaban']))
		{
			$model->attributes=$_POST['Jawaban'];
			$model->id_penjawab=Yii::app()->user->getId();
			if($model->save())
				$this->redirect(array('pertanyaan/view','id'=>$induk));
		}

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

menjadi seperti berikut:

	public function actionCreate($induk)
	{
		$model=new Jawaban;
	        if(isset($_POST['Jawaban']))
 		{
			$model->attributes=$_POST['Jawaban'];
			$model->id_pertanyaan=$induk;
			$model->id_penjawab=Yii::app()->user->getId();
			if($model->save())
				$this->redirect(array('pertanyaan/view','id'=>$induk));
		}

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

penjelasan : code tersebut melakukan input otomatis pada id_pertanyaan id. Dengan begitu user tidak perlu repot-repot menginput id_pertanyaan, karena user tidak tahu akan id_pertanyaan.

Karena id_pertanyaan akan diinput secara otomatis oleh program dan user tidak perlu menginputnya, maka hapus lah input text pada id_pertanyaan. Caranya buka protected/views/jawaban/_form.php. Hapus tag berikut:

	<div class="row">
		<?php echo $form->labelEx($model,'id_pertanyaan'); ?>
		<?php echo $form->textField($model,'id_pertanyaan'); ?>
		<?php echo $form->error($model,'id_pertanyaan'); ?>
	</div>

Jika sudah selesai, silahkan anda coba jalankan project anda.. Jika sudah benar, maka akan berjalan seperti layaknya sebuah forum tanya jawab…

 

Selesai… Selamat mencoba…

Semoga membantu 😀

[Yii Framework] Membuat Forum Sederhana(2)

Okeh, kita lanjutkan bahasan sebelumnya..

Saya disini mendefinisikan sebuah aturan dimana orang yang bisa berpartisipasi dalam tanya jawab di forum ini adalah orang-orang yang sudah melakukan login terlebih dahulu. Berrti kalo dia belum memiliki akun, dia harus melakukan register. Untuk mendefinisikan hal tersebut, maka harus di lakukan pengaturan di function “accessRule()”, dimana harus kita set seperti berikut:

			array('allow',
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),

Karena kita tadi menggunakan editor, maka hasil dari inputan kita di editor tadi akan menjadi berupa text yang sudah tergabung dengan HTML yang sudah di generate otomatis oleh editor tadi. Nah, untuk membuat agar tampilan text HTML yang terdapat pada inputan kita tadi akan otomatis di tampilkan dengan bentuk aslinya, maka kita harus ubah beberapa hal..

Pertama buka pada “projectAnda/protected/views/pertanyaan/_view.php”, ubah code berikut:

<div class="view">
	<b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
	<?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('pertanyaan')); ?>:</b>
	<?php echo CHtml::link($data->pertanyaan); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('id_penanya')); ?>:</b>
	<?php echo CHtml::encode($data->id_penanya); ?>
	<br />
</div>

menjadi seperti berikut:

<div class="view">
	<b><?php echo CHtml::encode(User::model()->findByPk($data->id_penanya)->username) ?></b>
	bertanya :<br/>
	<?php echo CHtml::link($data->pertanyaan, array('view', 'id'=>$data->id)); ?>
	<br />
</div>

Penjelasan : Pada code di atas saya menghapus beberapa bagian. Ada dua yang saya hapus yaitu tampilan id pertanyaan dan id penanya. Kenapa saya hilangkan? yah itu karena saya rasa id pertanyaan tidak perlu di ketahui oleh user. Sedangkan informasi id orang yang bertanya juga saya hilangkan dan saya ganti dengan orang yang bertanya langsung dengan mengambil informasi ny langsung dari tabel user. Jadi yang hanya di tampilkan pada halaman index hanya informasi judul dari pertanyaan yang jika di klik akan langsung mengarah ke halaman detail nya.

Setelah hal di atas selesai, kita akan membuat suatu kondisi dimana saat user memilih suatu pertanyaan yang sudah ada maka akan user akan langsung di suguhkan tampilan pertanyaan tersebut beserta jawaban yang sudah ada di pertanyaan tersebut. Selain itu user juga akan di berikan option untuk menjawab pertanyaan tersebut.  Pertama, untuk menampilkan semua jawaban pada pertanyaan tersebut, kita harus mengeset query nya pada controllernya. Edit code pada actionView nya menjadi seperti berikut:

	public function actionView($id)
	{
		$sql="SELECT * FROM jawaban where id_pertanyaan=".$id;
		$dataProvider=new CSqlDataProvider($sql,array(
			'keyField' => 'id',
		));
		$this->render('view',array(
			'model'=>$this->loadModel($id),
			'dataProvider'=>$dataProvider,
		));
	}

Penjelasan : code di atas akan mengembalikan data “pertanyaan” yang memiliki id= $id, dan mengembalikan semua data” jawaban” yang memiliki id_pertanyaan=$id.

Lalu kita buat tampilan view nya sesuai dengan yang sudah kita definisikan di atas. Buatlah sebuah file _viewJ.php pada “projectAnda/protected/views/pertanyaan/_viewJ.php”. Lalu masukkan code berikut di dalamnya:

<div class="view">
        <b>
        <?php echo CHtml::encode(User::model()->findByPk($data['id_penjawab'])->username) ?>
        </b>
	Menjawab :<br/>
        <?php echo $data['jawaban']; ?>
	<br />
</div>

Setelah itu pada “protected/views/pertanyaan/view.php”, ubah code yang awalnya seperti berikut:

<?php $this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
		'id',
		'pertanyaan',
		'id_penanya',
	),
)); ?>

menjadi seperti berikut:

<h2>
<?php echo $model->pertanyaan; ?>
</h2>

<?php $this->widget('zii.widgets.CListView', array(
	'dataProvider'=>$dataProvider,
	'itemView'=>'_viewJ',
)); ?>
<h3><?php echo CHtml::link('Jawab Pertanyaan Ini', array('jawaban/create', 'induk'=>$model->id)); ?></h3>

 

Penjelasan : pada tampilan view, kita akan menampilkan semua jawaban yang memiliki id_pertanyaan pada view tersebut. Untuk itu kita harus menampilkan list pertanyaan yang kita maksud. Saya menampilkan list pertanyaan tersebut ke dalam CListView dan menggunakan halaman viewJ untuk menampilkannya… Lalu di bagian paling bawah code tersebut, saya membuat sebuah link yang akan mengarah ke halaman create pada halaman create/jawaban.

Skenario menginput jawaban disini adalah, user memilih sebuah pertanyaan. Lalu user menjawab pertanyaan tersebut. Dalam proses ini, program akan secara otomatis menangkap id_pertanyaan yang akan di masukkan. Jadi user tidak perlu repot-repot menginput id_pertanyaan secara manual, program akan secara otomatis membuat nya. Nah, untuk itu ada bebrapa hal yang harus kita modifikasi pada program kita untuk membuat hal tersebut menjadi otomatis.. Dan itu akan saya bahas pada bahasan selanjutnya 😀

Sekian dlu chapter 2… akan saya lanjutkan di chapter selanjutnya…

Selamat mencoba…

Semoga bermanfaat 😀 ..

 

[Yii Framework] Membuat Forum Sederhana(1)

Salah satu fitur yang biasa ada di dalam web app adalah forum tanya jawab. Yah, saya akan coba paparkan sedikit step-step membuat forum tanya jawab sederhana dengan menggunakan Yii Framework. Sekali lagi, ini hanya forum sederhana yak, bukan forum canggih sejenis kaskus.us 😀 ….

Pertama, buatlah sebuah database yang di dalamnya terdapat 3 buah tabel yaitu:

  • Tabel “User” untuk menyimpan informasi user yang melakukan tanya jawab pada suatu forum
  • Tabel “Pertanyaan” untuk menyimpan seluruh pertanyaan yang di ajukan oleh user
  • Tabel “Jawaban” untuk menyimpan seluruh jawaban yang di buat oleh user.
Sedangkan entitas masing-masing akan saya buat seperti berikut:
  • User : id, username, password, saltPassword
  • Pertanyaan : id, pertanyaan,id_penanya
  • Jawaban : id, jawaban, id_pertanyaan, id_penjawab
Aturan dari tabel tersebut adalah “user” memiliki “pertanyaan” dan “jawaban”. Sedangkan “Pertanyaan” memiliki “Jawaban”.  Anda dapat menambahkan entitas di atas sesuai dengan keinginan dan kebutuhan anda. Tabel dan attribut-attribut di atas adalah persyaratan minimal yang saya penuhi untuk membuat suatu forum. Jika memang harus di kembangkan menjadi lebih besar dan kompleks, kenapa tidak 😀 …
Okeh, setelah anda sudah membuat semua hal di atas, silahkan buat project anda. Lalu lakukan generate code CRUD untuk ketiga tabel tersebut. Setelah itu buatlah operasi login, logout, dan register yang sudah terhubung ke database anda(bisa anda lihat disini). Jika sudah selesai, pastikan operasi login, logout, dan register berjalan dengan benar. Lalu pastikan juga operasi CRUD untuk tabel pertanyaan dan jawaban sudah bisa berjalan dengan baik dan benar.
Jika semua hal di atas sudah anda lakukan, sekarang kita akan modifikasi agar ketiga tabel tersebut terhubung dan bisa menjadi sebuah forum. Pertama-tama, mari kita perindah tampilan dan permudah user dalam menginput pertanyaan dan jawaban dengan menggunakan sebuah editor untuk menginput pertanyaan.  Ada banyak editor dalam PHP seperti tinyMCE, CKeditor, dll… Tapi saya sendiri menggunakan cleditor yang bisa anda lihat disini. Cleditor sendiri saya pilih karena ukurannya yang sangat ringan dan  fitur nya sudah cukup memenuhi kebutuhan saya. Berikut step-step mengintegrasikan cleditor pada aplikasi kita:
  • Download cleditor dari link yang saya kasih di atas
  • Ekstrak hasil downloadan anda di folder “projectAnda/protected/extensions”
  • Pada form pertanyaan dan jawaban, masukkan code berikut pada attribut yang ingin sisipi cleditor nya:
               <?php	$this->widget('application.extensions.cleditor.ECLEditor', array(
			'model'=>$model,
			'attribute'=>'jawaban',
			'options'=>array(
				'width'=>'600',
				'height'=>250,
				'useCSS'=>true,
			),
			'value'=>$model->jawaban,));
		?>

Penjelasan: code di atas akan membuat inputan yang sebelumnya textbox/textarea menjadi sebuah editor dimana user dapat dengan mudah melakukan input dan edit suatu text ke dalamnya.

Pada code hasil generate dari Yii Framework, anda akan menemukan pada form entry “pertanyaan” dan “jawaban” ada input nilai “id_penanya” dan “id_penjawab”. Kedua attribute di atas adalah sebuah informasi yang seharusnya bisa kita input secara otomatis tanpa user perlu memasukkan nilainya.  Caranya adalah dengan cara menangkap informasi user yang sedang login pada web aplikasi kita. Silahkan anda buat hal tersebut menjadi otomatis, langkah-langkah nya sendiri sudah saya paparkan disini. Jika sudah selesai, silahkan anda coba dan pastikan berjalan dengan baik dan benar..

Nah, berhubung perut saya sedang lapar.. saya mau makan dlu yak 😀 …  nanti akan saya sambung lagi materi ini di bagian kedua..

Silahkan anda coba otak-atik apa yang anda buat tadi dengan kreasi anda sendiri..

Selamat mencoba, semoga membantu…

Semoga bermanfaat 😀

Display PDF File

Berikut step-step untuk menampilkan PDF file dengan pada web anda:

Pada view anda, tambahkan code javascript berikut:

<script>
    if (!document.getElementsByTagName)
        return false;
    var links = document.getElementsByTagName("a");
    for (var eleLink=0; eleLink < links.length; eleLink ++)
    {
        if (links[eleLink].href.indexOf('.pdf') !== -1)
        {
            links[eleLink].onclick = function() { window.open(this.href,'resizable,scrollbars'); return false; }
        }
    }
</script>

Penjelasan : code tersebut digunakan untuk menangkap sebuah tag “a” dimana dia akan membuka tab baru saat user menekan click pada link yang sudah ada. Lalu setelah itu tab baru yang telah terbuka tersebut akan menampilkan PDF file yang ada pada link tersebut. Lalu buat link untuk mengakses PDF file nya seperti berikut:

Lihat <a href="a/../data/test.pdf">PDF document</a>

Penjelasan : Code tersebut mengarahkan pada PDF file yang akan di akses…

Anda dapat membuat link itu menjadi dinamis dengan menhubungkan nya lewat database…

Selesai… Selamat mencoba…

Semoga membantu… 😀

[Yii Framework] Membuat Approval Data

Sebuah masalah yang sering di alami pada pembangunan Sistem Informasi adalah adanya sebuah approval pada suatu data. Sebenarnya untuk melakukan ini kita hanya perlu menambahkan sebuah attribut “status” pada tabel yang akan menerapkan hal ini. Tapi tidak ada salahnya saya paparkan cara pembuatannya:

Pertama, tambahkan sebuah attribut “status” pada tabel yang anda maksud. Misal saya sebelum nya memiliki tabel dengan attribut “ID” dan “ISI”. Nah, karena akan diterapkan mekanisme approval data, maka tambahkan sebuah attribut status sehingga attribut yang terdapat disana menjadi “id”, “isi”, dan “status”. Anda dapat memberikan tipe status dengan tipe apa saja sesuai dengan keperluan anda. Tapi saya disini menggunakan tipe “tiny int” dimana yang bisa masuk ke dalam status hanya nilai 0 dan 1. Silahkan anda modifikasi jika anda butuh status yang lebih dari 2 nilai.

Setiap user melakukan input data ke tabel anda, pastikan ada nilai default yang akan di masukkan ke “status”. Caranya adalah pastikan “status” not required dengan mengeset model nya. Hilangkan input form “status” pada form entri data nya. Lalu untuk melakukan set default, buat actionCreate pada controller anda menjadi seperti berikut:

	public function actionCreate()
	{
		$model=new NamaModel;
		if(isset($_POST['NamaModel']))
		{
			$model->attributes=$_POST['NamaModel'];
			$model->status=0;
			if($model->save())
				$this->redirect(array('view','id'=>$model->id));
		}
		$this->render('create',array(
			'model'=>$model,
		));
	}

Penjelasan : Code di atas tidak jauh berbeda dengan actionCreate hasil generate GII, hanya menambahkan sebuah perintah untuk mengeset nilai default status nya menjadi “0”.

Setelah itu, buatlah sebuah action yang digunakan untuk mengupdate nilai status nya seperti berikut:

	public function actionUpdates($id)
	{
		$model=$this->loadModel($id);
		$model->status=1;
		if($model->save())
			$this->redirect(array('view','id'=>$model->id));

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

Penjelasan : code di atas akan mengupdate nilai “status” menjadi 1. Pastikan anda memberi izin pada actionUpdates dengan cara melakukan pengesetan pada fungsi “accessRule” nya..

Lalu agar dapat melakukan eksekusi action tersebut anda tinggal tambahkan code berikut pada view anda:

<?php echo CHtml::linkButton('Approve',array('submit'=>array('updates','id'=>$model->id)));  ?>

Lalu jalankan program anda… Jika berhasil, maka setelah anda click button di atas anda akan melihat data anda telah berubah status nya menjadi “1”.

Selesai… Selamat mencoba….

Semoga membantu… 😀

[Yii Framework] Membuat attribute entry form yang saling terhubung ex: tabel provinsi, kabupaten,kecamata

Baru saja saya mendapat contoh code membuat entry form yang saling terhubung dari teman saya Yosua Natanael Sianturi(thanks yos sharing nya). Yah, sekalian saja saya share disini siapa tau ada yang butuh.

Misal saya punya 3 tabel pada database saya, yaitu tabel “Provinsi”, “Kabupaten”, dan “Kecamatan”. Ketiga tabel tersebut jelas saling berhubungan, dimana provinsi memiliki kabupaten, dan kabupaten memiliki kecamatan. Untuk menghindari kesalahan pengentrian, maka saya akan buat teknik pengentriannya dengan dropdownlist. Nah, masalah nya adalah bagaimana cara nya agar kita bisa menghindari kesalahan pengentrian dari sisi hubungan tabel nya. Ga mungkin kan, kalo seandainya Kota “Makassar” masuk ke dalam provinsi “Jawa Tengah”. Maka dari itu kita harus membuat form tersebut saling terhubung.

Yang akan saya buat adalah entri data pada tabel kecamatan. Pada tabel kecamatan ada informasi tentang “Provinsi” dan “Kabupaten” nya, dimana antara Provinsi dan kabupaten harus teliti. Misal, saya memilih provinsi Jawa Timur, maka pilihan yang akan di tampilkan pada attribut kabupaten adalah semua nama kabupaten pada provinsi Jawa Timur, diluar provinsi Jawa Timur tidak akan di tampilkan.

Okeh langsung saja kita bahas codingnya…

Pertama, buatlah code berikut pada controller kecamatan:

	public function actionTampilKabupaten()
	{
		$propinsi = $_GET["propinsi"];
		$sql= Kabupaten::model()->findAllByAttributes(array('propinsi'=>$propinsi));
		echo "<option>--Pilih Kabupaten--</option>";
		foreach ($sql as $i)
		{
			echo '<option value="'.$i->id.'">'.$i->kabupaten.'</option>';
		}
	}

Penjelasan : code di atas digunakan untuk memasukkan semua nilai dari tabel kabupaten yang memiliki id provinsi tertentu. Nilai yang dihasilkan dari code tersebut akan secara otomatis di masukkan ke dalam sebuah dropdownlist kabupaten yang akan kita tuju.

Lalu pada views dan _form.php nya, tambahkan code javascript berikut tepat di bawah <div class=”form”> nya

<script>
		$(document).ready(function(){
			$("#propinsi").change(function(){
				var propinsi = $("#propinsi").val();
				$.ajax({
					url: "<?php echo Yii::app()->createUrl('kecamatan/tampilkabupaten')?>",
					data: "propinsi=" + propinsi,
					success: function(data){
						$("#Kecamatan_kabupaten").html(data);
				}
			});
		});
	});
</script>

Penjelasan : code di atas digunakan untuk memanggil actionTampilKabupaten yang telah kita buat tadi guna mengambil nilai nya untuk di masukkan kedalam pilihan kabupaten. Jangan lupa, diatas ada “Kecamatan_kabupaten”, itu action tampilkabupaten tadi akan menjalankan perintahnya dan menyisipkan pilihan dan nilai ke dalam attribut “Kecamatan_kabupaten” yang merujuk pada attribut “kabupaten”.

Setelah itu, modifikasi attribut pada propinsi dan kabupaten sehingga menjadi seperti berikut:

	<div class="row">
		<?php echo $form->labelEx($model,'propinsi'); ?>
		<?php echo $form->dropDownList($model,'propinsi',
			CHtml::listData(Propinsi::model()->findAll(),
			'id', 'propinsi'),array(
			'id'=>'propinsi', 'empty'=>'--Pilih Propinsi--')); ?>

		<?php echo $form->error($model,'propinsi'); ?>
	</div>

	<div class="row">
		<?php echo $form->labelEx($model,'kabupaten'); ?>
		<?php echo $form->dropDownList($model,'kabupaten', array('empty'=>'--Pilih Kabupaten--')); ?>
		<?php echo $form->error($model,'kabupaten'); ?>
	</div>

Penjelasan : Code di atas adalah kode pengaturan form pada form entry data kita. Pada attribut provinsi, dia akan menampilkan semual list propinsi yang ada pada database kita. Sedangkan kabupaten tidak akan menampilkan pilihan apa-apa, kabupaten akan muncul pilihannya jika kita sudah memilih salah satu propinsi.

Setelah melakukan step-step tersebut, anda dapat mencoba nya. Coba anda pilih salah satu propinsi dari dropdownlist propinsi. Jika apa yang anda lakukan sudah benar, maka pada dropdownlist kabupaten harus nya akan secara otomatis terisi dengan list kabupaten pada propinsi yang anda pilih tadi…

Selesai,…. Selamat mencoba..

Semoga membantu… 😀

[Yii Framework] Upload File not Required

Beberapa waktu lalu ada yang menanyakan bagaimana cara membuat upload file not required di Yii Framework.  Sebenarnya sudah saya jawab disini , tapi tidak ada salahnya saya bahas di post tersendiri..

Yah, untuk melakukan itu cukup membuat controller create nya menjadi seperti berikut:

	public function actionCreate()
	{
		$model=new File;
		if(isset($_POST['File']))
		{
			$model->attributes=$_POST['File'];
			$models;
			if(strlen(trim(CUploadedFile::getInstance($model,'file'))) > 0)
			{
				$models=CUploadedFile::getInstance($model,'file');
				$model->file=Yii::app()->basePath . '/../data/' . $model->id.'.pdf';
			}
			if($model->save())
			{
				if(strlen(trim($model->file)) > 0)
				{
					$path=Yii::app()->basePath . '/../data/' . $model->id.'.pdf';
					$models->saveAs($path);
				}
				$this->redirect(array('view','id'=>$model->id));
			}
		}

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

Penjelasan : Disana dapat anda lihat code nya akan mengecek terlebih dahulu apakah file yang d upload ada atau tidak. Jika tidak ada, maka program tidak akan mengeksusi perintah “saveAs($path)” yang berarti menyuruh program menyimpan file nya. Tapi jika ada, maka dia akan mengeksekusi perintah tersebut..

Selesai… Selamat mencoba…

Semoga membantu… 😀

[Yii Framework] Multi Submit button pada suatu form

Pada beberapa kasus, kita biasa nya perlu membuat suatu skenario dalam menjalankan suatu operasi pada suatu form di web. Jika kita melakukan ini di desktop app, ini tidaklah sulit karena kita menggunakan event-event untuk membuat suatu skenario pada desktop. Tapi tidak semudah itu untuk web app.

Misal, saya mempunyai dua buah action skenario yang ingin saya buat. Misal:

	public function actionCreate($induk)
	{
		$model=new Gejala;
		$this->performAjaxValidation($model);

		if(isset($_POST['Gejala']))
		{
			$model->attributes=$_POST['Gejala'];
			$model->induk_id=$induk;
			$model->dibuat_oleh=(int)Yii::app()->user->getId();
			if($model->save())
				$this->redirect(array('create','induk'=>$model->id));
		}

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

dan

	public function actionCreates($induk)
	{
		$model=new Gejala;
		$this->performAjaxValidation($model);

		if(isset($_POST['Gejala']))
		{
			$model->attributes=$_POST['Gejala'];
			$model->induk_id=$induk;
			$model->dibuat_oleh=(int)Yii::app()->user->getId();
			if($model->save())
				$this->redirect(array('/solusi/create','induk'=>$model->id));
		}

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

Pada kedua action tersebut sama-sama akan menyimpan nilai yang ada pada form ke dalam database, hanya saja kedua nya akan langsung redirect ke halaman berbeda. Biasa nya pada setiap form entry nilai pada Yii Framework pasti sudah tersedia sebuah tombol “Create” yang pada kasus ini jika tombol create di tekan, maka dia akan menjalan kan action pertama yaitu “ActionCreate”. Nah, untuk bisa melakukan penyimpanan dengan mengeksekusi action kedua “CreateS”, maka kita dapat melakukannya dengan menambahkan tombol berikut di form kita:

<?php echo CHtml::linkButton('Input Solusi',array('submit'=>array('creates','induk'=>$model->id)));  ?>

Yah, berbeda dengan link biasa yang hanya melakukan redirect halaman ke halaman berbeda. Link yang kita buat di atas akan melakukan eksekusi suatu action pada controller yang sudah kita buat…

Selesai… Selamat mencoba…

Semoga bermanfaat 😀

[Yii Framework] Membuat Web Service SOAP(3)

Sebelumnya saya sudah memaparkan step-step untuk membuat web service pada Yii Framework disini dan disini. Yah kedua postingan itu barulah memaparkan cara untuk membuat service yang mengizinkan client mengambil data. Nah, bagaimana jika ada kasus dimana kita ingin mengizinkan user melakukan perubahan data?? baik itu Insert data baru, update, maupun delete?? Okeh, mari kita bahas cara membuat itu semua dengan Yii Framework..

Pertama-tama, buatlah sebuah fungsi yang mengizinkan user melakukan manipulasi data. Saya hanya akan membuat sebuah fungsi INSERT dan UPDATE data baru dengan web Service. Kurang lebih code dari fungsi yang saya buat adalah seperti berikut:

	/**
	 * @param Satu contact model
	 * @return boolean
	 * @soap
	 */
	public function saveSatu($data)
	{
		if(($oldData=Satu::model()->findByAttributes(
                    array('satusatu'=>$data->satusatu)))!==null)
		{
			$oldData->attributes=$data->attributes;
			return $oldData->save();
		}
		else
		{
			$model=new Satu;
			$model->attributes=$data->attributes;
			return $model->save();
		}
	}

Penjelasan : Pada fungsi di atas saya membuat sebuah fungsi “saveSatu()” dengan parameter nya yang adalah sebuah object “Satu”. Di dalam fungsi itu akan secara otomatis mendeteksi apakah data yang di input sudah ada atau belum. Sehingga jika data nya sudah ada, maka program akan melaksanakan “UPDATE” data secara otomatis. Tapi jika data yang di masukkan belum ada, maka program akan melakukan “INSERT” data.

Setelah kita telah membuat sebuah fungsi yang mengizinkan user untuk melakukan “INSERT” dan “UPDATE” data, maka kita tinggal membuat sebuah client aplikasi yang mengizinkan client untuk mengizinkan fungsi tersebut.

Pada client aplikasi yang saya buat, saya telah membuat sebuah model “Satu” yang attributnya saya buat sama persis dengan model “Satu” yang ada pada server application service nya. Saya juga telah membuat form entri data yang dimana inputan-inputan pada form tersebut akan di tangkap sebagai nilai-nilai yang akan di input ke dalam service yang telah kita buat. Lalu saya membuat sebuat “actionCreate()” pada controller saya yang melakukan penyimpanan data lewat service, kurang lebih saya edit code nya menjadi seperti berikut:

public function actionCreate()
{
	$model=new Satu;
	$client=new SoapClient('http://localhost/namaProject/index.php?r=satu/quote');

	if(isset($_POST['Satu']))
	{
		$model->attributes=$_POST['Satu'];
		$client->saveSatu($model);
	}

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

Penjelasan : Fungsi di atas akan menangkap semua inputan pada form inputan yang telah kita buat. Yah, ini sama persis dengan step “INSERT” data biasa. Hanya saja, disini saya tidak menjalankan perintah untuk menyimpan data tersebut, tapi saya memerintahakan program menjalankan fungsi Service yang sudah kita buat sebelumnya. Dan setelah form tersebut dijalankan, data yang ada pada aplikasi server telah terinput datanya dengan yang sudah kita input tadi…

Selesai…. Selamat mencoba…

Semoga membantu 😀

%d bloggers like this: