You are on page 1of 6

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 Model-
view-controller (MVC) Web Application Development. Diktat ini akan meringkas
mengenai pembuatan Component untuk Joomla dengan menggunakan Joomla-
Framework. 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 :
<?php
defined ('_JEXEC') or die('Restricted accessed');
require_once (JPATH_COMPONENT.DS.'controller.php');
$controller = new DatadiriController(); //buat objek dari
DatadiriController
$controller->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}
<?php
defined ('_JEXEC') or die ('Restricted accessed');
jimport('joomla.application.component.model');
# Pembuatan Model
 Biasanya kita mulai desain dari
class DatadiriModelBiodatas Model.JModel{
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) :
<?php
defined ('_JEXEC') or die ('Restricted Accessed');
jimport ('joomla.application.component.view');

class DatadiriViewBiodatas extends JView{


//cari di alamat template script yg tersimpan $tpl.
//kalo $tpl kosong otomatis cari alamat default
function display($tpl=null){
$model = & $this->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 :
<?php
defined ('_JEXEC') or die ('Restricted Accessed');
?>

<strong> List of Biodatas </strong>


<?php
<ol>defined ('_JEXEC') or die('restricted accessed');
<?phpjimport('joomla.application.component.controller');
foreach($this->biodatas as $row){
echo
class DatadiriController extends JController{
"<li>".'<strong>'.$row[0].'</strong>'.'=>'.$row[1]."</li>";
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

You might also like