[Yii Framework] Membuat Web Service SOAP(2)

Semua sistem yang diciptakan di dunia ini pasti punya keterkaitan dengan data. Sebelumnya saya sudah membahas teknik membuat web service SOAP disini, silahkan anda pelajari postingan sebelumnya jika anda belum paham cara membuat service sederhana pada Yii Framework. Bahasan sebelumnya adalah bahasan untuk membuat SOAP service, hanya saja pada bahasan tersebut, kita belum terintegrasi dengan database. Kali ini saya akan bahas membuat SOAP service yang telah terintegrasi dengan database, semoga membantu :D…

Pertama, pada kasus ini saya punya sebuah table di database saya bernama tabel “satu”yang memiliki attribut berikut:

Ada dua attribut “satusatu” dan “satudua”, dan sudah saya isi dengan 2 row data…

Silahkan anda buat aplikasi Yii anda dan anda generate model dari tabel “satu” dan jangan lupa generate operasi “CRUD” nya. Setelah itu, silahkan buka controller dari tabel “satu” tersebut di folder protected/controllers/satu.php.  Buat sebuah function actions yang akan menurunkan kelas Web Service seperti berikut:

	public function actions()
	{
	    return array(
	        'quote'=>array(
	            'class'=>'CWebServiceAction',
		    'classMap'=>array(
			'Satu'=>'Satu',
		    )
	        ),
	    );
	}

Penjelasan : Seperti yang saya jelaskan sebelumnya bahwa fungsi ini digunakan untuk menurunkan kelas “CWebServiceAction” agar kita dapat menggunakan class web service yang sudah tersedia dari Yii Framework. Hanya saja disana terdapat tambahan “classMap” dimana isinya adalah “Satu”. Code tersebut digunakan untuk mendefinisikan model “Satu” agar dapat dikenali oleh web service. Bingung ??? Okeh-okeh, saya akan kasih contoh. Pada postingan kemarin kita mengembalikan nilai “String” pada service yang kita sediakan. Nah, tipe string itu sendiri sudah di kenali langsung oleh PHP nya. Tetapi pada kasus ini, kita ingin mengirimkan nilai model “Satu” yang dimana model “Satu” itu sendiri tidaklah dikenali. Maka dari itu code tersebut kita buat agar service kita mengenali model “Satu” tersebut..

Jangan lupa definisikan function actions di atas di “function accessRule()”, sama kayak postingan sebelumnya yak ..

Setelah itu, mari kita buat sebuah fungsi service nya. Pada kasus ini, saya akan membuat sebuah service yang hasilnya akan mengirimkan semua nilai yang ada pada tabel “Satu”. Berikut code nya:

	/**
	 *@return Satu[]
	 *@soap
	 */
	public function getSatus()
	{
		return Satu::model()->findAll();
	}

Penjelasan : Disana terdapat comment “@return Satu[]”, ingat pembahasan sebelumnya, itu bukanlah comment biasa. Comment itu adalah yang memberitahukan bahwa service kita akan mengirimkan sekumpulan nilai(array) “Satu”. Comment itu juga(@soap) yang menjelaskan bahwa fungsi tersebut adalah sebuah service. Di dalam fungsi tersebut ada code “return Satu::model()->findAll();”, itu adalah code yang akan mengembalikan semua nilai yang ada pada tabel “Satu”.

Setelah itu bukalah model “Satu” di protected/models/Satu.php. Sisipkan code berikut:

	/**
	* @var string name
	* @soap
	*/
	public $satusatu;
	/**
	* @var string phone number
	* @soap
	*/
	public $satudua;

Penjelasan : Code tersebut untuk mendefinisikan variabel apa saja yang diizinkan untuk dikirimkan via service. Jika anda tidak mengizinkan orang lain mengakses variabel “$satudua”, maka anda cukup “public $satudua” beserta comment yang dimilikinya..

Selesai, silahkan anda coba akses http://localhost/namaProject/index.php?r=satu/quote , dan lihat apakah tampil tag-tag XML disana.  Bila ya, berarti anda sudah sukses membuat service tersebut…

Untuk membuktikan apakah service yang kita buat benar-benar sudah berjalan atau belum, mari kita sekalian membuat client aplikasi yang mengakses service kita tersebut. Sama seperti bahasan sebelumnya, saya akan buat client aplikasi dengan 2 bahasa pemrograman. PHP untuk web application dan C# untuk desktop application.

