Project CakePHP dengan Banyak template

Tulisan ini aku buat karena pas lagi jalan-jalan disini, sepertinya ada hal yang menarik. Heheee… Kebetulan beberapa hari yang lalu, seorang temanku ini, bertanya hal yang sama. Aku pikir nggak menutup kemungkinan juga klo mungkin temen-temen atau adik-adik angkatanku juga bertanya. Maka aku putuskan untuk aku tulis diblog ini aja. Begini pertanyaannya, apakah bisa kita menggunakan lebih satu template dalam CakePHP? Jawabannya adalah sangat bisa. Tapi mungkin agak ribet bagi yang baru belajar CakePHP. Ok nggak usah banyak cerita, langsung kita mulai aja.

 

Sebelumnya ada beberapa konsep dalam CakePHP yang perlu temen-temen ketahui terlebih dahulu. Dalam kasus ini, intinya adalah pada penggunaan function BeforeRender dan RequestAction. Bagi yang udah pernah menggunakan mungkin bisa langsung lompat ke bawah, bagi yang belum silahkan ikuti dengan seksama. Hoho…

 

BeforeRender

 

Menurut CakeAPI,

 

Called before the controller action. Overridden in subclasses.

Definition at line 809 of file controller.php

Pada intinya, bila dalam AppController kita terdapat function dengan nama beforeRender maka function ini akan selalu dijalankan sebelum CakePHP men-generate view. View yang dimaksud disini adalah template atau tampilan.

 

RequestAction

 

Lagi-lagi masih menurut CakeAPI

 

Calls a controller’s method from any location.

Parameters:

  string $url URL in the form of Cake URL (”/controller/method/parameter”)
  array $extra If array includes the key “return” it sets the AutoRender to true.

Returns:

boolean Success

Definition at line 84 of file object.php.

Function ini adalah salah satu function yang jitu saat memenui kebuntuan pada CakePHP. Hehe.. Jadi function ini dapat me-request sebuah function dari sebuah Controller atau bahkan PluginController. Bukan hanya itu aja kelebihan function RequestAction ini, tapi function ini juga bisa digunakan dimana saja, baik pada controller, model atau view.

 

Ok setelah bermodalkan dua function tersebut ternyata masih belum cukup. Hoho.. masih ada satu konsep lagi yang perlu kita ketahui. Yaitu konsep tentang AppController pada CakepPHP.

 

AppController

 

Dalam barcode dengan CakePHP kita banyak kata AppController, tapi banyak juga para programmer CakePHP yang belum tahu tentang konsep AppController ini. Kata AppController biasa kita gunakan saat kita membuat suatu controller. Contoh

 

class PostsController extends AppController

 

Tapi apakah sebenernya AppController tersebut. Bagi temen-temen yang penasaran, file AppController ini bisa di cari pada ../cake/app_controller.php. Setelah dibuka ternyata file ini Cuma berisi komentar dan lisensi dari CakePHP ditambah

 

class AppController extends Controller {

}

Wow, ternyata AppController ini hanya sebuah class turunan dari class Controller. Tapi anehnya class ini tidak diisi apapun. Hoho.. Ada apakah gerangan dirinya? Hihi.. Klo memang isinya kosong mengapa sewaktu kita membuat Controller dalam CakePHP kita mesti menurunkannya dari class AppController? Mengapa tidak langsung dari Controller? Trus mengapa juga class AppController ini dibuat? Padahal kan isinya kosong? Baguslah klo temen-temen punya pemikiran seperti itu. Hehe. Ini seperti pemikiran ku dulu sewaktu awal-awal belajar CakePHP. Tapi dengan usaha yang pantang menyerah download source dari sana-sini, Tanya kesana dan kemari, tanpa mempedulikan cacian dan makian dari seniorku yang sekarang udah jadi antek-antek itu, hehee.. Akhirnya aku bisa juga memahaminya.. hehee.. back to Topic, jadi kenapa Appcontroller tadi dibuat walaupun isinya kosong?

 

