Añadiendo una variable request en el tipo de menú
Por el momento, el mensaje mostrado es siempre Hello World!. Joomla!2.5 nos ofrece la posibilidad de añadir parámetros a los tipos de menú. En nuestro caso, esto lo hacemos en el archivo site/views/helloworld/tmpl/default.xml:
site/views/helloworld/tmpl/default.xml
<?xml version="1.0" encoding="utf-8"?> <metadata> <layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE"> <message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC</message> </layout> <fields name="request"> <fieldset name="request"> <field name="id" type="list" label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL" description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC" default="1" > <option value="1">Hello World!</option> <option value="2">Good bye World!</option> </field> </fieldset> </fields> </metadata>
Dos cosas importantes a tener en cuenta:
- El grupo de campos request indica campos obligatorios
- el atributo
name
puede pasarse al componente en la URL. En este caso ?option=com_helloworld&id=1 indicaría que has elegido la opción 1.
El modelo tiene que ser modificado para que cambie entre los dos diferentes mensajes (que será elegido por el usuario con el campo definido más arriba):
site/models/helloworld.php
<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import Joomla modelitem library jimport('joomla.application.component.modelitem'); /** * HelloWorld Model */ class HelloWorldModelHelloWorld extends JModelItem { /** * @var string msg */ protected $msg; /** * Get the message * @return string The message to be displayed to the user */ public function getMsg() { if (!isset($this->msg)) { //Uses JInput if magic quotes is turned off. Falls back to use JRequest. if(!get_magic_quotes_gpc()) { $id = JFactory::getApplication()->input->get('id', 1, 'INT' ); } else { $id = JRequest::getInt('id'); } switch ($id) { case 2: $this->msg = 'Good bye World!'; break; default: case 1: $this->msg = 'Hello World!'; break; } } return $this->msg; } }
También modifica tu fichero helloworld.xml para indicar la nueva versión:
helloworld.xml
<?xml version="1.0" encoding="utf-8"?> <extension type="component" version="2.5.0" method="upgrade"> <name>Hello World!</name> <!-- The following elements are optional and free of formatting constraints --> <creationDate>November 2009</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>0.0.5</version> <!-- The description is optional and defaults to the name --> <description>Description of the Hello World component ...</description> <update> <!-- Runs on update; New in 2.5 --> <schemas> <schemapath type="mysql">sql/updates/mysql</schemapath> </schemas> </update> <!-- Site 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 /site/ in the package --> <files folder="site"> <filename>index.html</filename> <filename>helloworld.php</filename> <filename>controller.php</filename> <folder>views</folder> <folder>models</folder> </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"> <!-- Admin Main File Copy Section --> <filename>index.html</filename> <filename>helloworld.php</filename> <!-- SQL files section --> <folder>sql</folder> </files> </administration> </extension>
Puedes probar esta variable request poniendo index.php?option=com_helloworld&id=1 o index.php?option=com_helloworld&id=2 en el campo de direcciones de tu navegador.
Empaquetando el componente
Contenido del directorio:
- helloworld.xml
- site/index.html
- site/helloworld.php
- site/controller.php
- site/views/index.html
- site/views/helloworld/index.html
- site/views/helloworld/view.html.php
- site/views/helloworld/tmpl/index.html
- site/views/helloworld/tmpl/default.xml
- site/views/helloworld/tmpl/default.php
- site/models/index.html
- site/models/helloworld.php
- admin/index.html
- admin/helloworld.php
- admin/sql/index.html
- admin/sql/updates/index.html
- admin/sql/updates/mysql/index.html
- admin/sql/updates/mysql/0.0.1.sql
Create a compressed file of this directory or directly download the archive and install it using the extension manager of Joomla. You can add a menu item of this component using the menu manager in the backend.