LinuxParty
Configuración de los valores de los permisos en la tabla assets
Con el fin de almacenar los permisos para cada mensaje en la tabla assets , tenemos que instruir a la clase table asociada con el modelo para salvar esos permisos en la tabla assets.
JTable no sólo proporciona una interfaz para el almacenamiento de los datos de los registros propios en la tabla del elemento, sino que también almacena los permisos para ese registro en la tabla assets. Por ello hay que añadir información al método bind() acerca de los valores de los permisos. También tenemos que proporcionar el nombre del assets, el título y el id del assets padre, vía helloworld JTable.
Por lo tanto, tenemos que sustituir 3 métodos:
- _getAssetName(): un nombre único para este assets, el cual puede ser recuperado
- _getAssetTitle(): una forma más humana de identificar el assets (no es necesario que sea único)
- _getAssetParentId(): el asset_id padre en la tabla asset (del cual los permisos son heredados)
admin/tables/helloworld.php
<?php
// No permitir el acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
// Importar biblioteca table de Joomla
jimport('joomla.database.table');
/**
* Clase Hello Table
*/
class HelloWorldTableHelloWorld extends JTable
{
/**
* Constructor
*
* @paramobject Ibjeto conector de Base de Datos
*/
function __construct(&$db)
{
parent::__construct('#__helloworld', 'id', $db);
}
/**
* Sobreescribiendo la función bind
*
* @paramarray nombre del array
* @return null|string null si la operación fue satisfactoria, de otra forma retorna un error
* @see JTable:bind
* @since 1.5
*/
public function bind($array, $ignore = '')
{
if (isset($array['params']) && is_array($array['params']))
{
// Convertir los parametros field en string.
$parameter = new JRegistry;
$parameter->loadArray($array['params']);
$array['params'] = (string)$parameter;
}
// Bind the rules.
if (isset($array['rules']) && is_array($array['rules']))
{
$rules = new JAccessRules($array['rules']);
$this->setRules($rules);
}
return parent::bind($array, $ignore);
}
/**
* Reemplazando función de carga
*
* @paramint $pk llave primaria
* @paramboolean $reset restablecer los datos
* @return boolean
* @see JTable:load
*/
public function load($pk = null, $reset = true)
{
if (parent::load($pk, $reset))
{
// Convirtiendo los parametros field en registry.
$params = new JRegistry;
$params->loadJSON($this->params);
$this->params = $params;
return true;
}
else
{
return false;
}
}
/**
* Método para calcular el nombre por defecto del asset
* El nombre por defecto es en la forma `table_name.id`
* donde el id es el valor de la clave principal de la tabla
*
* @return string
* @since 2.5
*/ protected function _getAssetName()
{
$k = $this->_tbl_key;
return 'com_helloworld.message.'.(int) $this->$k;
}
/**
* Método para devolver el título a utilizar para la tabla asset.
*
* @return string
* @since 2.5
*/
protected function _getAssetTitle()
{
return $this->greeting;
}
/**
* Método para obtener el id del asset padre del elemento
*
* @return int
*/
protected function _getAssetParentId()
{
// Vamos a obtener el asset padre de la tabla Asset
$assetParent = JTable::getInstance('Asset');
// Por defecto: si no se encuentran aseet padre tomamos el asset global
$assetParentId = $assetParent->getRootId();
// Encuentre el asset padre
if (($this->catid)&& !empty($this->catid))
{
// El elemento tiene una categoría como asset padre
$assetParent->loadByName('com_helloworld.category.' . (int) $this->catid);
}
else
{
// El elemento tiene un componente como asset padre
$assetParent->loadByName('com_helloworld');
}
// Retornar el id del asset padre encontrado
if ($assetParent->id)
{
$assetParentId=$assetParent->id;
}
return $assetParentId;
}
}
Este código de _getAssetParentId() anterior usa JTableAsset para recuperar el asset_id del asset padre. Esto es diferente del código en la versión actual de com_content, donde se recupera el asset_id de la categoría de la tabla de la base de datos # __categories. Esa es otra posibilidad; ya saben que existen muchos caminos que conducen a Roma. En com_content sin embargo, si un artículo no pertenece a una categoría, entonces el asset_id del asset global es retornado. Eso no sería, por supuesto, estar en lo correcto, pero se solucionado poniendo una categoría por defecto “uncategorised”, por lo que un artículo siempre va a pertenecer a una categoría. Es por eso que no se puede simplemente copiar el código de _getAssetParentId() de com_content para nuestro componente.
El código anterior es más general.
Mostrando la configuración de permisos a nivel del elemento
Añadiendo los “rules field” en el archivo admin/models/forms/helloworld.xml :
<fieldset name="accesscontrol">
<field name="asset_id" type="hidden" filter="unset" />
<field name="rules"
type="rules"
label="JFIELD_RULES_LABEL"
translate_label="false"
filter="rules"
validate="rules"
class="inputbox"
component="com_helloworld"
section="message"
/>
</fieldset>
Y mostrando la interfaz de ACL en la parte inferior de su Helloworld en el archivo admin/views/helloworld/tmpl/edit.php :
<?php
// No permitir el acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
$params = $this->form->getFieldsets('params');
?>
<form action="<?php echo JRoute::_('index.php?option=com_helloworld&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="helloworld-form" class="form-validate">
<div class="width-60 fltlft">
<fieldset class="adminform">
<legend><?php echo JText::_( 'COM_HELLOWORLD_HELLOWORLD_DETAILS' ); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset('details') as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</fieldset>
</div>
<div class="width-40 fltrt">
<?php echo JHtml::_('sliders.start', 'helloworld-slider');
foreach ($params as $name => $fieldset):
echo JHtml::_('sliders.panel', JText::_($fieldset->label), $name.'-params');
if (isset($fieldset->description) && trim($fieldset->description)): ?>
<p class="tip"><?php echo $this->escape(JText::_($fieldset->description));?></p>
<?php endif;?>
<fieldset class="panelform" >
<ul class="adminformlist">
<?php foreach ($this->form->getFieldset($name) as $field) : ?>
<li><?php echo $field->label; ?><?php echo $field->input; ?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<?php endforeach; ?>
<?php echo JHtml::_('sliders.end'); ?>
</div>
<!-- Comienzo de la definición de las ACL -->
<div class="clr"></div>
<?php if ($this->canDo->get('core.admin')): ?>
<div class="width-100 fltlft">
<?php echo JHtml::_('sliders.start', 'permissions-sliders-'.$this->item->id, array('useCookie'=>1)); ?>
<?php echo JHtml::_('sliders.panel', JText::_('COM_HELLOWORLD_FIELDSET_RULES'), 'access-rules'); ?>
<fieldset class="panelform">
<?php echo $this->form->getLabel('rules'); ?>
<?php echo $this->form->getInput('rules'); ?>
</fieldset>
<?php echo JHtml::_('sliders.end'); ?>
</div>
<?php endif; ?>
<!-- Final de la definición de las ACL -->
<div>
<input type="hidden" name="task" value="helloworld.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Añadiendo cadenas de idioma
Se utilizó 3 cadenas que tienen que ser añadidas al archivo de idioma de la administración. admin/language/es-ES/es-ES.com_helloworld.ini :
COM_HELLOWORLD_FIELDSET_RULES="Permisos de Mensaje"
COM_HELLOWORLD_ACCESS_DELETE_DESC="¿Está este grupo autorizado a editar este mensaje?"
COM_HELLOWORLD_ACCESS_DELETE_DESC="¿Está este grupo autorizado a eliminar este mensaje?"
Lecturas complementarias
Más información sobre las acciones, assets y ACL se pueden encontrar en las siguientes páginas:
- Información general y uso: Lista de Control de Acceso/1.6-2.5/Tutorial (Inglés)
- La información técnica (en fase de construcción): Técnica ACL en Joomla! (Inglés)
- Cómo implementar acciones en el código (Inglés)
- Añadiendo reglas ACL para tú componente (Inglés)
Clases obsoletas
Por el momento dejamos las referencias obsoletas JError como están. Probablemente aún esté disponible en Joomla! 3.x. No podemos cambiarlas a declaraciones JLog::add() porqué en Joomla! 2.5 los mensajes no se ponen en colas. Otras soluciones, como el uso de $app->enqueueMessage() o directamente tirando PHP-exceptions, son posibles, pero todavía habría numerosas referencias a JError en toda la aplicación. Por ejemplo, en las vistas, comprobamos si hay errores planteados en el modelo con: count($errors = $this->get('Errors')) que utiliza JError del JOBject que fue la base para JModel.
Para obtener la misma funcionalidad sin necesidad de utilizar JError en absoluto, tendríamos que cambiar la forma en que el modelo plantea ahora los errores y las advertencias. Si queremos hacer una aplicación que funcione en Joomla! 2.5 y 3.x podemos seguir utilizando JError. En el momento en que queramos utilizar nuestras extensiones 3.x o también 4.x vamos a tener que cambiar esto (y probablemente mucho más también). Este tutorial está ahora centrado principalmente en Joomla! 2.5. Por lo tanto: notamos el cambio próximo, pero dejarlo ahí por el momento.
Desde Joomla! 2.5.5 las clases bases del modelo MVC, JController, JModel y JView tienen en su poder JControllerLegacy, JModelLegacy and JViewLegacy. Se recomienda el uso de ellas en lugar de las clases originales, para lograr una compatibilidad hacia adelante con las clases heredadas de Joomla! 3.x .
15- Añadiendo un archivo script de Instalación - Desinstalación - Actualización
Crear el script de la extensión
Instalación, actualización y desinstalación de un componente puede requerir operaciones adicionales que no pueden ser alcanzados por las operaciones básicas descritas en el archivo XML principal. Joomla! ofrece un nuevo enfoque para resolver este problema. Consiste en el uso de un archivo script php en la raíz de nuestro directorio que contiene una clase que usa cinco métodos:
- Preflight: que se ejecuta antes de instalar y actualizar
- Instalar
- Actualizar
- Desinstalar
- Postflight: que se ejecuta después de la instalación y actualización
Escribir este script consiste en declarar una clase cuyo nombre es com_NombreComponenteInstallerScript con estos 5 métodos: script.php
<?php
// No permitir el acceso directo al archivo
defined('_JEXEC') or die('Restricted access');
/**
* Archivo Script del componente HelloWorld
*/
class com_helloWorldInstallerScript
{
/**
* Método de instalación del componente
*
* @return void
*/
function install($parent)
{
// $parent es la clase que llama al método
$parent->getParent()->setRedirectURL('index.php?option=com_helloworld');
}
/**
* Método para desinstalar el componente
*
* @return void
*/
function uninstall($parent)
{
// $parent es la clase que llama al método
echo '<p>' . JText::_('COM_HELLOWORLD_UNINSTALL_TEXT') . '</p>';
}
/**
* Método para actualizar el componente
*
* @return void
*/
function update($parent)
{
// $parent es la clase que llama al método
echo '<p>' . JText::sprintf('COM_HELLOWORLD_UPDATE_TEXT', $parent->get('manifest')->version) . '</p>';
}
/**
* Método que se ejecuta antes del método de instalar/actualizar/desinstalar
*
* @return void
*/
function preflight($type, $parent)
{
// $parent es la clase que llama al método
// $type es el tipo de cambio (instalar, actualizar o discover_install)
echo '<p>' . JText::_('COM_HELLOWORLD_PREFLIGHT_' . $type . '_TEXT') . '</p>';
}
/**
* Método que se ejecuta después del método de instalar/actualizar/desinstalar
*
* @return void
*/
function postflight($type, $parent)
{
// $parent es la clase que llama al método
// $type es el tipo de cambio (instalar, desinstalar o discover_install)
echo '<p>' . JText::_('COM_HELLOWORLD_POSTFLIGHT_' . $type . '_TEXT') . '</p>';
}
}
Este archivo de script , se redirige al usuario al componente com_helloworld cuando se instala, y se mostrarán mensajes cuando se actualiza o se desinstala. En el método de actualización, se mostrará la versión nueva con $parent->get('manifest')->version.
Añadiendo algunas cadenas de idiomas
admin/language/es-ES/es-ES.com_helloworld.sys.ini
COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="Esta es la descripción de HelloWorld"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="Esta vista muestra un mensaje seleccionado"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Hello World"
COM_HELLOWORLD_INSTALL_TEXT="Script de Instalación de HelloWorld"
COM_HELLOWORLD_MENU="Hello World!"
COM_HELLOWORLD_POSTFLIGHT_DISCOVER_INSTALL_TEXT="HelloWorld postlight descubre script de instalación"
COM_HELLOWORLD_POSTFLIGHT_INSTALL_TEXT="HelloWorld postflight script de instalación"
COM_HELLOWORLD_POSTFLIGHT_UNINSTALL_TEXT="HelloWorld postflight script de dsinstalación"
COM_HELLOWORLD_POSTFLIGHT_UPDATE_TEXT="HelloWorld postflight script de actualización"
COM_HELLOWORLD_PREFLIGHT_DISCOVER_INSTALL_TEXT="HelloWorld preflight descubre script de instalación"
COM_HELLOWORLD_PREFLIGHT_INSTALL_TEXT="HelloWorld preflight script de instalación"
COM_HELLOWORLD_PREFLIGHT_UNINSTALL_TEXT="HelloWorld preflight script de desinstalación"
COM_HELLOWORLD_PREFLIGHT_UPDATE_TEXT="HelloWorld preflight script de actualización"
COM_HELLOWORLD_UNINSTALL_TEXT="HelloWorld desinstalado"
COM_HELLOWORLD_UPDATE_TEXT="HelloWorld actualizadot. HelloWorld ahora se actualizo a la versión %s."
Verifiquemos ahora el contenido que debemos tener en nuestro directorio:
- helloworld.xml
- script.php
- 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
- site/language/index.html
- site/language/es-ES/index.html
- site/language/es-ES/es-ES.com_helloworld.ini
- admin/index.html
- admin/access.xml
- admin/config.xml
- admin/helloworld.php
- admin/controller.php
- admin/sql/index.html
- admin/sql/install.mysql.utf8.sql
- admin/sql/uninstall.mysql.utf8.sql
- admin/sql/updates/index.html
- admin/sql/updates/mysql/index.html
- admin/sql/updates/mysql/0.0.1.sql
- admin/sql/updates/mysql/0.0.6.sql
- admin/sql/updates/mysql/0.0.12.sql
- admin/sql/updates/mysql/0.0.13.sql
- admin/models/index.html
- admin/models/fields/index.html
- admin/models/fields/helloworld.php
- admin/models/forms/index.html
- admin/models/forms/helloworld.xml
- admin/models/forms/helloworld.js
- admin/models/rules/index.html
- admin/models/rules/greeting.php
- admin/models/helloworld.php
- admin/models/helloworlds.php
- admin/views/index.html
- admin/views/helloworlds/index.html
- admin/views/helloworlds/view.html.php
- admin/views/helloworlds/tmpl/index.html
- admin/views/helloworlds/tmpl/default.php
- admin/views/helloworlds/tmpl/default_head.php
- admin/views/helloworlds/tmpl/default_body.php
- admin/views/helloworlds/tmpl/default_foot.php
- admin/views/helloworld/index.html
- admin/views/helloworld/view.html.php
- admin/views/helloworld/submitbutton.js
- admin/views/helloworld/tmpl/index.html
- admin/views/helloworld/tmpl/edit.php
- admin/helpers/index.html
- admin/helpers/helloworld.php
- admin/tables/index.html
- admin/tables/helloworld.php
- admin/language/es-ES/es-ES.com_helloworld.ini
- admin/language/es-ES/es-ES.com_helloworld.sys.ini
- admin/controllers/index.html
- admin/controllers/helloworld.php
- admin/controllers/helloworlds.php
- language/es-ES/es-ES.ini
- media/index.html
- media/images/index.html
- media/images/tux-16x16.png
- media/images/tux-48x48.png
Nuestro helloworld.xml es modificado:
<?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>Licencia Info</license>
<version>0.0.15</version>
<description>COM_HELLOWORLD_DESCRIPTION</description>
<!-- Ejecutar instalación/desinstalación/actualización; Nuevo en 2.5 -->
<scriptfile>script.php</scriptfile>
<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>
</files>
<media destination="com_helloworld" folder="media">
<filename>index.html</filename>
<folder>images</folder>
</media>
<administration>
<menu img="../media/com_helloworld/images/tux-16x16.png">COM_HELLOWORLD_MENU</menu>
<files folder="admin">
<filename>index.html</filename>
<filename>config.xml</filename>
<filename>access.xml</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>sql</folder>
<folder>tables</folder>
<folder>models</folder>
<folder>views</folder>
<folder>controllers</folder>
<folder>helpers</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 del contenido del componente e instalalo a través del gestor de extensiones de Joomla!. Recuerda que también puedes descargar el archivo directamente.
16- Añade la definición UpdateServer (Servidor de Actualizaciones)
Para agregar la funcionalidad UpdateServer hay que ajustar el helloworld.xml a este aspecto:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="2.5.0" method="upgrade">
<name>COM_HELLOWORLD</name>
<creationDate>November 2009</creationDate>
<author>Carlos R & Andoitz B</author>
<authorEmail>email</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>Licencia Info</license> >
<version>0.0.15</version>
<description>COM_HELLOWORLD_DESCRIPTION</description>
<scriptfile>script.php</scriptfile>
<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>
</files>
<media destination="com_helloworld" folder="media">
<filename>index.html</filename>
<folder>images</folder>
</media>
<administration>
<menu img="../media/com_helloworld/images/tux-16x16.png">COM_HELLOWORLD_MENU</menu>
<files folder="admin">
<filename>index.html</filename>
<filename>config.xml</filename>
<filename>access.xml</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>sql</folder> >
<folder>tables</folder>
<folder>models</folder>
<folder>views</folder>
<folder>controllers</folder>
<folder>helpers</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>
<!-- DEFINICIÓN UPDATESERVER -->
<updateservers>
<!-- Nota: No se permiten espacios ni saltos de líneas entre las entiquetas del servidor -->
<server type="extension" priority="1" name="HelloWorld Update Site">http://yourdomain.com/update/helloworld-update.xml</server>
</updateservers>
</extension>
También es necesario poner un archivo XML en el servidor que contenga toda la información sobre las actualizaciones.
helloworld-update.xml
<?xml version="1.0" encoding="utf-8"?>
<updates>
<update>
<name>HelloWorld</name>
<description>Componente HelloWorld Component</description>
<element>com_helloworld</element>
<type>component</type>
<version>1.5.0</version>
<infourl title="HalloWorld URL">http://yourdomain.com</infourl>
<downloads>
<downloadurl type="full" format="zip">http://yourdomain.com/files/com_helloworld-1.5.0-final.zip</downloadurl>
</downloads>
<tags>
<tag>some-tag</tag>
</tags>
<maintainer>HelloWorld Inc.</maintainer>
<maintainerurl>http://yourdomain.com</maintainerurl>
<section>some-section</section>
<targetplatform name="joomla" version="2.5" />
</update>
<update>
<name>HelloWorld</name>
<description>HelloWorld Component</description>
<element>com_helloworld</element>
<type>component</type>
<version>1.5.0</version>
<infourl title="HalloWorld URL">http://yourdomain.com</infourl>
<downloads>
<downloadurl type="full" format="zip">http://yourdomain.com/files/com_helloworld-1.5.0-final.zip</downloadurl>
</downloads>
<tags>
<tag>some-tag</tag>
</tags>
<maintainer>HelloWorld Inc.</maintainer>
<maintainerurl>http://yourdomain.com</maintainerurl>
<section>some-section</section>
<targetplatform name="joomla" version="2.5" />
</update>
<update>
<name>HelloWorld</name>
<description>HelloWorld Component</description>
<element>com_helloworld</element>
<type>component</type>
<version>1.5.0</version>
<infourl title="HalloWorld URL">http://yourdomain.com</infourl>
<downloads>
<downloadurl type="full" format="zip">http://yourdomain.com/files/com_helloworld-1.5.0-final.zip</downloadurl>
</downloads>
<tags>
<tag>some-tag</tag>
</tags>
<maintainer>HelloWorld Inc.</maintainer>
<maintainerurl>http://yourdomain.com</maintainerurl>
<section>some-section</section>
<targetplatform name="joomla" version="2.5" />
</update>
<update>
<name>HelloWorld</name>
<description>HelloWorld Component</description>
<element>com_helloworld</element>
<type>component</type>
<version>1.5.1</version>
<infourl title="HelloWorld URL">http://yourdomain.com</infourl>
<downloads>
<downloadurl type="full" format="zip">http://yourdomain.com/files/com_helloworld-1.5.1-final.zip</downloadurl>
</downloads>
<tags>
<tag>some-tag</tag>
</tags>
<maintainer>HelloWorld Inc.</maintainer>
<maintainerurl>http://yourdomain.com</maintainerurl>
<section>some-section</section>
<targetplatform name="joomla" version="2.5" />
</update>
<update>
<name>HelloWorld</name>
<description>HelloWorld Component</description>
<element>com_helloworld</element>
<type>component</type>
<version>1.5.1</version>
<infourl title="HelloWorld URL">http://yourdomain.com</infourl>
<downloads>
<downloadurl type="full" format="zip">http://yourdomain.com/files/com_helloworld-1.5.1-final.zip</downloadurl>
</downloads>
<tags>
<tag>some-tag</tag>
</tags>
<maintainer>HelloWorld Inc.</maintainer>
<maintainerurl>http://yourdomain.com</maintainerurl>
<section>some-section</section>
<targetplatform name="joomla" version="2.5" />
</update>
<update>
<name>HelloWorld</name>
<description>HelloWorld Component</description>
<element>com_helloworld</element>
<type>component</type>
<version>1.5.1</version>
<infourl title="HelloWorld URL">http://yourdomain.com</infourl>
<downloads>
<downloadurl type="full" format="zip">http://yourdomain.com/files/com_helloworld-1.5.1-final.zip</downloadurl>
</downloads>
<tags>
<tag>some-tag</tag>
</tags>
<maintainer>HelloWorld Inc.</maintainer>
<maintainerurl>http://yourdomain.com</maintainerurl>
<section>some-section</section>
<targetplatform name="joomla" version="2.5" />
</update>
</updates>
Es necesario agregar una nueva actualización cada vez que se publique una nueva versión, así como para cada versión de Joomla!.(se necesita un nodo distinto para cada actualización TargetPlatform)
Vea también
- Implementación de un servidor de actualizaciones (Inglés)
- Administración de actualizaciones de componentes con Joomla 1.6 - Parte 1 (Inglés)
Aquí concluye este extenso tutorial. Espero que haya sido de tu agrado y que hayas podido crear tu componente siguiendo el mismo. Como pudistes darte cuenta, en cada punto hemos puesto la fecha de actualización que tenían los mismos a la hora de haber creado este tutorial. Por lo que queremos destacar que la información ofrecida en este artículo se actualizará a través de “artículos de actualización” en caso de que se hagan modificaciones en la documentación de Joomla! Sabemos que la información vale de poco cuando no está actualizada.
Este es solo el primero de una larga serie de tutoriales dirigidos a esas personas que, después de tener o adquirir cierta base y conocimiento del funcionamiento de Joomla!, quieran dar un paso más allá y aprender a modificar o ampliar su funcionalidad o, por qué no, programar sus propias extensiones.
A lo largo de estos tutoriales cubriremos todo tipo de temas, como la creación de módulos desde cero, creación de plugins, parámetros, migración de componentes... También hablaremos de cómo crear componentes con funcionalidades como el envío de emails, la carga de archivos... Pasaremos por AJAX, plantillas, flujo de trabajo, usar el editor en los componentes y todo lo que surja, siempre con el objetivo de explotar todas las posibilidades que nos ofrece Joomla! para conseguir lo que deseemos.
Por supuesto, lo más valioso de Joomla! es su Comunidad, y como tal, te invitamos a que nos hagas llegar tus sugerencias si deseas tener un tutorial en español sobre un tema concreto. Estaremos encantados de trabajar en ello y ayudarte en todo lo que podamos.
Traducido por: Carlos Rodríguez y Andoitz Brit
Desarrollo de componentes en Joomla 2.5 (7 de 8) | Siguiente >
-
Programación
- 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
- Qt Creator 12 lanzado con complementos de grabación de pantalla y Explorador de compiladores
- 10 sitios web para practicar problemas de programación