Thursday, August 5, 2010

Plugin

Plugin pada dasarnya hampir sama dengan helper. Perbedaan utama antara plugin dan helper terletak pada jumlah fungsi. Sebuah helper dapat terdiri dari beberapa fungsi, sedangkan sebuah plugin  hanya mengandung satu buah fungsi. Helper juga biasanya dianggap sebagai bagian dari system utama dan dibuat oleh Tim pengembang CodeIgniter, sedangkan plugin dimaksudan untuk dibuat dan disebarkan oleh komunitas. 
Tata cara penggunaan plugin juga sama dengan cara penggunaan helper, dimana untuk dapat menggunakan plugin dapat dilakukan dengan cara konfigurasi pada file autoload.php atau melakukan proses loading pada setiap controller yang akan menggunakan plugin. Konfigurasi pada autoload.php adalah sebagai berikut:
Untuk melakukan loading pada setiap controller yang akan menggunakan plugin, dilakukan dengan sintak sebagai berikut:
Namaplugin diambil dari nama file plugin, dikurangi ekstensi .php dan _pi. Contoh apabila kita ingin me-load file captcha_pi.php, maka sintaknya adalah sebagai berikut:

Helper

Helper pada dasarnya tidak berbeda dengan library yaitu berguna untuk membantu pengembang membangun aplikasi secara lebih cepat dan efisien. Yang membedakan antara helper dengan library terletak pada format penulisannya. Kalau library dibuat dengan format object oriented, sedangkan helper dibuat dengan format bahasa prosedural. Setiap helper bisa terdiri dari beberapa fungsi, dimana setiap fungsi dari helper melakukan satu pekerjaan yang spesifik tanpa ada ketergantungan terhadap fungsi yang lain. 
Beberapa contoh helper diantaranya adalah URL helper yang membantu dalam pembuatan link, form helper yang membantu untuk membuat element-element form, text helper yang membantu untuk pekerjaan memformat text, Cookie helper yang membantu untuk penanganan cookies, File helper yang membantu untuk bekerja dengan file, dan sebagainya.
Helper biasanya disimpan dalam folder system/helpers, atau di dalam folder system/application/helpers. CodeIgniter akan terlebih dulu mencari helper di dalam folder system/application/helpers, jika helper yang dicari tidak ditemukan pada folder tersebut, baru kemudian dicari pada folder system/helpers.
Sama seperti halnya library, untuk menggunakan helper dapat dilakukan dengan dua cara yaitu melalui konfigurasi pada file autoload.php atau dengan melakukan proses loading pada setiap controller yang akan menggunakan helper. Konfigurasi pada file autoload.php untuk melakukan proses autoloading terhadap helper-helper yang akan kita gunakan adalah sebagai berikut:
Untuk melakukan loading pada setiap controller yang akan menggunakan helper, dilakukan dengan sintak sebagai berikut:
Namahelper diambil dari nama file helper, dikurangi ekstensi .php dan _helper. Contoh apabila kita ingin me-load file html_helper.php, maka sintaknya adalah sebagai berikut:

Library

Library adalah sekumpulan kelas dan fungsi yang dibuat untuk membantu pengembang aplikasi untuk dapat membangun aplikasi dengan lebih cepat dan lebih efisien. Beberapa kelas sangat dibutuhkan dan hampir selalu digunakan setiap kita membangun aplikasi web, sedemikian sehingga kelas-kelas tersebut selalu kita atur supaya secara otomatis di-load oleh sistem dan dapat langsung digunakan. Contoh library yang hampir selalu digunakan dalam suatu web dinamis diantaranya adalah library database, session, input dan security.   
Di dalam CodeIgniter, library terbagi menjadi dua macam, yaitu library yang bersifat global dan library yang kita buat sendiri sesuai dengan kebutuhan. Library global terdiri dari kelas dan fungsi-fungsi yang telah disediakan oleh CodeIgniter, dan terletak pada folder system/libraries. Sedangkan library yang kita buat sendiri sesuai dengan kebutuhan ditempatkan pada folder application/libraries.
Beberapa library yang wajib diketahui oleh setiap pengembang diantaranya adalah:
  • Database, library ini menyediakan serangkaian fungsi-fungsi yang digunakan untuk mengakses database dan melakukan pengolahan data yang ada di dalam database.
  • Input, library ini merupakan library yang digunakan untuk menangani dan memproses data-data yang berasal dari form. Misalkan apabila kita menggunakan form untuk memasukkan data maka library ini harus di-load supaya kita dapat melakukan pemrosesan data form.
  • File Uploading, library ini merupakan library yang digunakan apabila kita akan membangun web yang dapat mengunggah (upload) file ke dalam web. Misalkan kita menginginkan supaya di dalam web kita ada fitur yang dapat digunakan untuk memasukkan file gambar ke dalam aplikasi web kita, maka digunakanlah library ini.
  • Session, library ini merupakan library yang digunakan untuk memelihara informasi status mengenai pengguna. Sebagai contoh misalkan kita membangun suatu website dimana pengunjung website tersebut harus melakukan proses login terlebih dahulu untuk masuk ke dalam suatu halaman, maka pada situasi seperti ini, library session harus di-load supaya kita dapat memelihara state dari pengunjung, sampai pengunjung tersebut logout.  
  • URI Class, library ini berisi fungsi-fungsi yang membantu kita untuk mendapatkan informasi dari URI pada alamat web kita. 
  • Validation, library ini digunakan untuk melakukan validasi terhadap form input yang ada pada aplikasi web kita.    
  • Pagination, library ini berguna pada saat kita memiliki banyak data yang harus ditampilkan. Misalkan kita memiliki 100 data, dimana ke-100 data ini akan ditampilkan ke dalam 10 halaman (10 data / halaman). Untuk membuat 10 halaman yang masing-masing memuat 10 data dan masing-masing halaman terhubung satu sama lain, maka pagination merupakan library yang tepat untuk digunakan. 
Ada banyak lagi sebenarnya library yang dapat digunakan pada CodeIgniter, baik itu library bawaan dari CodeIgniter maupun library pihak ketiga yang cocok digunakan pada CodeIgniter. Tetapi untuk tahap awal library yang baru saja dijelaskan merupakan library yang wajib diketahui karena banyak digunakan. Untuk penjelasan lebih lanjut mengenai penggunaan library dalam CodeIgniter, akan dijelaskan pada saat membahas pengembangan website.
Untuk menggunakan library yang ada pada folder system/libraries, ada dua cara yang dapat dilakukan. Cara pertama adalah dengan cara mengatur supaya library yang kita inginkan secara otomatis dapat digunakan. Cara ini dilakukan melalui pengaturan pada file system/config/autoload.php, sebagai berikut:
Cara kedua adalah dengan melakukan loading terhadap library yang kita inginkan pada controller dimana library ini akan digunakan. Biasanya library ini di-load pada konstruktor dari controller yang bersangkutan. Berikut sintaknya:

Model

Model adalah komponen CodeIgniter yang dirancang untuk bekerja dengan informasi dalam database. Melalui model kita bisa membuat fungsi-fungsi yang dapat mengambil (retrieve), memasukkan (insert), menghapus (delete), maupun memutakhirkan (update) data.
Model dibuat dengan format sebagai berikut:

File-file model yang kita buat, harus disimpan di dalam folder application/models. File-file ini seperti biasa disimpan dengan ekstensi .php, dimana nama file sama dengan nama class, tetapi semuanya menggunakan huruf kecil. Untuk contoh model yang kita buat, maka file dari model disimpan sebagai berikut:
application/models/nama_model.php
Fungsi-fungsi dalam model, dapat kita gunakan setelah kita melakukan proses loading terhadap model yang telah kita buat. Proses loading ini dilakukan di dalam controller, sesuai dengan fungsi controller sebagai penghubung diantara komponen-komponen CodeIgniter. Sebaiknya model di-load di dalam konstruktor dari controller. Tujuannya supaya sekali di-load, semua fungsi yang ada di dalam controller dapat menggunakan model tersebut tanpa harus melakukan loading di setiap fungsi. Berikut sintak untuk melakukan loading suatu model:
Apabila model yang akan kita load berada pada folder tertentu, maka sintaknya:
Setelah model di-load, maka kita dapat mengakses fungsi-fungsi yang ada pada model dengan menggunakan sintak sebagai berikut:
Selengkapnya penggunaan model, view, dan controller secara bersamaan dapat dijelaskan melalui sintak controller berikut ini:


Ketika di-load, model tidak secara otomatis terhubung dengan database. Oleh karenanya ketika kita membuat model, pastikan bahwa database sudah terkoneksi. Untuk melakukan koneksi ke database, kita dapat melakukan beberapa cara diantaranya:
  • Database di-load pada konstruktor yang ada pada model. Dengan melakukan loading database pada satu model, maka database hanya dapat diakses pada model tersebut saja.

  • Database di-load secara otomoatis pada konfigurasi, sehingga kita tidak perlu selalu melakukan proses loading database setiap kita membuat model. Untuk melakukan hal ini, maka kita buka file autoload.php yang ada pada folder application/config. Atur supaya database dapat secara otomatis di-load, dengan cara sebagai berikut:

Tuesday, August 3, 2010

View

View pada dasarnya tidak lebih dari halaman web Pada bagian view inilah kita melakukan desain tampilan dari halaman web kita. Untuk mendesain tampilan yang kita inginkan, kita bisa menggunakan HTML standar, bisa juga dengan menggunakan HTML helper yang telah disediakan oleh CodeIgniter.
View dapat berupa satu tampilan utuh atau bisa juga terdiri dari beberapa view, dimana view-view ini merupakan bagian-bagian dari suatu halaman web seperti header, footer, sidebar, dan lainnya.
Sesuai dengan konsep MVC yang mendasari CodeIgniter, Controller berperan sebagai penghubung antara berbagai komponen yang dibutuhkan CodeIgniter untuk memproses request dari browser. Oleh karenanya view tidak bisa langsung dipanggil untuk melakukan sesuatu, tetapi harus dipanggil melalui controller.
Untuk melihat keterkaitan antara controller dan view dalam menampilkan suatu halaman web, mari kita buat suatu file dengan nama testview.php dengan kode seperti berikut ini:

Simpan kode di atas ke dalam folder application/views.
Untuk dapat menggunakan suatu file view  sehingga dapat ditampilkan, maka gunakan sintak berikut ini:


Namaview adalah nama dari file view yang akan kita tampilkan. Ekstensi '.php' tidak perlu untuk dimasukkan, terkecuali bila kita menyimpan file view tidak menggunakan ekstensi '.php'.  
Sekarang kita buka lagi controller yang kita buat sebelumnya, yaitu file controller 'test.php'. Kemudian di dalam fungsi 'index' kita masukkan sintak untuk memanggil file view yang telah kita buat, yaitu 'testview.php'.



Kemudian kita coba dengan mengakses http://localhost/test/. Tampilan di browser adalah sebagai berikut:
Pada contoh sebelumnya, kita melakukan loading terhadap satu view saja. CodeIgniter sendiri sebenarnya mengijinkan kita untuk melakukan loading beberapa view dalam satu fungsi di controller secara bersamaan. Misalkan satu halaman terdiri dari beberapa view yang dipisahkan yang terdiri dari header, footer, sidebar, dan main body. Kita bisa melakukan loading terhadap view-view ini secara bersamaan dengan kode seperti berikut ini:



View-view yang kita loading pada contoh sebelumnya adalah view-view yang berada pada folder application/views. Tidak jarang kita ingin mengorganisir view-view yang kita buat ke dalam folder-folder tertentu. Kalau kita melakukan hal seperti ini maka ketika kita akan melakukan loading terhadap view-view tersebut, maka nama dari folder harus diikutsertakan. Berikut contoh sintaknya:


Pada contoh sebelumnya, controller melakukan loading terhadap view-view halaman yang statis, dimana tidak ada data yang secara dinamis ditampilkan. Controller sebagai penghubung diantara komponen-komponen CodeIgniter, sebenarnya justeru berfungsi untuk melewatkan data-data ke dalam view untuk kemudian ditampilkan. Data-data yang dilewatkan ini bisa berupa data-data dari database maupun data-data yang didefinisikan di dalam controller. Untuk dapat menampilkan halaman web yang dinamis, maka sebelumnya kita harus membuat dulu view yang dapat menampilkan data-data dinamis. Berikut adalah contoh view yang dapat menampilkan data dinamis:

Selanjutnya kita buat controller yang melewatkan data-data dinamis ke dalam view.


Jika kita akses kembali http://localhost/test/ maka kita akan mendapatkan hasil yang sama dengan hasil pada contoh sebelumnya.

Monday, August 2, 2010

Aturan penulisan URL

Pada penjelasan mengenai controller, telah kita lihat sekilas bagaiman cara penulisan URL pada CodeIgniter, dan bagaimana cara mengakses controller, fungsi serta memasukkan parameter lain yang diperlukan. Pada bagian ini akan dibahas lebih lanjut mengenai seluk beluk aturan penulisan URL pada CodeIgniter.
URL pada CodeIgniter dirancang supaya lebih bagus dilihat dan dapat dengan mudah dikenali oleh search engine. Oleh karenanya daripada menggunakan sistem query string yang standar digunakan, CodeIgniter memilih menggunakan pendekatan segment based. Perbedaan dari kedua pendekatan di atas adalah sebagai berikut:

Contoh pendekatan query string standar:
www.contoh.com/index.php?id=12345
Contoh pendekatan segment based:
www.contoh.com/index.php/test/nilai/25

Segmen-segmen dalam URL dirancang dengan mengikuti kerangka pendekatan Model-View-Controller. Segmen-segmen ini merepresentasikan hal-hal sebagai berikut:
http://contoh.com/index.php/class/fungsi/ID   

Segment ke-1 merepresentasikan controller class yang harus dipanggil.
Segment ke-2 merepresentasikan fungsi yang ada pada controller class.
Segment ke-3 dan tambahan segmen lainnya apabila ada, merepresentasikan ID dan variabel-variabel lainnya yang akan dimasukkan ke dalam fungsi yang ada pada controller.

Secara default seperti pada contoh sebelumnya, index.php akan dimasukkan ke dalam URL. Kita bisa menghilangkan index.php ini dari tampilan dengan cara membuat file .htaccess yang dilengkapi dengan aturan yang memungkinkan tidak ditampilkannya index.php pada URL. Berikut contoh file .htaccess menggunakan metode negatif, dimana segala sesuatu dialihkan kecuali hal-hal yang disebutkan: 
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Pada contoh di atas, setiap HTTP request selain untuk index.php, images, dan robots.txt diperlakukan sebagai request untuk file index.php. Supaya file .htaccess di atas dapat dijalankan, sebelumnya kita harus mengaktifkan terlebih dahulu module RewriteEngine yang ada pada Apache. Pada WAMPServer, untuk mengaktifkan RewriteEngine ini sangat mudah, cukup dengan klik kanan pada ikon WAMPServer, seperti berikut ini:

Walaupun secara default URL pada CodeIgniter menggunakan pendekatan segment based, tetapi apabila kita lebih menginginkan penggunaan pendekatan query string, kita bisa mengaktifkan query string ini dengan merubah aturan pada konfigurasinya. Untuk merubahnya, buka file config.php yang terdapat pada folder application/config, ubah bagian 'enable_query_strings' menjadi 'TRUE' sehingga menjadi:

$config['enable_query_strings'] = TRUE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';

Apabila pendekatan query string ini diaktifkan, maka baik controller maupun fungsi dapat diakses dengan menggunakan 'trigger' yang telah kita tentukan sebelumnya. Contoh URL yang sebelumnya dibuat dengan pendekatan segment based, apabila ditulis dengan pendekatan query string akan menjadi sebagai berikut:
 www.contoh.com/index.php?c=test&m=nilai&id=25