Ternyata eh ternyata developer CakePHP sangat jeli. AppController ini memang sengaja dibuat untuk apa? Class ini digunakan saat kita mempunyai function yang dimiliki oleh semua Controller. Bila belum paham, baca lagi yang aku cetak tebal. Kan daripada kita mengketikan ke semua file controller,yang mungkin jumlahnya sangat banyak. Kita diberi alternative untuk membuat file AppController sendiri. Lalu function yang akan dimiliki oleh semua Controller, bisa dituliskan disini. Lho berarti klo kita membuat AppController sendiri maka akan terdapat dua AppController dong? Yup anda benar. Tapi bila kita sudah membuat AppController sendiri, maka secara ostomasis (meniru gaya bahasa senior ku yang udahjadi antek-antek itu.) AppController yang asli (yang dibuat Cake) tidak di load. Bagaimana membuat AppController ini? Cukup copykan saja dulu AppController yang ada pada ../cake/app_controller.php ke ../app/app_controller.php.

 

Dalam perkembangannya CakePHP ternyata belum puas dengan konsep AppController ini. CakePHP masih dilengkapi dengan konsep plugin, untuk menangani kasus yang lebih komplek daripada kasus ini. Kayaknya kapan aja deh konsep plugin nya aku jelasin. Klo sekarang bakal jadi panjang banget nich tulisan.

 

Huh, semua konsep sudah kita dapet. Sekarang bener-bener kita mulai. Idenya adalah untuk memilih template yang akan kita gunakan, kita menyimpan sebuah value dalam database. Misal saja temen-temen membuat tabel dengan nama options. Tabel ini akan kita gunakan untuk menyimpan config dari website kita. Tentunya dalam contoh ini kita akan membuat yang config yang simple aja. Karena sasaran kita adalah system template. Ok, misal tabel options mempunyai field,

 

Id INT
Sitename VARCHAR
Template VARCHAR

 

Klo udah dibuat maka selanjutanya kita buat model dari tabel options. Dalam model ini tidak ada hal yang khusus. Hanya perlu definisi class kemudian buat field $name. selesai untuk modelnya. Aku anggap temen-temen udah punya file option.php pada direktori model. Selanjutnya kita buat OptionsController. Pada intinya OpstionController ini berfunsi untuk mengambil konfigurasi website termasuk template yang kita gunakan. Contoh code nya kira-kira seperti ini,

 

class OptionsController extends AppController

 

{

 

var $name = ‘Configs’;

 

var $helpers = array(’Html’,'Javascript’,'Form’);

 

function getProperty()

 

{

 

$config = $this->Option->find();

 

return $config;

 

}

 

}

 

Code diatas yang paling utama adalah function getProperty. Function itu adalah untuk mengambil komfigurasi website kita, dan mempunyai nilai kembalian array dari konfigurasi yang ada pada database. Ok, setelah itu. Kita akan membuat AppController. Kita buat file dengan nama app_controller.php pada direktori ../app/app_controller.php. kemudian ketikan code berikut,

 

class AppController extends Controller

 

{

 

var $helpers = array(’Html’,'Form’, ‘Javascript’,'Ajax’);

 

function beforeRender()

 

{

 

$con = $this->requestAction(’/options/getProperty’);

 

$this->layout = $con[’Option’][’template’];

 

}

 

}

 

Ok, sampe disini sebenernya udah selesai. Tapi ada beberapa hal yang perlu diketahui. Misal dalam tabel options berisi.

 

Field sitename = Trojan Live In Action

 

Field template = templatedua

 

Maka temen-temen jangan lupa membuat file template di ../app/view/layout/templatedua.thml. dan tentunya dalam file templatedua.thtml itu dipersiapkan segala sesuatunya. Misal, css yang akan digunakan, kemudian javascript yang digunakan, sampe image yang digunakan.

 