1. PHP(non Yii Framework)

Buatlah sebuah file .php, lalu masukkan code berikut:

<?php
ini_set( 'soap.wsdl_cache_enable' , 0 );
ini_set( 'soap.wsdl_cache_ttl' , 0 );
$client=new SoapClient('http://localhost/namaProject/index.php?r=satu/quote');
function object_to_array($Class)
{
    $Class = (array)$Class;
    foreach($Class as $key => $value)
    {
	if(is_object($value)&&get_class($value)==='stdClass')
	{
	    $Class[$key] = self::object_to_array($value);
	}
    }
    return $Class;
}
function printListObject($namaObject)
{
    foreach($namaObject as $v)
    {
	echo '<br/>';
	$aku= object_to_array($v);
	foreach($aku as $k=>$valu)
	{
	    echo $valu;
	    echo '<br/>';
	}
    }
}
printListObject($client->getSatus());
?>

Penjelasan :

Pada code di atas kita memanggil service yang kita mau pakai dengan cara memasukkan mendefinisikan URL dari service tersebut. Karena service kali ini akan mengembalikan sekumpulan nial “Satu” dan PHP sendiri tidak mengenali model “Satu” itu sendiri di program ini(yang kenal “Satu” hanya aplikasi server, karena disana didefinisikan model “Satu” ), maka kita harus membuat sebuah fungsi yang dapat mengkonversi nilai satu tersebut menjadi nilai. Nah, fungsi “Object_to_array” disana adalah fungsi yang digunakan untuk mendapatkan nilai-nilai yang ada pada tabel “Satu”, dan fungsi “printListObject” berguna untuk mencetak nilai-nilai yang ada pada tabel “Satu” setelah tabel itu sendiri di uraikan oleh fungsi “Object_to_array”. Setelah, itu simpan file .php tersebut, lalu jalankan lewat localhost anda… Hasilnya seperti berikut:

2. C#(Visual Studio Express Edition 2008)

Buka visual studio anda, buat sebuah project “Windows Form Application”. Sama seperti bahasan kemarin, tambahkan sebuah service reference yang URL nya merupakan URL service kita tadi.

Berbeda dengan saat menggunakan PHP, dengan C#, visual studio akan secara otomatis menggenerate model “Satu” itu sendiri . Sehingga kita tidak perlu membuat sebuah funsi untuk memecah model “Satu” itu sendiri. Masukkan sebuah control “dataGridView” dan sebuah “Button” pada form anda. Buatlah sebuah event untuk “Button” click, lalu masukkan code berikut di dalamnya:

private void button1_Click(object sender, EventArgs e)
{
    ServiceReference1.SatuControllerPortTypeClient itu =
		new WindowsFormsApplication1.ServiceReference1.SatuControllerPortTypeClient();
    dataGridView1.DataSource = itu.getSatus();
}

Penjelasan : Baris pertama maksudnya adalah kita mendefinisikan class yang kita dapat dari service tersebut. Baris kedua adalah kita ingin memasukkan semua nilai “Satu” ke dalam “dataGridView”.

Sekarang jalankan program anda, lalu tekan tombol “Button”, maka hasilnya akan seperti berikut:

Seperti itulah caranya :D…

Selesai,… Selamat mencoba…

Semoga membantu :D…

[Yii Framework] Membuat Web Service SOAP(1)

Web Service saat ini sedang menjadi tren di dunia IT. Dengan web service, memungkinkan sesuatu dapat di akses dari semua platform yang independen. Sifatnya yang independen pada semua platform memberikan kemudahan bagi pihak developer yang ingin mengaksesnya, pihak developer bebas mau menggunakan OS apapun, bahasa pemrograman apapun, jenis komputer apapun.

Pada penerapannya sendiri, web service biasanya akan merujuk ke suatu set API yang dapat di akses oleh client lewat internet. Okeh, untuk penjelasan tentang web service silahkan anda googling-goongling ya 😀 .. Saya disini akan lebih berfokus pada bagaimana kita membuatnya..

Pertama, saya asumsikan saya akan membuat sebuah service untuk tabel “Satu”. Lalu bukalah controller dimana anda akan membuat service nya(pada kasus ini berartu satuController.php). Masukkan code berikut pada controller tersebut:

        public function actions()
	{
	    return array(
	        'quote'=>array(
	            'class'=>'CWebServiceAction',
	        ),
	    );
	}

	/**
	 *@return string
	 *@soap
	 */
	public function getWhatever()
	{
		return 'Terserah mau nampilin apa..';
	}

Penjelasan:  Kita memasukkan dua buah function di atas. Pertama function “actions()” yang digunakan untuk mendefinisikan class “CWebServiceAction” yang sudah disediakan dari Yii Framework. Hal ini dilakukan agar kita dapat menerapkan web service itu sendiri.

Sedangkan function kedua adalah function “getWhatever()”, adalah sebuah function service yang kita sediakan. Fungsi ini bisa di akses lewat aplikasi lain dimana funsi ini akan mengembalikan nilai string yang isinya: ” Terserah mau nampilin apa…”. Satu hal yang harus anda perhatikan, pada code di atas “function getWhatever()” terdapat:

	/**
	 *@return string
	 *@soap
	 */

Itu bukanlah sekedar sebuah komentar, tapi code tersebut lah yang sudah menjadikan “function getWhatever()” tersebut menjadi SOAP yaitu lewat @soap, sedakngan @return string maksudnya adalah fungsi tersebut akan mengembalikan sebuah nilai yang bertipe string.

Setelah telah selesai membuat code di atas, pastikan class “quote” yang sudah kita deklarasikan di “function actions()” sudah bisa kita izinkan aksesnya untuk user dengan cara menambahkannya pada “function rules()” kita, sehingga akan menjadi seperti berikut:

                        array('allow',
				'actions'=>array('index','view','quote'),
				'users'=>array('*'),
			),

Nah, jika sudah selesai coba anda buka link berikut: http://localhost/namaProjectAnda/index.php?r=satu/quote (sesuaikan dengan project anda).

Jika memang pembuatan web service anda sudah berhasil, anda akan melihat tampilan link di atas berupa kumpulan tag XML yang sudah di buat otomatis oleh Yii Framework seperti berikut:

Jika sudah tampil seperti gambar di atas berarti anda sudah berhasil membuat service nya..

Sekarang saya akan bagaimana cara membuat aplikasi client yang akan mengakses service kita. Saya akan tunjukkan dengan menggunakan dua bahasa pemrograman. Yang pertama dengan menggunakan PHP(web application) dan menggunakan C#(desktop application).

1. PHP (non Yii Framework)

Saya akan mencontohkannya tanpa menggunakan Yii Framework. Pertama buatlah sebuah file ” .php”. Lalu masukkan code berikut:

<?php
$client=new SoapClient('http://localhost/1form2model/index.php?r=satu/quote');
echo $client->getWhatever();
?>

Lalu jalankan code di atas via localhost anda… Anda terlihat sebuah halaman yang berisi tulisan ” Terserah mau nampilin apa…”

2 . C#(dengan Visual Studio C# Express Edition 2008)

Pertama, bukalah visual studio anda. Lalu buat project “Windows Form Application” baru. Setalah itu, pada “Solution Explorer” klik kanan pada “References”, lalu pilih “Add Service References”. Masukkan url service yang telah kita buat tadi ke dalam text “Address”, lalu klik “Go”. Setelah selesai, klik “OK”.

Setelah itu letakkan sebuah control “Label” di form anda. Dan buat contructor pada Form tersebut menjadi seperti berikut:

        public Form1()
        {
            InitializeComponent();
            ServiceReference1.SatuControllerPortTypeClient itu =
				new ServiceReference1.SatuControllerPortTypeClient();
            label1.Text = itu.getWhatever();
        }

Setelah itu jalankan program anda.. Hasilnya akan seperti berikut:

Hehe, seperti itulah caranya…

Selesai… Pada postingan selanjutnya saya akan coba paparkan cara menyatukan web service dengan database yang ada pada aplikasi kita…

Okeh, selamat mencoba…

Semoga membantu…. 😀

Programmer = Mesin konversi kopi menjadi software

Bukan, ini ga ngebahas masalah dunia coding-codingan kok 😀 … Hanya sebuah tulisan geblek yang selain buat menghibur(diri saya sendiri khususnya) juga sekalian buat curhat about bla… bla… bla…

Berikut pengakuan programmer:

  • Disaat orang lain bisa tidur teratur 6-8 jam sehari, yeah.. tidak begitu dengan programmer..
  • Disaat orang lain begadang ga tidur sambil nonton TV, game, kumpul bareng temen, santai, dll,… programmer begadang dipenuhi keringat, darah dan air mata(lebay :D)…
  • Disaat orang-orang begadang ga tidur karena belajar/kerja, mereka merasa itu hal yang langka dan mereka merasa itu adalah sebuah kerja keras dan perjuangan yang menakjubkan hingga ga jarang  mereka melampiaskannya dengan cara update status via FB/twitter/dll biar orang-orang tahu kalo mereka baru saja kerja keras. Tapi  programmer gak merasakan itu hal yang aneh, karena itu adalah kebiasaan mereka sehari-hari.
  • Disaat hari libur orang-orang bisa menikmati masa-masa liburnya, programmer juga liburan, tapi di kepalanya hanya ada bugs-bugs software nya yang kejar tayang..
  • Dan disaat programmer telah selesai tugasnya dan ga ada kerjaan lagi, biasanya mereka tidak suka itu berjalan terlalu lama, mereka pasti kangen berat dengan komputer dan baris-baris coding, dan tentu saja mereka akan mencarinya..
  • Percayalah, ga tahu kenapa saya pribadi ga menyesal dengan jalan ini..
*Itu juga berlaku untuk bidang ilmu lain kok 😀

Programmer=mesin konversi kopi menjadi software. Ada juga banyak yang mengatakan “mesin konversi kopi dan rokok menjadi software”. Ga semua programmer merokok dan ngopi, tapi intinya adalah “Begadang”. Yah, kebiasaan satu itu hampir saya temui hampir di semua programmer. Jujur, pertama kali sering begadang karena terinspirasi pola hidup Napoleon Bonaparte yang katanya cuma tidur 4 jam sehari. Awalnya saya coba ikuti dan  hingga sekarang malah jadi kebiasaan sehari-hari..

Mungkin saat tidur adalah saat sangat indah, bagi saya pribadi ga selalu kok. Serius, saya sering kebawa-bawa mimpi akan bugs-bugs software yang saya buat. Dan ini cukup sering terjadi loh.. Berikut beberapa mimpi aneh saya akibat bugs-bugs keparat pada software:

  • Mimpi error yang ada pada software tiba-tiba bener dan program berjalan dengan mulus
  • Mimpi software yang bisa ngikutin apapun mau saya, padahal script code nya belum saya buat.
  • Mimpi software saya hidup dan bener-bener bisa berinteraksi dengan saya.
  • Mimpi jadi programmer dunia yang lagi jadi pembicara pada konverensi kelas dunia.
  • Mimpi nyiptain social network dan jadi terkenal dan disanjung-sanjung banyak ilmuan kelas dunia(efek nonton social network)
  • dll..

Yang paling saya ingat adalah saat saya balik kampung ke Palembang naik bis, semaleman perjalanan di bis, saya mimpi tentang software. WTF!!! Ga cuma mimpi, saat kuliah, makan, ke warteg, bahkan saat khutbah Shalat Jumat(ampuni saya Ya Allah)yang terngiang-ngiang di pikirin saya sering kali masalah coding. Dan saya yakin ini ga cuma terjadi pada diri saya, kalo melihat pola hidup di film “social network” atau “beautiful mind” yang diangkat dari kisah nyata malah jauh lebih serem. Padahal di Film itu nyeritain orang-orang jenius yang sekali lihat langsung ngerti, lah gimana dengan saya yang IQ nya masih jongkok belum beranjak tuk berdiri 😀 …

Yang paling mengerikan adalah saat temen-temen di FB/kaskus membeberkan tentang betapa bahaya nya hidup begadang, sampe kasih contoh gambar-gambar organ tubuh/peristiwa-peristiwa mengenaskan orang-orang yang begadang, WTF!!!  Bahkan Ibu saya sendiri selalu ngingetin tentang cerita tetangga saya yang menemui ajalnya gara-gara begadang melulu(OP Warnet).  Yayaya saya tahu itu, tapi sumpah, ni otak ga tahu kenapa baru akan mencapai masa-masa keemasannya di malam hari(apalagi jam 1-2 malem). Jadi… saya percaya kan saja masalah yang lainnya sama Tuhan :D…

