Paquete

From Joomla! Documentation

This page is a translated version of the page Package and the translation is 61% complete.
Outdated translations are marked like this.

Nota sobre módulos dependientes de un componente

A veces los módulos (o plugins, etc) usan los modelos y helpers de un componente. En esas ocasiones sería estupendo poder empaquetar el módulo de manera que sea desinstalado cuando el propio componente lo sea. Esto se llama gestión de dependencias, y es algo que ha sido deseado en Joomla, pero que aún no se ha hecho. Se sugiere seguir los estándares y usar un paquete únicamente de la forma que se describe a continuación.

¿Qué es un paquete?

Un paquete es una extensión que se utiliza para instalar múltiples extensiones de una vez. Esto se usa si por ejemplo tiene un componente y un módulo que dependen el uno del otro. Combinar ambos en un paquete permitirá al usuario instalar y desinstalar ambas extensiones de una vez. Las extensiones tipo paquete pueden ser usadas con Joomla Joomla 2.5 y superior.

¿Cómo creo un paquete?

Una extensión tipo paquete se crea empaquetando todos los archivos zip de las extensiones junto con archivo de manifiesto xml. Por ejemplo, si tiene un paquete compuesto por:

  • componente helloworld
  • módulo helloworld
  • librería helloworld
  • plugin de sistema helloworld
  • plantilla helloworld

El paquete debería tener el siguiente árbol en el archivo zip:

 -- pkg_helloworld.xml
 -- packages <dir>
     |-- com_helloworld.zip
     |-- mod_helloworld.zip
     |-- lib_helloworld.zip
     |-- plg_sys_helloworld.zip
     |-- tpl_helloworld.zip
 -- pkg_script.php

El archivo pkg_helloworld podría tener el siguiente contenido:

 <?xml version="1.0" encoding="UTF-8" ?>
 <extension type="package" version="1.6" method="upgrade">
 <name>Hello World Package</name>
 <author>Hello World Package Team</author>
 <creationDate>May 2012</creationDate>
 <packagename>helloworld</packagename>
 <version>1.0.0</version>
 <url>http://www.yoururl.com/</url>
 <packager>Hello World Package Team</packager>
 <packagerurl>http://www.yoururl.com/</packagerurl>
 <description>Example package to combine multiple extensions</description>
 <update>http://www.updateurl.com/update</update>
 <scriptfile>pkg_script.php</scriptfile>
 <files folder="packages">
   <file type="component" id="com_helloworld" >com_helloworld.zip</file>
   <file type="module" id="helloworld" client="site">mod_helloworld.zip</file>
   <file type="library" id="helloworld">lib_helloworld.zip</file>
   <file type="plugin" id="helloworld" group="system">plg_sys_helloworld.zip</file>
   <file type="template" id="helloworld" client="site">tpl_helloworld.zip</file>
 </files>
 </extension>

Cuando empaquete esto y trate de instalarlo, verá que cada extensión será instalada. También el paquete será visible en la lista de extensiones para poder desinstalar todas las extensiones que contenía.

Recuerde usar el desinstalador de paquetes en lugar de desinstalar cada una de sus subextensiones individualmente para evitar entradas de extensiones huérfanas en el gestor de extensiones.

Id= <file id="not_arbitrary">

Los elementos id en la etiqueta <file ..> NO son arbitrarios. El "id=" debería establecerse al valor de la columna "element" en la tabla "#__extensions". Si no son establecidos correctamente, al desinstalar el paquete los hijos ( <file> ) NO serán encontrados ni desinstalados.

Plugin "group" attribute

The group attribute is required for the package installer to locate the plugin for uninstall. Group refers to the <folder> name specified in the plugin manifest file.

Nombre del archivo de manifiesto y del paquete

La nomenclatura del archivo de manifiesto y la posibilidad de desinstalar el propio archivo del paquete están íntimamente relacionadas. El archivo de manifiesto debe tener un prefijo "pkg_", el resto del nombre del manifiesto (sin la extensión .xml) se usará como <packagename>. O, al contrario, un paquete que quiera identificarse como "blurpblurp_J3" tendrá eso como <packagename> y debería estar en un archivo de manifiesto llamado "pkg_blurpblurp_J3.xml". El no hacerlo hará que sea imposible desinstalar el paquete en sí.

Un archivo opcional <pkg_script.php> que contiene una clase pkg_<nombrepaquete>InstallesScript con una función pública postflight puede ser utilizado (funciona en Joomla! 3.6).

Etiqueta Extension

A partir de Joomla 3.4 debes incluir method="upgrade" en la etiqueta <extension> si quieres que tu paquete se pueda actualizar por sí mismo en instalaciones posteriores.

El atributo version de la etiqueta <extension> debe establecerse a la versión mínima de Joomla! compatible con este paquete. Por ejemplo, si tu paquete solo soporta Joomla! 3.2 y superiores, pónle como valor 3.2.

Note: This version attribute is purely optional. It has no influence on Joomla's installation routine. As of Joomla 4, the version attribute has therefore been removed from all core extensions. See pull request 29960 on github.com

Extension Uninstall Dependency

As of Joomla! 3.7.0, a package extension can declare that its child elements cannot be uninstalled independently with a <blockChildUninstall>true</blockChildUninstall> element in the package manifest. If your package needs all its extensions to operate effectively, set this to true or 1.