A sorozat első részében egy Joomla! 1.5-ös keretrendszerhez készült komponens fejlesztését mutattuk be.
Az első részben az üdvözlés bele volt írva a nézet kódjába. Ez nem követi az MVC szabályait, hiszen a nézet csak az adatok megjelenítésére szolgál, azokat nem tartalmazza. A leírás második részében megmutatjuk, hogyan tehetjük át a nézetből a modellbe.
A modell elnevezés onnan ered, hogy az osztály valamit reprezentál (modellez). A mi esetünkbe, az első modell egy 'hello'-t reprezentál, vagyis egy üdvözlést.
A modell neve a Joomlában úgy áll össze, hogy a komponens nevével kezdődik (a mi esetünkben 'Hello'), majd a 'Model' szó következik és utána a modell neve. Tehát a mi modellünk osztályának a neve: HelloModelHello.
Ennél a pontnál a modellnek egy dolga van, az üdvözlés visszaadása. Éppen ezért egy metódusunk lesz, melyet getGreeting()-nek fogunk elnevezni. Egyszerűen visszaadja a 'Hello, World!' szöveget.
A modell kódja:
<?php/** * Hello Model for Hello World Component * * @package Joomla.Tutorials * @subpackage Components * @link http://docs.joomla.org/Category:Development * @license GNU/GPL */// Check to ensure this file is included in Joomla!defined('_JEXEC') or die();
jimport( 'joomla.application.component.model' );
/** * Hello Model * * @package Joomla.Tutorials * @subpackage Components */class HelloModelHello extends JModel
{ /** * Gets the greeting * * @return string The greeting to be displayed to the user */function getGreeting()
{return 'Hello, World!';
}}Felfedezhetünk egy sort, amely a jimport-tal kezdődik. A jimport funkció arra szolgál, hogy a komponenshez szükséges Joomla! keretrendszer fájljait töltsük be. A fenti kód a /libraries/joomla/application/component/model.php fájlt tölti be. A '.'-ot használjuk könyvtárelválasztónak és az utolsó rész a fájl neve, amelyet be szeretnénk tölteni. Az összes fájl a libraries könyvtárhoz relatívan viszonyítva töltödik be. A model.php fájl tartalmazza a JModel osztálydefinícióját, amely azért szükséges, mert a mi modellünk kibővíti azt.
Most, hogy elkészítettük a modellünket, módosítsuk a nézetet.
A Joomla! keretrendszer úgy lett elkészítve, hogy automatikusan betöltse a modellt amelynek ugyanaz a neve, mint a nézetnek, és átadja az adatokat neki. Mivel a nézetünket 'Hello'-nak hívják, így a 'Hello' modell fog automatikusan betöltődni. Ezért könnyen használhatjuk a JView::getModel() metódust.
Az előző kódunk ezt a sort tartalmazta:
$greeting = "Hello World!";
Hogy kihasználjuk a modell előnyeit, megváltoztatjuk ezt a sort:
$model =& $this->getModel();
$greeting = $model->getGreeting();
A teljes nézet most ezt tartalmazza:
<?php/** * Hello View for Hello World Component * * @package Joomla.Tutorials * @subpackage Components * @link http://docs.joomla.org/Category:Development * @license GNU/GPL */// no direct accessdefined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.view');
/** * HTML View class for the HelloWorld Component * * @package Joomla.Tutorials * @subpackage Components */class HelloViewHello extends JView
{function display($tpl = null)
{$model =& $this->getModel();
$greeting = $model->getGreeting();
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
}}?>Már csak egy dolog maradt hátra, a fájl hozzáadása az XML fájlhoz, hogy a telepítésnél az új modellünk másolásra kerüljön. A Joomla! keretrendszere a models könyvtárban fogja keresni a modellünket, tehát a bejegyzés így fog kinézni:
<filename>models/hello.php</filename>
Az új hello.xml fájl így ezt tartalmazza:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE install SYSTEM "http://www.joomla.org/xml/dtd/1.5/component-install.dtd"><install type="component" version="1.5.0"><name>Hello</name>
<!-- The following elements are optional and free of formatting conttraints --><creationDate>2007 02 22</creationDate>
<author>John Doe</author>
<authorEmail>john.doe@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table --><version>Component Version String</version>
<!-- The description is optional and defaults to the name --><description>Description of the component ...</description>
<!-- Site Main File Copy Section --> <files folder="site"><filename>index.html</filename>
<filename>hello.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
<filename>views/hello/tmpl/index.html</filename>
<filename>views/hello/tmpl/default.php</filename>
<filename>models/index.html</filename>
<filename>models/hello.php</filename>
</files> <administration> <!-- Administration Menu Section --><menu>Hello World!</menu>
<!-- Administration Main File Copy Section --> <!-- Note the folder attribute: This attribute describes the folder to copy FROM in the package to install therefore files copied in this section are copied from /admin/ in the package --> <files folder="admin"><filename>index.html</filename>
<filename>admin.hello.php</filename>
</files> </administration></install>A leírásban szereplő com_hello komponens letöltése.
A cikk forrása: Joomla! Documentation