Percayalah, memang benar apa yang dikatakan oleh Bang Rhoma Irama tentang begadang:

Begadang jangan begadang, kalau tiada artinya
Begadang boleh saja, kalau ada perlunya

Begadang jangan begadang, kalau tiada artinya
Begadang boleh saja, kalau ada perlunya

Kalau terlalu banyak begadang
Muka pucat karena darah berkurang
Kalau sering kena angin malam
Segala penyakit akan mudah datang
Darilah itu sayangi badan
Jangan begadang setiap malam 

 

Saya tahu begadang ga baik buat kesehatan, tapi karena menurut saya itu ada manfaatnya bagi saya, maka saya lakukan. Biasanya saya tunjang dengan makanan dan minuman biar badan kuat untuk begadang. Dan biasanya kopi campur susu minumannya, kopi untuk penyeger, dan susu untuk kesehatan :D. Dan rokok?? saya tahu itu ga baik untuk kesehatan dan ga akan pernah ada gunanya..  Semoga saya tidak pernah mencoba-cobanya kelak.. 😀

 

Btw, just kidding.. jangan dibaca terlalu serius yak…

[Yii Framework]Delete dan Update File

Pada postingan sebelumnya disini saya telah membahas tentang cara untuk melakukan upload file pada Yii Framework. Kali ini saya akan menuliskan cara melakukan delete dan update file pada Yii Framework…

Sebelumnya, di PHP sudah ada fungsi yang dapat kita gunakan untuk menghapus suatu file, yaitu: “unlink(‘namaFile’)”. Yah, jelas kita bisa manfaatkan fungsi tersebut untuk melakukan proses delete dan update file pada aplikasi kita. Okeh langsung saja…

Untuk melakukan delete file, anda cukup merubah controller anda tepatnya pada “actionDelete()” menjadi seperti berikut:

	public function actionDelete($id)
	{
		$model=$this->loadModel($id);
		if(Yii::app()->request->isPostRequest)
		{
			unlink(Yii::app()->basePath . 
                                '/../namaFolder/' . $model->id.'.pdf');			
			$this->loadModel($id)->delete();
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) 
                                 ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,
                        'Invalid request. Please do not repeat this request again.');
	}

Yah, dapat anda lihat saya disana hanya menambahkan dua baris code, baris pertama adalah “$model=$this->loadModel($id);” yang berguna untuk menangkap nilai pada model yang memiliki Primary Key $id. Sedangkan baris kedua yang saya tambahkan berisi fungsi “unlink()” yang kita gunakan untuk menghapus file yang kita maksud…

Okeh, sekarang kita sudah tahu cara melakukan upload(create) dan delete file. Sekarang kita tinggal membuat cara melakukan update file. Logika update sendiri adalah delete—->create, jadi dengan pengetahuan yang sudah kita miliki tentang create dan delete, tentu kita sudah bisa mereka-reka code untuk melakukan update. Okeh, setelah saya kotak-katik controller pada “actionUpdate()”, kurang lebih code untuk update file akan menjadi seperti berikut:

	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);
		if(isset($_POST['Buku']))
		{
			unlink(Yii::app()->basePath . 
                                '/../dok/' . $model->id.'.pdf');	
			$model->attributes=$_POST['Buku'];
			$model->buku=CUploadedFile::getInstance($model,'buku');
			
			if($model->save())
			{
				$model->buku->saveAs(Yii::app()->basePath . 
                                              '/../dok/' . $model->id.'.pdf');
				$this->redirect(array('view','id'=>$model->id));
			}
		}

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

Penjelasan: Disana saya hanya menambahkan code untuk melakukan delete file(unlink), menangkap file yang ingin di upload, dan menyimpan file yang akan di upload. Jika anda teliti lagi, itu adalah kombinasi code create dan delete 😀 ..

 

Sekian… Selamat mencoba…

Semoga membantu 😀

[Yii Framework]Auto Save Attribute

Salah satu hal yang sering terjadi pada saat kita ingin melakukan penyimpanan data ke dalam tabel adalah adanya satu attribut dalam tabel tersebut yang ingin kita simpan secara otomatis. Contoh, pada tabel “berita”, kita ingin menyimpan informasi “pengentri”(orang yang menginput berita) dengan cara aplikasi kita otomatis menyimpan informasi pengentri melalui informasi user yang sedang login di aplikasi kita..

