Paquete

From Joomla! Documentation

This page is a translated version of the page Package and the translation is 90% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎Nederlands

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.

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.

Extension Uninstall Dependency

As of Jooma! 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.