Sunday, August 1, 2010

Controller

Controller berfungsi sebagai penghubung antara komponen-komponen yang dibutuhkan untuk memproses HTTP request dan menghasilkan halaman web. Terkait dengan fungsinya tersebut, maka controller akan berhubungan langsung dengan URI. Perhatikan contoh URI berikut ini:
http://localhost/index.php/test/
Pada contoh di atas, CodeIgniter akan mencoba mencari controller yang bernama test.php dan kemudian mengeksekusi file controller tersebut. Untuk membuktikannya, mari kita buat file test.php. File test.php dapat dibuat dengan menggunakan aplikasi text editor seperti Notepad, Notepad++, Wordpad, EditPlus,Macromedia Dremweaver, dsb. Di dalam text editor yang kita gunakan, tuliskan kode berikut:

class Test extends Controller {

    function index()
    {
        echo 'Hello World!';
    }
}
?>



Save kode di atas ke dalam folder application/controllers. Sekarang coba masuk ke alamat                 http://localhost/index.php/test/ Maka di browser akan muncul tampilan sebagai berikut:


Perlu selalu diingat bahwa nama dari setiap class controller yang kita buat harus diawali dengan huruf kapital. Setiap class yang kita buat juga harus extends Controller supaya mewarisi fungsi-fungsi class controller dan dikenali sebagai controller. File controller yang kita buat harus disimpan dengan format .php dimana nama file harus sama dengan nama class tetapi nama file harus dimulai dengan huruf kecil. Seperti pada contoh di atas, nama class adalah Test dimana class ini extends Controller dan disimpan dengan nama test.php.
Setiap controller minimal terdiri dari satu fungsi. Pada controller Test yang baru saja kita buat, fungsi yang kita buat adalah fungsi index(). Fungsi index() merupakan fungsi yang secara default akan dipanggil apabila argumen kedua pada URL kosong. Jadi ketika kita mengakses alamat http://localhost/index.php/test maka sebenarnya kita sedang mengakses fungsi index() pada controller test. Hasil yang sama akan didapatkan apabila kita mengakes alamat http://localhost/index.php/test/index .
Mari kita coba buat satu fungsi yang lain untuk lebih memperjelas pemahaman kita mengenai controller. Fungsi ini kita namakan 'welcome'. Berikut kode dari fungsi tersebut:

class Test extends Controller {

    function index()
    {
        echo 'Hello World!';
    }
    function welcome()
    {
        echo 'Selamat anda telah membuat fungsi!';
    }
}
?>


Ketikkan alamat berikut di URL: http://localhost/index.php/test/welcome. Tampilan di browser adalah sebagai berikut:
Jika segmen URL lebih dari dua segmen, maka segmen ke-2 dan seterusnya akan diperlakukan sebagai parameter untuk fungsi. Perhatikan contoh berikut ini:

class Test extends Controller {

    function anggota($nama, $id)
    {
        echo "Nama anggota adalah:" .$nama;
        echo "";
        echo "Nomor anggota adalah:" .$id;
    }
}
?>


Ketikkan alamat berikut di URL: http://localhost/index.php/test/anggota/eddy/2. Tampilan di browser adalah sebagai berikut:

Di dalam suatu aplikasi web, tentunya bisa terdapat banyak controller. Di dalam CodeIgniter, kita harus menentukan controller mana yang secara default akan dipanggil ketika nama dari website kita dipanggil. Untuk menentukan controller default dari aplikasi kita, buka file routes.php yang ada pada folder application/config. Misalkan kita ingin supaya controller Test menjadi controller default. Maka ganti controller default dengan nama Test seperti berikut ini:

$route['default_controller'] = 'Test';

Apabila kita menginstall CodeIgniter, biasanya di dalam paket CodeIgniter terdapat Controller bawaan dengan nama 'welcome'. Controller ini menjadi controller default dari CodeIgniter dan berfungsi untuk menampilkan halaman selamat datang di CodeIgniter. Kita bisa menghapus controller ini dan kemudian mengganti controller default dengan controller apapun yang kita inginkan.