Cara menggunakan what is phplib?

Sampai hari ini PHP 5 dikembangkan dengan Zend Engine 2.0 dengan kemampuan jauh lebih powerfull dibandingkan PHP 4, terutama di sisi OOP, sehingga kemampuan PHP 5 nantinya dapat disejajarkan dengan bahasa pemrograman lain yang lebih komplek seperti Java, ASP.NET, dsb. Survey Netcraft pada Februari 2004 melaporkan bahwa 15 juta server telah di install PHP, atau sekitar 32% dari keseluruhan domain yang ada di internet.

Eris menjelaskan InTemplate, sistem template yang dikembangkan sendiri dan dipakai di Inarts Multimedia.

Kalau Anda masih berpikir bahwa kesuksesan PHP sebagai bahasa pemrograman Web hanya dikarenakan harganya yang, mmm, gratis, maka sudah saatnya Anda berlama-lama di Internet mencari data lebih banyak lagi. Saat ini PHP telah dipakai oleh lebih dari 6 juta domain di seluruh dunia. Banyak di antaranya adalah situs-situs berskala besar dan tidak sedikit yang menggunakan PHP untuk situs e-commerce di mana kehandalan sistem adalah segalanya—lihat studi kasus di www.zend.com/zend/cs/). Tulisan berikut akan memaparkan salah satu strategi membangun situs PHP berskala besar yang efektif, handal, dan tentu saja dinamis dengan menggunakan sistem template.

Template, Apa dan Mengapa?

Ayolah, Anda pasti tahu apa itu template. Sejak belajar mengetik menggunakan MS Word dulu kita sudah dikenalkan dengan template, begitu pula ketika membuat file HTML dengan editor seperti Dreamweaver atau FrontPage. Ya, kurang lebih template seperti itulah yang saya maksud, yaitu file atau dokumen yang digunakan berulang-ulang untuk membuat lebih dari satu halaman dengan layout yang sama.

Dalam perspektif pengembangan situs, sistem template adalah cara memisahkan layer presentasi dari layer logik. Layer presentasi adalah semua yang terlihat di halaman situs, termasuk di dalamnya adalah HTML, gambar, Javascript, CSS, applet, Flash, dan lain-lain. Sementara layer logik adalah keseluruhan skrip PHP yang menjalankan situs yang menjadi tanggung jawab Anda sebagai programer. Pemisahan seperti ini sangat diperlukan pada pengembangan situs berskala besar dengan alasan sebagai berikut:

  • Kerja sama tim yang lebih baik. Dengan pemisahan semacam ini, rekan desainer Anda tidak perlu lagi terganggu dengan skrip-skrip aneh yang Anda buat. Begitupun Anda tidak perlu lagi khawatir skrip yang semalaman telah Anda buat menjadi rusak oleh karena teman Anda tanpa rasa bersalah menimpa sebagian skrip.
  • Skrip yang bersih. Situs dengan aplikasi padat, seperti sebuah portal misalnya, pasti memerlukan skrip yang kompleks yang menghabiskan sampai ribuan baris. Tentunya akan sangat mengganggu sekali kalau skrip yang sudah memusingkan itu ditambah lagi dengan tag-tag HTML di dalamnya.
  • Perubahan tampilan lebih cepat dan mudah. Pernahkah Anda perhatikan situs portal seperti MyQuran.com atau Astaga.com berganti rupa dalam semalam? Dengan pemisahan melalui template, hal tersebut dapat dilakukan dengan mudah, bahkan tanpa harus merombak skrip PHP sedikit pun.
  • Kecepatan. Pemisahan layer seperti ini yang juga berarti pemisahan tag HTML dari kode PHP, memungkinkan Anda membuat skrip yang lebih efektif/cepat, karena tidak dipusingkan lagi dengan tag-tag HTML atau Javascript. Selain itu interpreter PHP juga akan terkurangi bebannya dari memroses tag-tag HTML atau Javascript yang tidak perlu.

