Biasanya kita membuat extension karena ingin bisa digunakan di projek lain. Extension bisa bermacam-macam, misalnya berupa behavior, widget dan lain-lain. Untuk tutorial kali ini, Anda akan membuat sebuah extension jenis CWidget.
CWidget merupakan sebuah micro-controller, karena dia punya controller dan view tersendiri. Tetapi dia hanya menempati satu bagian kecil dalam sebuah halaman Web. Misalnya seperti tampilan di sebelah kanan blog Computesta.
Untuk tutorial ini, kita akan membuat sebuah widget yang menampilkan sebuah quote (kutipan) orang terkenal secara acak.
Langkah Pertama
Kita perlu memberi nama untuk widget kita. Mari kita namakan dia MyQuotes saja. Buatlah sebuah folder bernama “myquotes” (tanpa tanda kutip) di dalam webroot/protected/extensions.
Langkah Kedua
Buatlah sebuah file bernama “Myquotes.php” (perhatikan huruf kecil huruf besar dan tanpa tanda kutip) di dalam folder “myquotes”. Buka editor yang biasanya Anda pakai dan masukkan koding di bawah ini ke dalamnya.
<?php
class Myquotes extends CWidget{
public function init(){
}
public function run(){
}
}
Seperti yang kalian lihat nama kelas Myquotes, harus sama persis dengan nama file-nya (Myquotes.php) termasuk huruf besar huruf kecilnya. Dan kelas ini harus diturunkan dari CWidget supaya menjadi widget Yii.
Fungsi init() merupakan tempat inisialisasi nilai pada saat pertama kali widget di jalankan. Sedangkan run() berisi koding apa yang harus dilakukan widget bersangkutan.
Langkah Ketiga
Berikutnya kita akan membuat sebuah properti untuk menampung semua kutipan. Lalu kita isikan properti itu dengan beberapa kutipan.
<?php
class Myquotes extends CWidget{
...
private $quotes;
public function init(){
$this->quotes = array(
'Jagalah tokomu dan tokomu akan menjagamu.',
'Apa yang dimulai dengan amarah diakhiri dengan malu.',
'Waktu adalah uang.'
);
}
...
Untuk $quotes kita menggunakan tipe private karena kita tidak ingin orang lain mengakses langsung kumpulan kutipan kita.
Di bagian init(), masukkan kutipan-kutipan ke $this->quotes. Untuk tutorial ini, penulis memasukkan kutipan secara manual, tetapi Anda dapat mengimprovisasi supaya mengambil kutipan dari database.
Langkah Keempat
Langkah keempat kita harus mengambil acak salah satu dari kumpulan beberapa kutipan.
public function run(){
//ambil acak salah satu quote
$i= rand(0, sizeof($this->quotes)-1);
$quote = $this->quotes[$i];
//tampilkan
$this->render('index', array('quote'=> $quote));
}
Kita ambil angka dengan cara mengacak. Kemudian simpan kutipan urutan ke angka tadi.
Selanjutnya kita memanggil sebuah file view bernama “index”, sekaligus mengirim variabel $quote ke file view tersebut.
Langkah Kelima
Untuk sisi tampilan kita perlu membuat sebuah folder “views” di dalam folder “myquotes”. Cukup buat sebuah file bernama “index.php”.
Isilah “index.php” dengan koding berikut ini:
<blockquote>
<?php echo $quote; ?>
</blockquote>
Dalam koding di sini kita cukup tulis echo $quote untuk menampilkan isi kutipan. Sampai tahap ini, selesai sudah widget yang kita buat.
Cara Pemakaian
Misalnya Anda ingin menampilkan kutipan di halaman depan. Maka di dalam projek Anda bukalah webroot/protected/views/site/index.php. Kemudian masukkan koding ke tempat yang Anda inginkan:
$this->widget('application.extensions.myquotes');
Hasilnya kurang lebih akan seperti begini.
Beginilah contoh hasil tampilan Myquotes
Sekian tutorial sederhana bagaimana membuat extension dengan Yii. Code pada tutorial ini dapat Anda unduh di sini. Jika ingin mengetahui lebih lanjut cara pembuatan extension silahkan membaca panduan Yii.
Cara maggilnya gmn om
pake apa ??
pake ini ko ga bisa Yii::import(“application.extensions.myquotes”);
Kalau mau pakai extension tergantung extensionnya apa dulu. Jadi kebetulan di contoh ini memakai CWidget, jadi cara pakainya adalah :
$this->widget(‘application.extensions.mysquotes’);
Tetep Aja ga bisa padahal udh sama pesrsis kaya yg diatas
di source code cuma ada ini
“ini” yang dimaksud apa yah? Oh ya, ada pesan error? Atau hanya sekedar tidak ada tampilan?
thank you gan,,
btw $this->render(‘index’, array(‘quote’, $quote)); harusnya :$this->render(‘index’, array(‘quote’=> $quote));
untung ane download source code agan,, jd tw yg bener..
hehe
Oh ya. Terima kasih atas koreksinya
[...] Path AliasUmumnya path alias akan sering terpakai di pemanggilan widget. Misalnya Anda ingin memanggil widget yang terletak di dalam folder webroot/protected/components/MyWidget.php, Anda pasti menulis [...]
Makasih atas tutorialnya,mau tanya,apakah mungkin membuat sortable widget kaya di cms gt?sama misalkan user mau add widget ke dlm page. makasih
punya saya error seperi ini gan, gmn solusinya… kayakx masalah di aliasx
Alias “application.extensions.myquote” is invalid. Make sure it points to an existing PHP file and the file is readable.
Hm, dari penulisan tersebut yang harus diperiksa mungkin ini:
1. apakah penulisan nama folder “myquote” sudah benar? Apakah nama foldernya pakai huruf kecil semua?
2. Kalo kodingnya di Linux, coba ubah hak akses folder “myquote” menjadi bisa write semuanya (777) dan file jadi 666
tetap gak bisa mas..erornya sama dengan ane..
extensions (views(index),myquote))
Coba coding pemanggilannya diganti jadi begini (“myquote” ditambah huruf “s”):
$this->widget(‘application.extensions.myquotes’);
di webroot/protected/views/site/index.php.
Untuk cara pemanggilanya bisa menggunakan seperti ini: widget(‘ext.myquotes.Myquotes’); ?>