Akhirnya selesai juga semuanya. Aku sadar tulisan ini masih sangat jauh dari sempurna. Klo mungkin ada saran atau kritik dari temen-temen, silahkan meninggalkan pesan. Terima kasih semoga bermanfaat.

13 Comments so far »

  1. SeaGateNo Gravatar said,

    Wrote on January 18, 2008 @ 11:17 am

    Hmmm, intinya cm ganti layout ya…

    Btw kalo gak pake requestAction gmn?
    Model Option di-load di AppController bisa kan? requestAction tu terkenal lambat je…

  2. adminNo Gravatar said,

    Wrote on January 18, 2008 @ 11:24 am

    yoi, cuma ganti layout.. biar bisa dimamis, pake sedikit trik.. ya, pake beforeRender trus penandanya disimpan di database..

    maksudnya ini trus ntar di AppController ada field $uses = array(’Option’) githu? apa ntar nggak malah bikin repot buat controller yg laen? dengan begitu kita harus memberika field $uses ke seluruh controller kita..

    kayaknya nggak lambat deh..

  3. AthrunNo Gravatar said,

    Wrote on January 18, 2008 @ 11:16 pm

    wah ra payu ki post..

    keduwuren tro.. (nek aq mudeng sih… :D )

    sesok nek nulis aja aja dhuwur-dhuwur…

    karo ndodok wae..

    whakaka…

    tapi tema ne menarik…

  4. yang punya blogNo Gravatar said,

    Wrote on January 19, 2008 @ 12:46 am

    @Athrun :
    ya dah, bsk tak bahas yg dasar2 aja dulu..

    ada request?

  5. sablengNo Gravatar said,

    Wrote on January 21, 2008 @ 4:12 pm

    Gimana yaa…. bikin aplikasi Point Of Sales dengan CakePHP …
    “Ngimpi kali…..”

  6. yang punya blogNo Gravatar said,

    Wrote on January 21, 2008 @ 4:32 pm

    @sableng

    yang dimaksud Point Of Sales disini, kayak kasir penjualan itu ya?

  7. Pacarnya Zaskia MeccaNo Gravatar said,

    Wrote on January 23, 2008 @ 9:30 am

    aku nduwe aplikasi kasir. wis ono point of sales’e barang. sopo sing meh tuku? mbok aku digolekke pembeli

  8. maulanaNo Gravatar said,

    Wrote on May 6, 2008 @ 6:03 pm

    ne cakephp + smarty nan pie mas?

  9. trojanNo Gravatar said,

    Wrote on May 6, 2008 @ 8:38 pm

    Pacarnya Zaskia Mecca::
    ngone sapa joe? koe gawe dewe yoh? ;))

    maulana::
    di bakery ada sih tutorialnya.. cuma blm sempet belajar aja.. :D

  10. stratoNo Gravatar said,

    Wrote on December 9, 2008 @ 5:19 pm

    kalo misal aplikasi dari cakephp trus didevelopt atau gabung ma situs joomla bisa nggak?

  11. JanNo Gravatar said,

    Wrote on December 22, 2008 @ 1:49 pm

    strato::
    bisa koq.. di joomla ada component nya.. klo gak salah namanya Jake.. :)

    semoga membantu..

  12. hermizaNo Gravatar said,

    Wrote on June 6, 2010 @ 3:42 pm

    mau..tanya.neh..ada..yang..tau..ga..buku….indo..yang..bahas..cake.php…cos..selama..ne..yang..kutemukan..english..edition..semua

  13. HenryNo Gravatar said,

    Wrote on July 2, 2010 @ 12:47 pm

    Thanks gan inpho nya :d

Comment RSS · TrackBack URI

Leave a Comment

:) :( :d :"> :(( \:d/ :x 8-| /:) :o :-? :-" :-w ;) [-( :)>- more »

Name: (Required)

E-mail: (Required)

Website:

Comment: