Mengembangkan Component Joomla Oleh : Garry B.
# Prologue Joomla terkenal sebagai salah satu platform Content Management System (CMS) untuk mempublikasi ke World Wide Web ataupun dalam intranet. Tetapi selain terkenal sebagai CMS, sebenarnya dia juga terkenal sebagai framework Modelview-controller (MVC) Web Application Development. Diktat ini akan meringkas mengenai pembuatan Component untuk Joomla dengan menggunakan JoomlaFramework. Versi yang dipakai sekarang adalah Joomla! 1.5. Tetapi seharusnya juga masih tetap sama strukturnya di versi 1.6 (tapi entahlah, saya belum mencobanya di versi itu)
# Sekilas Mengenai MVC MVC sudah lazim bagi para pengembang web, entah orang yang mengerti maupun yang kagak ngerti, semua selalu mengelu-elukan struktur MVC ini. Saya sebenarnya tidak berani mengatakan pemahaman MVC saya sudah sempurna. Oleh karenanya saya akan meringkas/menerjemah dari website doc.joomla.org. • •
•
MVC merupakan pola perancangan software yang digunakan untuk mengorganisir code sedemikian rupa sehingga business logic dan data presentation dipisahkan. Alasan pendekatan ini dikarenakan jika business logic dikelompokkan menjadi satu bagian, maka tampilan(interface) dan interaksi user yang bergantung pada data dapat direvisi ataupun diubah tanpa harus memprogram ulang business logic-nya. MVC aslinya dikembangkan untuk memetakan fungsi tradisional input, output dan proses pada arsitektur GUI logikal.
Berikut ini merupakan tiga utama dari Joomla MVC(oleh karenanya mungkin akan berbeda dengan MVC framework lain). Model • Model merupakan bagian dari komponen yang berhubungan dengan data. • Model biasanya berupa class yang berfungsi mengambil, menambah, mengubah dan menghapus informasi dalam database. • Model lah yang biasanya berhubungan dengan data. Makanya kalau misalnya sistem kita berganti dari sistem penyimpanan berbasis file ke penyimpanan berbasis database, kita hanya perlu mengganti coding model, tanpa perlu ubah controller ataupun view. View • View merupakan bagian dari komponen yang berfungsi me-render data dari model sehingga sesuai untuk interaksi. • Untuk aplikasi berbasis web, umumnya view akan berupa halaman HTML. • View yang akan menarik data dari model (sebetulnya ditarik di Controller
•
kemudian dilempar ke View) dan memberikan data ke template (template yang akan ditampilkan ke user) View tidak pernah mengubah data, hanya menampilkan data yang diambil dari model.
Controller • Controller bertanggung jawab atas kegiatan user. Khusus di aplikasi web maka berupa page request (misalnya $_POST ataupun $_GET). • Controller menentukan request apa yang diminta user dan meresponnya dengan memicu model untuk mengubah data dan mengirim model ke view supaya view mampu menampilkan data. Dalam Joomla untuk mengimplementasikan MVC kita menggunakan 3 kelas : JModel, JView dan JController Gambar samping merupakan bentuk sederhana component dal am Joomla Selain terdapat Model, View dan Controller juga terdapat yang dikenal dengan Entry Point (bulatan kecil) serta Template.
# Mulai Membuat Component Kita akan membuat sebuah component bernama datadiri. Component ini untuk menampilkan biodata orang yang tersimpan dalam database. Berikut ini merupakan file yang harus dibuat: • com_datadiri/datadiri.php – Inilah entry point untuk menuju component •
com_datadiri/controller.php – ini merupakan file dasar controller.
•
com_datadiri/views/biodatas/view.html.php – File ini menarik data yang dianggap penting kemudian melemparnya ke template.
•
com_datadiri/views/biodatas/tmpl/default.php – Inilah file template yang merupakan output.
•
datadiri.xml – XML ini yang menentukan bagaimana Joomla menginstall component kita.
Yang harus diketahui: Nama entry point harus sama dengan nama component. Underscore memiliki makna khusus dalam Joomla, sehingga hindari
penggunaan underscore dalam nama.
# Membuat Entry Point Joomla selalu akses melalui entry point : index.php untuk site biasa dan administrator/site.php untuk halaman administrator. Aplikasi akan me-load component yang diperlukan sesuai dengan nilai dari 'option' dalam URL ataupun dalam data POST. Untuk URL akan berupa seperti : index.php?option=com_datadiri. Contoh isi file com_datadiri/datadiri.php : execute(JRequest::getVar('task')); //jalankan controller. Kalau $task nilainya NULL maka otomatis jalankan yang di $__default ?> Baris awal , “defined ('_JEXEC') or ...” merupakan statement untuk pengecekan keamanan. JPATH_COMPONENT merupakan path absolut ke component sekarang, dalam kasus ini components/com_datadiri. DS merupakan directory separator yang merupakan '/' kalau tidak '\'. Ini otomatis sesuai server OS. JRequest::getVar() untuk mengambil data baik dari $_POST[] maupun dari $_GET[]. Misalnya URL nya index.php?task=insert, maka kita dapat menulis JRequest::getVar('task') untuk mendapatkan nilai task. Base controller terletak pada com_datadiri/controller.php. Jika misalnya suatu saat perlu controller tambahan, maka buat controller tambahan seperti 'DatadiriControllerxxx' di com_datadiri/controllers/xxx.php. Standar penamaan controller tambahan : {Nama Component}{Controller}{Nama Controller}
# Pembuatan Model
Biasanya kita mulai desain dari Model.JModel{ class DatadiriModelBiodatas extends Berikut contoh coding (com_datadiri/models/biodatas.php) function getBiodata(){ $db = & JFactory::getDBO(); $query = "SELECT nama, nilai FROM jos_datadiri"; $db->setQuery($query); $hasil = $db->loadRowList(); return $hasil; } } ?>
jimport merupakan fungsi yang tujuannya sama dengan include php tetapi dengan beberapa kelebihan. Misalnya kita perlu include file joomla/application/component/model.php, maka kita dapat menulisnya dengan jimport(joomla.application.component.model) dimana tanda '/' diganti dengan tanda titik (.) dan pada bagian belakan .php tidak perlu ditulis. Sistem penamaan Model : {Nama Component}{Model}{Nama Model} Jika kita ingin mengakses database maka kita harus menulis $db = & JFactory::getDBO(); Kita menggunakan tanda & supaya hanya me-reference. Karena jika kita tidak menggunakannya maka dia akan memindahkan seluruh data ke dalam variabel, dan itu sangat memakan waktu. Untuk melakukan query Select kita menggunakan $db->setQuery() Untuk melakukan query Insert, Update ataupun Delete maka kita harus menggunakan $db->Execute() Untuk mengambil hasil query terdapat berbagai cara yakni $db>loadResult(), $db->loadRowList() dan lain-lain. $db->loadRowList() untuk mengambil semua baris hasil query.
# Pembuatan View Berikut contoh coding (com_datadiri/views/biodatas/view.html.php) : getModel(); $biodatas = $model->getBiodata(); $this->assignRef('biodatas', $biodatas); //panggil fungsi display()-nya JView parent :: display($tpl); } } ?>
Fungsi default dari View adalah display() Di bagian $model = & $this->getModel(); mungkin agak membingungkan mengapa kita hanya tulis getModel tanpa menyebutkan model apa yang ingin kita ambil(normalnya model bisa lebih dari satu). Itu karena nantinya di class Controller nanti kita akan setModel() untuk kelas View, jadi disini kita tinggal getModel(). Perhatikan class Controller untuk lebih jelasnya. $this->assignRef() adalah fungsi untuk melemparkan nilai variabel ke template. Misalnya kita menulis $this->assignRef('biodatas',$biodatas) maka untuk mengaksesnya di template nantinya kita cukup tulis $this>biodatas
# Membuat Template Template/layout Joomla merupakan file PHP biasa yang digunakan untuk menampilkan data dari View. Variabel yang diset JView::assignRef dapat diakses dengan menggunakan $this->{namaproperty}. Berikut contoh coding : <strong> List of Biodatas defined ('_JEXEC') or die('restricted accessed'); biodatas as $row){ echo class DatadiriController extends JController{ "
".'<strong>'.$row[0].''.'=>'.$row[1].""; function display(){ } //mendapatkan view ?> $view = &$this->getView('biodatas', 'html'); //mendapatkan model # Membuat Controller
$model = &$this->getModel('biodatas'); Berikut contoh coding (com_datadiri/controller.php) : //cek error if(!JError::isError($model)) { //setModel untuk $view supaya ntar di view.html.php bisa akses //model. kan didalam class datadiriviewbiodatas ada getModel $view->setModel($model, true); } //set the template and display $view->setLayout('default'); $view->display(); } } ?>
Constructor JController pasti selalu akan mendaftarkan fungsi display() sebagai default kecuali kita menspesifikasikan fungsi lain dengan menggunakan method registerDefaultTask(). Controller yang melakukan load class View dan class Model. Untuk meload View, menggunakan $this->getView({nama_view},'html'} Untuk meload Model, menggunakan $this->getModel({nama_module}} $view->setLayout() merupakan fungsi menentukan Layout, yakni bagaimana View menampilkan data-nya. Untuk menampilkan View yang sudah kita buat, kita harus menulis $view>display()
# Prologue Yang dipaparkan dalam diktat masih hanya konsep dasar MVC dengan menggunakan Joomla dan diterapkan pada Site(halaman front-end, yang dilihat pengunjung). Kalau misalnya ingin menggunakannya pada Administrator (halaman back-end, bagian admin) sebetulnya sama saja, dengan catatan folder component-nya diletakkan dalam folder administrator