Okeh, tentu saja hal itu bisa di lakukan di Yii Framework..  Pada postingan ini, saya akan lakukan dengan 2 cara yang berbeda. Okeh, mari kita bahas satu persatu:

1. Lewat Controller

Anda bisa melakukannya dengan cara menginsert code nya di dalam controller tepat nya di “function actionCreate()”. Berikut code nya:

	public function actionCreate()
	{
		$model=new NamaModel;
		if(isset($_POST['UserAdmin']))
		{
			$model->attributes=$_POST['NamaModel'];
			$model->pengentri=Yii::app()->user->getId();
			
			if($model->save())
				$this->redirect(array('view','id'=>$model->idModel));
		}
		$this->render('create',array(
			'model'=>$model,
		));
	}

Penjelasan : Disana bisa anda lihat saya menyisipkan satu baris code yang menyimpan attribut pengentry sesuai dengan “id” yang dimiliki oleh user yang sedang login, dengan begitu, user tidak perlu susah-susah menginput nilai “id” nya.

 

2. Lewat Model

Pada “model” ada sebuah fungsi “beforeSave()” dimana semua code yang terdapat di dalam tag “beforeSave()” tersebut akan dijalankan sesaat sebelum aplikasi kita melakukan penyimpanan data pada model tersebut. Dengan itu, anda dapat memanfaatkan “beforeSave()” tersebut untuk melakukan penyimpanan otomatis. Kurang lebih anda dapat menyisipkan code berikut di model anda:

	protected function beforeSave()
	{
		$this->pengentri=Yii::app()->user->getId();
	}

Dengan adanya code tersebut, sebelum program kita melakukan penyimpanan pada model yang kita tuju, ia akan melakukan penyisipan nilai yang informasi user yang login ke dalam attribut “pengentri” .

 

Selesai…. Selamat mencoba…

Semoga membantu 😀

[view] 2 model 1 form… pada yii framework…

Untuk proses create(insert) 2 table dari satu form, anda dapat melihatnya disini. Nah, disini yang akan saya bahas adalah bagaimana cara menampilkan 2 tabel dalam 1 form.

Pertama, pada controller nya pastikan terdapat dua fungsi yang mengembalikan nilai pada kedua model tersebut seperti berikut:

	public function loadModel($id)
	{
		$model=Satu::model()->findByAttributes(array('satusatu'=>$id));
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}
	
	
	public function loadModel2($id)
	{
		$model=Dua::model()->findByAttributes(array('duasatu'=>$id));
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

Untuk “loadModel($id)” itu adalah fungsi yang dihasilkan otomatis pada saat yii framework menggenerate operasi CRUD. Fungsi loadModel itu sendiri akan mengembalikan sebuah nilai yang tabel yang memiliki PK=$id. Nah, karena kita disini akan memanggil juga tabel “Dua” maka kita harus sebuah fungsi yang mengembalikan nilai pada tabel “Dua”. Disinilah peranan dari fungsi “loadModel2($id)”, dimana fungsi tersebut akan mengembalikan nilai pada tabel “Dua” yang memiliki PK=$id.

Setelah itu, kita render nilai dari tabel “Satu” dan tabel “Dua” ke function actionView agar dapat ditampilkan. Code pada fungsi tampil akan menjadi seperti berikut:

	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
			'model2'=>$this->loadModel2($id),
		));
	}

Disana terlihat fungsi tersebut merender dua buah model, yaitu “model” dan “model2”. Setelah itu mari kita modifikasi file view nya yang terletak pada protected/views/namaModel/view.php.

Sebelum dilakukan perubahan, code pada halaman tersebut adalah sebagai berikut:

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

Code diatas hanyalah menampilkan tampilan pada tabel “Satu”, untuk menampilkan tampilan nilai dari tabel “Dua”, cukup anda tambahkan code berikut tepat di bawah code di atas:

$this->widget('zii.widgets.CDetailView', array(
	'data'=>$model2,
	'attributes'=>array(
		'duadua',
	),
));

Code di atas menunjukkan bahwa kita akan menampikan nilai atribut “duadua” pada tabel “Dua”.

