Helló, világ! komponens készítése 2. rész

A JoomlaWiki wikiből

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 elkészítése

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:

  1. <?php
  2. /**
  3.  * Hello Model for Hello World Component
  4.  * 
  5.  * @package    Joomla.Tutorials
  6.  * @subpackage Components
  7.  * @link       http://docs.joomla.org/Category:Development
  8.  * @license    GNU/GPL
  9.  */
  10.  
  11. // Check to ensure this file is included in Joomla!
  12. defined('_JEXEC') or die();
  13.  
  14. jimport( 'joomla.application.component.model' );
  15.  
  16. /**
  17.  * Hello Model
  18.  *
  19.  * @package    Joomla.Tutorials
  20.  * @subpackage Components
  21.  */
  22. class HelloModelHello extends JModel
  23. {
  24.     /**
  25.     * Gets the greeting
  26.     * 
  27.     * @return string The greeting to be displayed to the user
  28.     */
  29.     function getGreeting()
  30.     {
  31.         return 'Hello, World!';
  32.     }
  33. }

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 modell használata

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:

  1. $greeting = "Hello World!";

Hogy kihasználjuk a modell előnyeit, megváltoztatjuk ezt a sort:

  1. $model =& $this->getModel();
  2. $greeting = $model->getGreeting();

A teljes nézet most ezt tartalmazza:

  1. <?php
  2.  
  3. /**
  4.  * Hello View for Hello World Component
  5.  * 
  6.  * @package    Joomla.Tutorials
  7.  * @subpackage Components
  8.  * @link       http://docs.joomla.org/Category:Development
  9.  * @license    GNU/GPL
  10.  */
  11.  
  12. // no direct access
  13.  
  14. defined( '_JEXEC' ) or die( 'Restricted access' );
  15.  
  16. jimport( 'joomla.application.component.view');
  17.  
  18. /**
  19.  * HTML View class for the HelloWorld Component
  20.  *
  21.  * @package    Joomla.Tutorials
  22.  * @subpackage Components
  23.  */
  24.  
  25. class HelloViewHello extends JView
  26. {
  27.     function display($tpl = null)
  28.     {
  29.         $model =& $this->getModel();
  30.         $greeting = $model->getGreeting();
  31.         $this->assignRef( 'greeting',        $greeting );
  32.  
  33.         parent::display($tpl);
  34.     }
  35. }
  36. ?>

A fájl hozzáadása a csomaghoz

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:

  1. <filename>models/hello.php</filename>

Az új hello.xml fájl így ezt tartalmazza:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE install SYSTEM "http://www.joomla.org/xml/dtd/1.5/component-install.dtd">
  3. <install type="component" version="1.5.0">
  4.     <name>Hello</name>
  5.     <!-- The following elements are optional and free of formatting conttraints -->
  6.     <creationDate>2007 02 22</creationDate>
  7.     <author>John Doe</author>
  8.     <authorEmail>john.doe@example.org</authorEmail>
  9.     <authorUrl>http://www.example.org</authorUrl>
  10.     <copyright>Copyright Info</copyright>
  11.     <license>License Info</license>
  12.     <!--  The version string is recorded in the components table -->
  13.     <version>Component Version String</version>
  14.     <!-- The description is optional and defaults to the name -->
  15.     <description>Description of the component ...</description>
  16.  
  17.     <!-- Site Main File Copy Section -->
  18.     <files folder="site">
  19.         <filename>index.html</filename>
  20.         <filename>hello.php</filename>
  21.         <filename>controller.php</filename>
  22.         <filename>views/index.html</filename>
  23.         <filename>views/hello/index.html</filename>
  24.         <filename>views/hello/view.html.php</filename>
  25.         <filename>views/hello/tmpl/index.html</filename>
  26.         <filename>views/hello/tmpl/default.php</filename>
  27.         <filename>models/index.html</filename>
  28.         <filename>models/hello.php</filename>
  29.     </files>
  30.  
  31.     <administration>
  32.         <!-- Administration Menu Section -->
  33.         <menu>Hello World!</menu>
  34.  
  35.         <!-- Administration Main File Copy Section -->
  36.         <!-- Note the folder attribute: This attribute describes the folder
  37.             to copy FROM in the package to install therefore files copied
  38.             in this section are copied from /admin/ in the package -->
  39.         <files folder="admin">
  40.             <filename>index.html</filename>
  41.             <filename>admin.hello.php</filename>
  42.         </files>        
  43.     </administration>
  44. </install>

A leírásban szereplő com_hello komponens letöltése.

A cikk forrása: Joomla! Documentation