LinuxParty
Ahora puedes ver en tu componente hello-world un formulario con dos columnas, dos filas y casillas de verificación. Puedes hacer clic en las casillas para seleccionar las opciones que desees (Figura 11).
8- Añadir la gestión de idiomas
Joomla! 2.5 gestiona los idiomas de los componentes en cuatro situaciones diferentes:
- Mostrando un componente en el sitio público
- Gestionando un componente en la administración
- Gestionando los menús en la administración
- Instalando un componente (nuevo en 1.7)
Joomla! 2.5 utiliza dos ubicaciones de carpetas diferentes para los idiomas:
- Una en administrator/language o language
- Una en la carpeta del componente (administrator/components/*componente*/language o components/*componente*/language)
Esto depende de como se instale el componente.
Gestión del idioma en el sitio público
Con el gestor de archivo y editor favorito, coloque un archivo en site/language/es-ES/es-ES.com_helloworld.ini . Este archivo contendrá la traducción para la parte pública. Por el momento, este archivo estará vacío.
Gestión del idioma en el manejo del componente
Con el gestor de archivo y editor favorito, coloque el archivo admin/language/es-ES/es-ES.com_helloworld.ini . Este archivo contendrá la traducción de la administración.
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="El mensaje de bienvenida que se visualizará"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="Mensaje"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="Bienvenida"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="Id"
Gestión del idioma en el manejo de los menús en la administración
Con el gestor de archivos y editor favorito, coloque el archivo admin/language/es-ES/es-ES.com_helloworld.sys.ini . Este archivo contendrá la traducción de la administración.
COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="Esta es la descripción del componente Hello World"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Hello World"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="Esta vista muestra un mensaje seleccionado"
COM_HELLOWORLD_MENU="Hello World!"
Opciones de ubicación para los archivos de los diferentes idiomas
A partir de la versión 1.7 hay dos formas de instalar los archivos de idiomas para una extensión. Se puede utilizar uno u otro o una combinación de ambos.
En la versión 1.5 los archivos se instalan en la carpeta language del núcleo de Joomla! (RAÍZ/administrator/language/ y RAÍZ/language/). Desde la versión 1.6 existe una nueva vía que incluye los archivos de idiomas en la carpeta language de la raíz de la extensión.
Por lo tanto, una extensión puede incluir una carpeta language con un .sys.ini diferente a la instalada en la carpeta language del núcleo de Joomla! (este último no está incluido en la carpeta language del núcleo de Joomla!, ya que en la característica multi-idioma de Joomla! podemos tener idiomas a la espera de que sean instalados). Entonces, con esto tenemos dos formas diferentes de mostrar las descripciones: una el .sys.ini en la carpeta language, que se utiliza para los mensajes que van ha ser mostrados cuando la instalación se haya completado, y otra (desde el .ini) se utiliza para el funcionamiento “normal” del componente, es decir, cuando la extensión es usada en la administración.
Esto puede ser extremadamente útil en la instalación ya que puede existir la necesidad de que las descripciones requieran valores diferentes.
Nota: El archivo .sys.ini también se utiliza para traducir el nombre de las extensiones en algunos gestores en la administración, y para proporcionar a los componentes una traducción al menú.
Por lo tanto, el archivo helloworld.xml incluiría desde la versión 1.6:
<files>
[...]
/*
* Esta carpeta debe incluir las subcarpetas adecuadas, es decir, language/es-ES/ ... language/fr-FR
*/
<folder>language</folder>
<filename>cualquier cosa</filename>
[...]
</files>
Y desde la versión 1.5 (o puede ser que no se incluya):
[...]
<languages folder="carpetaidiomanucleojoomla"> // si se usa otra carpeta de idioma (puede colocar cualquier nombre que se ajuste)
<language tag="es-ES">es-ES/es-ES.cualquiercosa.ini</language> // o
<language tag="es-ES">es-ES.cualquiercosa.ini</language> // si no existe una subcarpeta
<language tag="es-ES">es-ES/en-ES.cualquiercosa.sys.ini</language> // o
<language tag="es-ES">es-ES.cualquiercosa.sys.ini</language> si no existe una subcarpeta
</languages>
[...]
O simplemente en la raíz:
<languages>
<language tag="es-ES">es-ES.cualquiercosa.ini</language>
<language tag="es-ES">es-ES.cualquiercosa.sys.ini</language>
</languages>
Al instalar o actualizar la extensión, el archivo .sys.ini presente en la carpeta language en la raíz de la extensión, mostrará el resultado de la instalación a partir del valor asociado a la descripción del mismo.
A partir de entonces, si está presente, el .sys.ini así como el .ini instalado en la carpeta language del núcleo de Joomla!, tendrá prioridad sobre los archivos presentes en la carpeta language en la raíz de la extensión.
Nota: Una de las ventajas de la instalación de los archivos en la carpeta language en la raíz de la extensión, es que estos no se tocan cuando se actualiza un paquete de idioma. La otra ventaja es que esta carpeta puede incluir varios idiomas (en-GB, fr-FR, es-ES, etc) que no requieren que el usuario instale el paquete de idioma correspondiente. Esto es útil ya que están disponibles si, más adelante, un usuario instala el paquete correspondiente.
Añadir traducción al instalar el componente
Vea: Opciones de ubicación para los archivos de los diferentes idiomas
Con tu gestor de archivos y editor favorito, crea un archivo en RaízExtensión/language/es-ES/es-ES.miextension.sys.ini . Este archivo contendrá la traducción para la instalación.
COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="Esta es la descripción del componente Hello World"
El COM_HELLOWORLD_DESCRIPTION se puede utilizar en el archivo helloworld.xml.
Entonces, debido a las modificaciones antes expuestas, nuestro archivo helloworld.xml se actualiza de la siguiente forma:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="2.5.0" method="upgrade">
<name>COM_HELLOWORLD</name>
<creationDate>Octubre 2012</creationDate>
<author>Carlos R & Andoitz B</author>
<authorEmail>email</authorEmail>
<authorUrl>http://www.ejemplo.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>Licensia Info</license>
<version>0.0.8</version>
<description>COM_HELLOWORLD_DESCRIPTION</description>
<install>
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall>
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update>
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
<folder>models</folder>
<folder>language</folder> // Carpeta para los idiomas en la interfaz de usuario
</files>
<administration>
<menu>COM_HELLOWORLD_MENU</menu>
<files folder="admin">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>sql</folder>
<folder>tables</folder>
<folder>models</folder>
<folder>views</folder>
</files>
/*
* Carpetas y archivos para el idioma en la administración
*/
<languages folder="admin">
<language tag="es-ES">language/es-ES/es-ES.com_helloworld.ini</language>
<language tag="es-ES">language/es-ES/es-ES.com_helloworld.sys.ini</language>
</languages>
</administration>
</extension>
En este archivo helloworld.xml, los idiomas están instalados en:
- administrator/language para la parte de administración (ver la etiqueta de idiomas xml)
- components/com_helloworld/language para la parte de la interfaz de usuario (No existe ninguna etiqueta de idiomas xml, pero la carpeta del idioma está incluida)
Ahora para probar lo modificado ya sabes que hacer.
9- Añadir acciones a la administración
Añadir una barra de herramientas
En Joomla!, el administrador normalmente interactúa con los componentes a través de la barra de herramientas. Añade este contenido en el archivo admin/views/helloworlds/view.html.php. Esto creará una barra de herramientas básica y un título para el componente:
<?php
// No permitir acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
// Importar librería de vistas de Joomla
jimport('joomla.application.component.view');
/**
* Vistas HelloWorlds
*/
class HelloWorldViewHelloWorlds extends JView
{
/**
* método de presentación de la vista HelloWorlds
* @return void
*/
function display($tpl = null)
{
// Obtener datos del modelo
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// Comprobación de errores
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
// Asignar datos a la vista
$this->items = $items;
$this->pagination = $pagination;
// Establecer la barra de herramientas
$this->addToolBar();
// Mostrar la plantilla
parent::display($tpl);
}
/**
* Configurar la barra de herramientas
*/
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS'));
JToolBarHelper::deleteList('', 'helloworlds.delete');
JToolBarHelper::editList('helloworld.edit');
JToolBarHelper::addNew('helloworld.add');
}
}
Puedes encontrar otras acciones básicas de Administración en el archivo administrator/includes/toolbar.php de tu instalación de Joomla!.
Ya que la vista puede realizar algunas acciones, tenemos que añadir algunos datos de entrada. Con tu gestor y editor de archivos favorito, añade lo siguiente en el archivo admin/views/helloworlds/tmpl/default.php :
<?php
// No permitir acceso directo al archivo
defined('_JEXEC') or die('Restricted Access');
// cargar tooltip
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld'); ?>" method="post" name="adminForm" id="adminForm">
<table class="adminlist">
<thead><?php echo $this->loadTemplate('head');?></thead>
<tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
<tbody><?php echo $this->loadTemplate('body');?></tbody>
</table>
<div>
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Añadir controladores específicos
Hay que incluir tres acciones:
- helloworlds.delete
- helloworld.edit
- helloworld.add
Aquí puedes leer más sobre subcontroladores (en Inglés).
Estas son tareas compuestas (controller.task), así que hay que codificar dos nuevos controladores: HelloWorldControllerHelloWorlds y HelloWorldControllerHelloWorld .
admin/controllers/helloworlds.php
<?php
// No permitir acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
// importar librería de controladores de Joomla!
jimport('joomla.application.component.controlleradmin');
/**
*Controlador HelloWorlds
*/
class HelloWorldControllerHelloWorlds extends JControllerAdmin
{
/**
* Proxy para getModel.
* @desde 2.5
*/
public function getModel($name = 'HelloWorld', $prefix = 'HelloWorldModel')
{
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
}
admin/controllers/helloworld.php
<?php
// No permitir acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
// Importar librería de controladores de formulario de Joomla
jimport('joomla.application.component.controllerform');
/**
*Controlador HelloWorld
*/
class HelloWorldControllerHelloWorld extends JControllerForm
{
}
Añadir y editar la vista
Esta vista mostrará datos utilizando un diseño.
Crea el archivo admin/views/helloworld/tmpl/edit.php que contenga:
<?php
// No permitir acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="helloworld-form">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset() as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Añadir un modelo y modificar el existente
La vista HelloWorldViewHelloWorld pide el formulario y los datos a través de un modelo. Este modelo tiene que proporcionar un método getTable, un método getForm y un método loadData (llamados desde el controlador JModelAdmin)
admin/models/helloworld.php
<?php
// No permitir acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
// importar librería modelform de Joomla
jimport('joomla.application.component.modeladmin');
/**
*Modelo HelloWorld
*/
class HelloWorldModelHelloWorld extends JModelAdmin
{
/**
* Devuelve una referencia al objeto Table, siempre creándolo.
*
* @param type Tipo de tabla a instanciar
* @paramstring Prefijo para el nombre de clase de tabla. Opcional.
* @paramarray Array de configuración para el modelo. Opcional.
* @return JTable Objeto de base de datos
* @since 2.5
*/
public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Método para conseguir el formulario.
*
* @paramarray $data Datos para el formulario.
* @paramboolean $loadData Verdadero si el formulario va a cargar sus propios datos (por defecto), falso si no.
* @return mixed Un objeto JForm object si funciona, false si falla
* @since 2.5
*/
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_helloworld.helloworld', 'helloworld',
array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
{
return false;
}
return $form;
}
/**
* Método para obtener datos que deberían ser inyectados al formulario.
*
* @return mixed Datos para el formulario.
* @since 2.5
*/
protected function loadFormData()
{
// Comprueba la sesión para comprobar datos introducidos previamente.
$data = JFactory::getApplication()->getUserState('com_helloworld.edit.helloworld.data', array());
if (empty($data))
{
$data = $this->getItem();
}
return $data;
}
}
Este modelo hereda de la clase JModelAdmin y utiliza el método loadForm. Busca formularios en la carpeta forms. Con tu gestor y editor de archivos favorito, crea un archivo admin/models/forms/helloworld.xml que contenga:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="id"
type="hidden"
/>
<field
name="greeting"
type="text"
label="COM_HELLOWORLD_HELLOWORLD_GREETING_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_GREETING_DESC"
size="40"
class="inputbox"
default=""
/>
</fieldset>
</form>
Modificando el archivo helloworld.xml quedaría:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="2.5.0" method="upgrade">
<name>Hello World!</name>
<creationDate>Octubre 2012</creationDate>
<author>Carlos R & Andoitz B</author>
<authorEmail>email</authorEmail>
<authorUrl>http://www.ejemplo.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>Licencia info</license>
<version>0.0.9</version>
<description>COM_HELLOWORLD_DESCRIPTION</description>
<install> <!-- Se ejecuta al instalar -->
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!-- Se ejecuta al desinstalar -->
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!-- Se ejecuta al actualizar; Nuevo en 2.5 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
<folder>models</folder>
<folder>language</folder>
</files>
<administration>
<menu>COM_HELLOWORLD_MENU</menu>
<files folder="admin">
<!-- Sección principal de Copia de Archivos de Administración -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<!-- Sección de archivos SQL -->
<folder>sql</folder>
<!-- Sección de archivos de tablas -->
<folder>tables</folder>
<!-- Sección de archivos de modelos -->
<folder>models</folder>
<!-- Sección de archivos de vistas -->
<folder>views</folder>
<!-- Sección de archivos de controladores -->
<folder>controllers</folder>
</files>
<languages folder="admin">
<language tag="es-ES">language/es-ES/es-ES.com_helloworld.ini</language>
<language tag="es-ES">language/es-ES/es-ES.com_helloworld.sys.ini</language>
</languages>
</administration>
</extension>
Ahora crea un archivo comprimido de este directorio o descarga directamente el archivo (modificando el código en /admin/models/helloworld.php por el expuesto aquí) e instálalo utilizando el gestor de extensiones de Joomla.
Desarrollo de componentes en Joomla 2.5 (3 de 8) | Desarrollo de componentes en Joomla 2.5 (5 de 8)
-
Programación
- Gracias a la IA, el nuevo lenguaje de programación más popular es...
- Cómo instalar y utilizar Scikit-Learn en Linux
- Thomas E. Kurtz, coinventor de BASIC, muere a los 96 años
- Profesor de informática del MIT prueba el impacto de la IA en la formación de programadores
- Lanzamiento del IDE de código abierto Qt Creator 14 con soporte para complementos basados en Lua
- Plantillas para Joomla - Episodio 1: Plantillas, marcos y clubes o no...
- Este es el mejor libro que he visto para aprender a programar en Python en castellano desde cero, gratis y online
- ¿Deberían los niños seguir aprendiendo a programar en la era de la IA?
- La 'obsolescencia' de VBScript confirmada por Microsoft y su eventual eliminación de Windows
- El Gran Debate: ¿Deberían los Modelos de Inteligencia Artificial Ser de Código Abierto?
- El lenguaje de programación BASIC cumple 60 años
- El CEO de Nvidia dice que los niños no deberían aprender a programar
- 40 años de Turbo Pascal: recuerdos del dinosaurio codificador que revolucionó los IDE
- Los lenguajes de programación más populares y dónde aprenderlos.
- Top 5 de los principales lenguajes de programación para desarrollar aplicaciones de escritorio Linux