Selesai…. Selamat mencoba…

Semoga membantu 😀 ….

Pengaturan sederhana Bing Map pada Windows Phone 7

Biasanya kita ingin mengkonfigurasi tampilan awal Bing map pada aplikasi kita. Berikut adalah beberapa pengaturan sederhana untuk melakukan pengaturan diantaranya pada koordinat mana peta kita akan berpusat, menampilkan tombol zoom in dan zoom out, dan pengaturan zoom default..

Sebelum nya, pastikan anda sudah menambahkan reference nya dengan System.Device. Lalu pada class nya tambahkan

using System.Device.Location;

😀

Ada 2 cara untuk melakukan pengaturan Bing Map pada WP7, satu lewat code nya langsung, dan satu lagi lewat code XAML form nya langsung. Baiklah, kita akan bahas satu persatu..

Yang pertama kita akan coba melakukan pengaturan lewat code di class nya langsung..

Buka mainpage.xaml.cs.

Berikut code untuk melakukan pengaturan Bing map:

            map1.Center = new GeoCoordinate(-2.99103520810604, 104.757377877831);
            map1.ZoomBarVisibility = Visibility.Visible;
            map1.ZoomLevel = 15;
  • Baris pertama digunakan untuk melakukan pengaturan koordinat default pada peta(koordinat di atas saya atur untuk menampilkan peta kota kelahiran saya, Palembang 😀 )
  • Baris kedua digunakan untuk menampilkan tombol zoom in dan zoom out
  • Baris ketiga untuk mengatur tingkat zoom pada peta.
Nah, sedangkan untuk pengaturan langsung lewat code XAML nya, anda bisa merubah tag XAML map nya menjadi seperti berikut:
     <my:Map Height="349" HorizontalAlignment="Left" Margin="9,6,0,0" Name="map1" 
           VerticalAlignment="Top" Width="441" CredentialsProvider="key api anda" 
           Center="-2.99103520810604, 104.757377877831" ZoomBarVisibility="Visible" 
           ZoomLevel="15" />

Selesai, hasil nya nanti akan menjadi seperti berikut:

Yak, disana terlihat peta kota Palembang dan menunjukkan sungai Musi dan Jembatan Ampera :D. Terlihat juga dua buah tombol untuk melakukan zoom in dan zoom out… Tentu anda dapat mencoba pengaturan-pengaturan lainnya. Yang saya paparkan di atas barulah segelintir saja..

Selamat bereksperimen…

Semoga membantu…

Menambahkan Bing Map pada Windows Phone 7

Berikut beberapa cara menambahkan Bing Map Control pada Windows Phone 7, ini sangat mudah dan tidak membutuhkan skill coding 😀 :

  • Buka visual studio express windows phone anda.
  • Pilih “Silverlgith for WindowsPhone 7”
  • Lalu buat sebuah project “Windows Phone Application”
  • Pada “Solution Explorer”, klik kanan pada “References” lalu pilih “Add References”.
  • Setelah itu pada tab “.NET” pilih “Microsoft.Phone.Controls.Masp”.
  • Pada “toolbox” anda akan menemukan control bernama “Map”, drag n drop control tersebut ke dalam form UI.
  • Perlu anda ketahui, untuk dapat mengakses Bing Map, kita harus memasukkan API key yang bisa kita dapatkan dari sini
  • Setelah anda sudah mendapatkan key tersebut, anda harus menyisipkan key tersebut ke dalam aplikasi anda dengan cara menyisipkannya di code WPF anda, sehingga akan jadi seperti berikut:
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <my:Map Height="349" HorizontalAlignment="Left" Margin="9,6,0,0" Name="map1" 
        VerticalAlignment="Top" Width="441" CredentialsProvider="key anda" />
    </Grid>
    
    Setelah itu silahkan jalankan aplikasi anda.. Hasilnya akan seperti berikut:
    
    Selamat mencoba...
    Semoga membantu :D

User Level Access Dinamis pada yii framework

