J3.x

Membuat Plugin untuk Joomla

From Joomla! Documentation

This page is a translated version of the page J3.x:Creating a Plugin for Joomla and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎Bahasa Indonesia • ‎Nederlands • ‎русский
Joomla! 
3.x
seri

Struktur plugin Joomla! 1.5 sangat fleksibel dan kuat. Plugin tidak hanya digunakan untuk mengendalikan suatu event yang dipicu dari aplikasi inti dan ekstensi tapi juga dapat membuat ekstensi pihak ketiga menjadi lebih luas dan kuat. Perubahan utama dari Joomla! 1.5 ke seri 2.5/3.x adalah nama event.

Panduan ini menjadi dasar pengetahuan bagaimana anda dapat mengembangkan plugin. Kebanyakan plugin terdiri dari satu berkas kode tapi untuk dapat memasangnya dengan baik ia perlu dipaketkan ke dalam suatu berkas instalasi untuk dapat diproses oleh Joomla.

Pembuatan Berkas Pemasangan

Sebagaimana semua ekstensi di dalam Joomla, plugin dapat dengan mudah dipasang sebagai sebuah berkas .zip (.tar.gz juga didukung) tapi suatu berkas berformat XML yang benar haruslah termasuk di dalamnya. Sebagai contoh, berikut berkas pemasangan XML untuk plugin penelusuran kategori.

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="plugin" group="search">
	<name>plg_search_categories</name>
	<author>Joomla! Project</author>
	<creationDate>November 2005</creationDate>
	<copyright>Copyright (C) 2005 - 2013 Open Source Matters. All rights reserved.</copyright>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<authorEmail>admin@joomla.org</authorEmail>
	<authorUrl>www.joomla.org</authorUrl>
	<version>3.1.0</version>
	<description>PLG_SEARCH_CATEGORIES_XML_DESCRIPTION</description>
	<files>
		<filename plugin="categories">categories.php</filename>
		<filename>index.html</filename>
	</files>
	<languages>
		<language tag="en-GB">en-GB.plg_search_categories.ini</language>
		<language tag="en-GB">en-GB.plg_search_categories.sys.ini</language>
	</languages>
	<config>
		<fields name="params">

			<fieldset name="basic">
				<field name="search_limit" type="text"
					default="50"
					description="JFIELD_PLG_SEARCH_SEARCHLIMIT_DESC"
					label="JFIELD_PLG_SEARCH_SEARCHLIMIT_LABEL"
					size="5"
				/>

				<field name="search_content" type="radio"
					default="0"
					description="JFIELD_PLG_SEARCH_ALL_DESC"
					label="JFIELD_PLG_SEARCH_ALL_LABEL"
				>
					<option value="0">JOFF</option>
					<option value="1">JON</option>
				</field>

				<field name="search_archived" type="radio"
					default="0"
					description="JFIELD_PLG_SEARCH_ARCHIVED_DESC"
					label="JFIELD_PLG_SEARCH_ARCHIVED_LABEL"
				>
					<option value="0">JOFF</option>
					<option value="1">JON</option>
				</field>
			</fieldset>

		</fields>
	</config>
</extension>

Seperti anda lihat, caranya sama dengan berkas-berkas pemasangan XML Joomla! yang lainnya. Anda hanya mencari entri group="xxx" di dalam tagar <extension> dan informasi lainnya di dalam tagar <filename>. Informasi-informasi ini memberitahukan kepada Joomla! ke folder mana salinan berkas itu harus diarahkan dan ke kelompok plugin mana ia harus ditambahkan.

Jika anda membuat sebuah plugin yang merespon ke events inti yang sudah ada, atribut group="xxx" haruslah diganti untuk mencerminkan nama dari folder plugin yang ada untuk jenis events yang ingin anda perbanyak. Contoh: group="authentication" atau group="user". Lihat Plugin/Events untuk daftar lengkap kategori events inti yang ada. Dalam pembuatan sebuah plugin baru, untuk merespon events inti, adalah penting anda memberikan nama yang unik untuk plugin anda dan tidak bertabrakan dengan plugin-plugin lainnya yang juga merespon ke events inti yang ingin anda layani.

Jika anda membuat sebuah plugin untuk merespon ke events bukan-inti, pilihan anda untuk tagar group="xxx" haruslah berbeda dari kategori-kategori inti yang ada lainnya.

Tips: Jika anda menambahkan atribut method="upgrade" ke tagar extension, maka plugin ini dapat dipasang tanpa melepaskan versi yang sebelumnya. Semua berkas yang ada akan ditimpa, namun berkas yang lama tidak akan dihapus.

Pembuatan Plugin

Cara menulis plugin yang berorientasi-objek melibatkan penulisan sub-kelas JPlugin, sebuah kelas dasar yang menerapkan dasar properti dari plugin tersebut. Dalam metode anda, properti berikut tersedia:

  • $this->params: Parameters plugin oleh administrator
  • $this->_name: nama plugin
  • $this->_type: Kelompok (jenis) plugin
  • $this->db: Objek db (sejak Joomla 3.1)
  • $this->app: Objek aplikasi (sejak Joomla 3.1)

Tip Untuk dapat menggunakan $this->db dan $this->app, JPlugin akan menguji apakah propertinya ada atau tidak, dan bukan privat. Jika ingin menggunakan objek standar, buat properti non-inisiasi di kelas plguin (misalnya, protected $db; protected $app; di area yang sama dengan protected $autoloadLanguage = true;). Properti akan disembunyikan kecuali dibuat secara eksplisit.

Contoh kode berikut, <PluginGroup> merupakan kelompok (jenis) plugin, sementara <PluginName> adalah namanya. Mohon dicatat bahwa, huruf untuk nama kelas dan fungsi di PHP haruslah akurat.

<?php
// no direct access
defined( '_JEXEC' ) or die;

class plg<PluginGroup><PluginName> extends JPlugin
{
	/**
	 * Load the language file on instantiation. Note this is only available in Joomla 3.1 and higher.
	 * If you want to support 3.0 series you must override the constructor
	 *
	 * @var    boolean
	 * @since  3.1
	 */
	protected $autoloadLanguage = true;

	/**
	 * Plugin method with the same name as the event will be called automatically.
	 */
	 function <EventName>()
	 {
		/*
		 * Plugin code goes here.
		 * You can access database and application objects and parameters via $this->db,
		 * $this->app and $this->params respectively
		 */
		return true;
	}
}
?>

Menggunakan Plugin di dalam Kode Anda

Sekarang anda telah membuat plugin, dan anda akan memanggilnya di dalam kode anda. Anda mungkin tidak akan: inti Joomla memiliki sejumlah events bawaan dimana anda ingin plugin anda didaftarkan. Untuk itu, anda tidak perlu melakukan hal berikut.

Jika anda ingin memicu sebuah event maka gunakan kode seperti ini:

$dispatcher = JDispatcher::getInstance();
$results = $dispatcher->trigger( '<EventName>', <ParameterArray> );

Penting dicatat bahwa parameternya haruslah sebuah array. Fungsi plugin itu sendiri akan mendapatkan parameter sebagai sebuah nilai tunggal. Nilai kembaliannya akan terdiri dari sebuah array dari pengembalian nilai yang berasal dari berbagai macam plugin yang berbeda (jadi ia juga dapat mengandung array yang memiliki banyak tingkatan).

Apabila anda membuat sebuah plugin untuk sebuah event bukan-inti yang baru, ingatlah untuk mengaktifkan plugin anda setelah anda memasangnya. Dahulukan referensi ke plugin baru anda dengan perintah JPluginHelper::importPlugin().