Sebenarnya ada beberapa alasan lain mengapa kita butuh sistem template, dan hampir tiap programer punya alasan sendiri-sendiri untuk meyakinkan Anda. Namun satu hal tentang sistem template yang pasti mereka sepakati yaitu simplicity atau kesederhanaan, yang sulit sekali Anda peroleh jika tag-tag HTML dan PHP tidak dipisahkan.

InTemplate

Untuk merealisasikan pemisahan melalui template ini di PHP, terdapat banyak aplikasi/library yang ditawarkan. Di antaranya adalah FastTemplate, CachedFastTemplate, PHPLib, QuickTemplate, dan Smarty. Mengulas satu-persatu skrip-skrip tersebut di luar cakupan artikel ini. Melainkan, dalam kesempatan kali ini saya hanya akan menggunakan InTemplate sebagai ilustrasi.

InTemplate adalah hasil modifikasi dari FastTemplate, sistem template yang cukup terkenal di PHP yang diport dari Perl ke PHP3 oleh para programer CDI. InTemplate menyesuaikan FastTemplate untuk PHP4 serta menambah beberapa fitur baru.

Pergi Ke Mana Hari Ini?

Untuk memulai penjelasan sistem InTemplate, saya akan membuat sebuah halaman Web yang menampilkan jadwal kegiatan harian. Tentu saja ini hanya dummy, karena sebenarnya saya hanya akan menampilkan hari yang berubah-ubah menyesuaikan hari ini.

Langkah pertama adalah membuat file template dengan nama utama.html dan content.html, masing-masing terlihat pada Listing 1 dan Listing 2. Kedua file ini saya letakkan di direktori templates.

Perhatikan teks {TITLE}, {ISI_UTAMA}, {HARI_INI}, dan {TUJUAN} pada listing; ini adalah variabel InTemplate yang nantinya akan diubah dengan nilai sebenarnya. Dua hal yang perlu diperhatikan mengenai variabel InTemplate, pertama, harus menggunakan kurung kurawal, { }, dan kedua, nama variabel tidak boleh menggunakan spasi—gunakan garis bawah jika ingin memisahkan kata, seperti pada ISI_UTAMA dan HARI_INI.

Langkah berikutnya adalah membuat skrip agenda.php seperti terlihat pada Listing 3. Hasil keluaran skrip ini terlihat pada Gambar 1.

Perhatikan Listing 3, secara umum sistem template dari InTemplate melibatkan lima tahap, yaitu:

1. Konstruksi

Yaitu membuat instan dari kelas InTemplate dan menentukan direktori tempat file-file template berada, seperti terlihat pada baris berikut:

$tpl = new InTemplate("./templates");

2. Define

Yaitu membuat nama baru (biasanya lebih pendek) dari nama file template. Nama inilah yang akan digunakan berikutnya dalam kelas.

    $tpl -> Define( array ( main        => "utama.html",
isi => "content.html"
)
);

3. Assign

Mendeklarasikan variabel-variabel InTemplate ke dalam nilai tertentu baik berupa teks, variabel lain, atau fungsi PHP (seperti strftime() pada Listing 3).

$tpl -> Assign( array ( TITLE       => "Pergi Ke Mana Hari Ini?",
HARI_INI => strftime("%A"),
TUJUAN => "Kampus"
)
);

4. Parse

Inilah bagian utama dari InTemplate, yaitu konversi variabel pada file template ke nilai sebenarnya, baik nilai yang dideklarasikan pada maupun file template lain. Baris berikut

$tpl -> Parse(ISI_UTAMA, "isi");

mengkonversi variabel ISI_UTAMA menjadi isi file content.html yang variabel-variabel di dalamnya juga sudah terkonversi. Sementara

$tpl -> Parse(OUT, "main");

mengkonversi variabel baru OUT menjadi isi file utama.html.

5. InPrint

Konversi dari Parse di atas belum mencetak apa-apa ke browser sebelum Anda mencetaknya dengan InPrint seperti baris berikut

$tpl -> InPrint(OUT);