Sebelumnya saya sudah buat  cara membuat level access rule disini dan disini. Hanya saja cara tersebut akan sangat sulit di lakukan untuk sebuah informasi user(khususnya pelevelan) yang berubah-ubah dan berskala besar. Contoh, misal kita membuat web site untuk suatu universitas, dimana kita hanya mengizinkan mahasiswa pada fakultas tersebut yang boleh mengakses informasi pada fakultas nya sendiri. Nah, sepertinya ga mungkin kita buat user level access nya satu persatu untuk masing-masing fakultas mengingat fakultas pada suatu universitas sangatlah banyak dan besar kemungknan bisa terjadi perubahan pada informasi. Nah, maka dari itu kita akan lakukan dengan cara lain yang dapat melakukan hal tersebut dengan lebih mudah dan cepat.

Pada setiap website, biasanya kita akan membuat sebuah level access untuk halaman “profile user” dimana hanya user tersebut lah yang bisa mengakses informasi tentang dirinya. Untuk menerapkan hal tersebut, kita tidak dapat menggunakan “function accessRule()”(kalo ada yg bisa mohon di share yak :D) untuk membuat batasannya, tetapi kita dapat melakukannya dengan mengedit controller nya tepatnya di function nya masing-masing. Tapi sebelumnya pastikan pada file “protected/components/UserIdentity.php” terdapat function “getId” yang mengembalikain “id” user yang telah login:

	private $_id;
	public function getId()
	{
		return $this->_id;
	}

Fungsi “getId()” tentu dapat anda modifikasi sesuai dengan kebutuhan masing-masing misal getFakultas(),getLevel(), getTerserah(), dll..

Lalu pada controller yang ingin diberikan level access rule nya, buatlah pada function yang ingin diberikan level access nya beberapa modifikasi code seperti berikut:

	public function actionView($id)
	{
		if(Yii::app()->user->getid()==$id)
		{	
			$this->render('view',array(
				'model'=>$this->loadModel($id),
			));	
		}
		else
		{
			$this->redirect(array('salah'));
		}
	}

Penjelasan:

Disana dapat anda lihat anda pernyataan “if(Yii::app()->user->getId()==$id)”, nah itu dilakukan untuk mengizinkan hanya user yang memiliki profil tersebutlah yang dapat mengakses halaman tersebut. Jika tidak, maka user akan dilemparkan ke sebuah halaman “salah” yang sudah anda buat sendiri 😀

Selesai, selamat mencoba…

Semoga membantu 😀 …

Membuat User Level Access pada yii[upgrade]

Sebelum nya saya sudah pernah posting bagaimana cara nya menerapkan user level access pada yii framework disini. Nah, disini saya akan membuat cara yang berbeda. Sebenarnya cara yang saya buat hanya sedikit memodifikasi beberapa hal pada postingan sebelumnya, tapi menurut saya yang ini lebih mudah untuk di buat dan di terpakan. Okeh, pertama-tama buatlah sebuah project yii framework. Setelah itu buatlah operasi CRUD pada tabel yang anda inginkan. Lalu di folder “protected/components” buatlah sebuah file dengan nama “EWebUser.php”. Setelah isi file tersebut dengan code seperti berikut:

<?php
class EWebUser extends CWebUser{
 
    protected $_model;
 
   protected function loadUser()
    {
        if ( $this->_model === null ) {
                $this->_model = MUser::model()->findByPk( $this->id );
        }
        return $this->_model;
    }
    
    function getLevel()
    {
        $user=$this->loadUser();
        if($user)
            return $user->level;
        return 100;
    }
}

Sebelumnya, pastikan di table user anda terdapat sebuah attribut yang digunakan untuk melakukan pe-level-an. Pada project saya sendiri saya memiliki sebuah attribut “level” pada tabel MUser. Dan jangan lupa code di atas harus anda modifikasi pada bagian “MUser” menjadi sesuai dengan nama tabel user anda. Dan setelah kode di atas telah anda buat, anda dapat membuat level access user nya dengan memberikan code berikut di controller yang anda tuju tepatnya di “function accesssRule()”:

array('allow', 
		'actions'=>array('index','view','create','update','admin','delete'),
		'expression'=>'$user->getLevel()<=1',
	),

Yah, dapat anda lihat disana saya membuat “<=” pada level access nya, itu bisa diterapkan karena kita mengambil nilai integer pada “getLevel()” nya. Jadi kita bisa membuat nya denga =,<=,<,>,>= yah silahkan anda bereksperimen…

 

Selesai, selamat mencoba…

Semoga membantu 😀