--=REKLAMA=--

Tworzenie dodatków - omówienie

Z Joomla!WikiPL

Joomla! 1.5 wprowadziła klasę JPlugin. Celem stworzenia z Joomla! bardziej wydajnego, zorientowanego obiektowo środowiska przygotowano nowy system tworzenia dodatków uwzględniający wzorzec projektowy Obserwator. Dodatki to klasy typu Obserwator powiązane w jądrze Joomla! z obiektem odpowiedzialnym za globalne wyzwalanie zdarzeń. Co to "po ludzku" znaczy? Znaczy to tyle, że albo jądro Joomla! albo niezależny komponent lub moduł mogą uruchomić wykonanie kodu przez jeden lub kilka dodatków.

Wdrożenie rozwiązania

Wdrożenie systemu dodatków to wdrożenie wzorca projektowego Obserwator. Składa się on z dwóch części, klasy obserwatora JPlugin, oraz klasy obserwowanej JEventDispatcher.

/**
 * JPlugin Class
 *
 * @package     Joomla.Platform
 * @subpackage  Plugin
 * @since       11.1
 */
class JPlugin extends JEvent
{
	/**
	 * Constructor
	 *
	 * @param   object  &$subject  The object to observe
	 * @param   array   $config    An optional associative array of configuration settings.
	 *                             Recognized key values include 'name', 'group', 'params', 'language'
	 *                             (this list is not meant to be comprehensive).
	 *
	 * @since   11.1
	 */
	public function __construct(&$subject, $config = array())
	{
		// Get the parameters.
		if (isset($config['params']))
		{
			if ($config['params'] instanceof JRegistry)
			{
				$this->params = $config['params'];
			}
			else
			{
				$this->params = new JRegistry;
				$this->params->loadString($config['params']);
			}
		}
 
		// Get the plugin name.
		if (isset($config['name']))
		{
			$this->_name = $config['name'];
		}
 
		// Get the plugin type.
		if (isset($config['type']))
		{
			$this->_type = $config['type'];
		}
 
		// Load the language files if needed. Note whilst this method is in the
		// JPlugin class it has been left out of the docs for code clarity.
		if ($this->autoloadLanguage)
		{
			$this->loadLanguage();
		}
 
		parent::__construct($subject);
	}
}

Dwie ważne rzeczy składają się na to że klasa działa.

Jedną jest konstruktor, który zostaje wywołany przez klasę nadrzędną (rodzica) klasy JEvent.
Poniżej ilustracja działania konstruktora:

// Register the observer ($this) so we can be notified
$subject->attach($this);
 
// Set the subject to observe
$this->_subject = &$subject;

Prowadzi to do dołącznia klasy JPlugin do obserwowanego obiektu. W przypadku wtyczek obserwują one obiekt JEventDispatcher.

Druga ważna rzecz, którą należy odnotować, to metoda update w klasie JEvent. Metoda update otrzymuje tablicę od obiektu wywołującego. Tablica zawiera dwa elementy: rodzaj zdarzenia i argumenty. W chwili otrzymania tablicy metoda update odczytuje rodzaj zdarzenia i oddziela go od argumentów. Następnie wywołuje metodę o nazwie event (przekazując tablicę z argumentami) i zwraca odpowiedź tej metody.

Zastosowania w aplikacjach niezależnych

<?php
/**
 * @version $Id: $
 * @package 
 * @subpackage 
 * @copyright 
 * @license 
 */
 
jimport('joomla.plugin');
 
 
/**
 * Example Plugin
 *
 * @author 
 * @package 
 * @subpackage 
 * @since 
 */
class ExamplePlugin extends JPlugin
{
	/**
	 * This method handles the onIncrement fictional event.  It takes an integer input and 
	 * increments its value.
	 *
	 * @param  integer  $input An integer to increment
	 *
	 * @return integer  Incremented integer
	 *
	 * @since 3.x
	 * @access public
	 */
	function onIncrement($input)
	{	
		return $input++;
	}
}
?>

Jak widać stworzenie klasy JPlugin jest dość proste. Jest to tak proste jak utworzenie klasy dziedziczącej po klasie JPlugin i utworzenie metody dla każdego zdarzenia przetwarzanego przez dodatek.

© Ten materiał jest dokładnym albo swobodnym tłumaczeniem artykułu http://docs.joomla.org/Component_Program_Flow udostępnionego na licencji JEDL na witrynie: Oficjalnej dokumentacji Joomla!.Pierwszy autor oryginału: Masterchief.
© Tłumaczenie: Skipper. Tłumaczenie wykonano na warunkach licencji JEDL.