yang mencetak variabel OUT yaitu file utama.html yang sudah terkonversi.

Begitulah cara kerja InTemplate dan begitulah konsep sistem template secara umum. Jika Anda masih penasaran dengan penjelasan saya sebelumnya, maka file utama.html dan content.html sebagai template adalah layer presentasi yang saya maksud, sementara agenda.php sebagai layer logiknya.

Looping dan Alternating

Bicara tentang situs dinamis maka tidak bisa lepas dari query database, sehingga sistem template juga harus mampu menangani data hasil query yang biasanya berjumlah lebih dari satu, lalu menampilkannya di halaman situs dalam bentuk tabel. InTemplate menggunakan teknik dynamic block untuk melakukan looping data hasil query semacam ini.

Sebagai ilustrasi, saya akan menampilkan 10 nama-nama negara di dunia beserta kode negaranya dalam bahasa Inggris yang dapat Anda peroleh di situs DIN (lihat Resource). Saya sertakan hasil dump SQL-nya di CD. Untuk merealisasikan ini saya masih menggunakan template utama.html sebagai file utamanya (lihat Listing 1) sementara list_table.html seperti terlihat pada Listing 4 sebagai isinya.

Pada Listing 4 saya menambahkan dua tag baru yaitu dan yang berfungsi sebagai tanda bahwa tag HTML di antara kedua tag ini adalah dynamic block dengan nama pengenal row, sehingga InTemplate dapat memrosesnya seperti terlihat pada Listing 5.

Tidak ada yang baru pada Listing 5, kecuali tentu saja pada langkah ke-3 yaitu DefineDynamic yang memberitahu InTemplate kalau di list_table.html ada dynamic block dengan nama row.

$tpl -> DefineDynamic("row", "list_table");

Lalu dengan menggunakan baris berikut (perhatikan tanda titik sebelum row):

$tpl -> Parse("ROW", ".row");  

yang diulang dalam perulangan while maka akan diperoleh keluaran seperti Gambar 2.

Teman desainer Anda tidak akan puas dengan tampilan polos seperti Gambar 2, mereka biasanya menuntut hiasan lain, seperti di Gambar 3 misalnya (baris ganjil berbeda warna dengan baris genap). Bagian skrip mana yang harus diubah? Tenang, yang perlu Anda lakukan hanyalah merombak sedikit templatenya, list_table.html, menjadi list_table_alt.html seperti terlihat pada Listing 6, yaitu membuat dua buah yang persis sama dengan atribut bgcolor berbeda lalu pisahkan keduanya dengan tag . Sementara untuk skrip PHP-nya persis seperti Listing 5 hanya saja tanda titik sebelum row diganti dengan tanda plus,

$tpl -> Parse("ROW", "+row");

Situs Multilingual

Kalau Anda termasuk orang yang jeli dan suka mencoba-coba, pastilah akan terpikir dalam benak Anda untuk menggunakan sistem template di atas pada situs multilingual. Dengan pemisahan skrip PHP dari layout HTML, maka Anda tidak perlu membuat tampilan berbeda untuk tiap bahasa. Ini menambah satu lagi alasan mengapa kita membutuhkan sistem template.

Penutup

Contoh-contoh pada artikel ini tentu hanya kasus sederhana yang sengaja saya pilih untuk menerangkan prinsip kerja sistem template. Sebab untuk aplikasi sesederhana itu justru amat merepotkan kalau harus menggunakan sistem template, seperti halnya kita harus memanggil tukang kebun dan tukang listrik setiap kali lampu taman putus.

Pesan terakhir dari saya, beritahu seluruh programer di tempat Anda untuk mulai menggunakan sistem template, dan jangan ragu menghubungi saya jika ada masalah. Siapa tahu kita bisa saling berbagi pengalaman seputar penggunaan sistem template ini, khususnya untuk membangun situs-situs berskala besar. Wassalam.

Eris Ristemena, programer PHP di Inarts Multimedia, Bandung. Dapat dihubungi di [email protected].