Pacotes
From Joomla! Documentation
Nota sobre os módulos dependentes de componentes
Às vezes, os módulos (ou plugins e assim por diante) usam os modelos e auxiliares de um componente e tal. Nessas ocasiões, seria bom poder empacotar seu módulo de forma que ele seja desinstalado quando o próprio componente for desinstalado. Isso é chamado de gerenciamento de dependências que foi desejado no Joomla, mas ainda não foi feito. Sugere-se que você siga os padrões e use um pacote conforme descrito abaixo.
O que é um pacote?
Um pacote é uma extensão usada para instalar várias extensões ao mesmo tempo. Use um pacote se você tiver, por exemplo, um componente e um módulo que dependem um do outro. Combiná-los em um pacote permitirá que o usuário instale e desinstale ambas as extensões em uma única operação. Extensões de pacote podem ser usadas com o Joomla e suas versões posteriores.
Como crio um pacote?
Uma extensão de pacote é criada compactando todos os arquivos .zip das extensões junto com um arquivo de manifesto .xml. Por exemplo, se você tiver um pacote composto por:
- componente helloworld
- módulo helloworld
- biblioteca helloworld
- plugin de sistema helloworld
- tema helloworld
O pacote deve ter a seguinte árvore em seu arquivo 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
O pkg_helloworld.xml pode ter o seguinte conteúdo:
<?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>
Quando você compactar e instalar isso, verá que todas as extensões serão instaladas. O pacote ficará visível na lista de extensões para que um usuário possa desinstalar todas as extensões contidas no pacote.
Lembre-se de usar o desinstalador de pacotes em vez de desinstaladores de subpacotes individuais para evitar entradas de extensões órfãs no gerenciador de extensões.
Id= <file id="não_é_arbitrário">
O elemento id na tag <file ..> não é arbitrário! O id= deve ser definido com o valor da coluna element na tabela #__extensions. Se eles não estiverem configurados corretamente, na desinstalação do pacote, o arquivo filho não será encontrado e desinstalado.
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.
Nome do arquivo de manifesto e nome do pacote
A nomenclatura do arquivo de manifesto e a capacidade de desinstalar o próprio arquivo de pacote estão intimamente relacionadas. O arquivo de manifesto deve ter um prefixo pkg_. O restante do nome do manifesto (sem a extensão .xml) deve ser usado como <packagename>. Ou, do outro lado, um pacote que você deseja identificar como blurpblurp_J3 recebe isso como seu<packagename> e deve estar em um arquivo de manifesto chamado pkg_blurpblurp_J3.xml. Se isso não for feito, será impossível desinstalar o próprio pacote.
Um opcional <pkg_script.php> que contém a classe pkg_<nome_do_pacote>InstallerScript com a função pública postflight pode ser usado. (Isso funciona no Joomla! 3.6 e suas versões posteriores).
Tag de extensão
A partir do Joomla! 3.4, você deve incluir method="upgrade" na tag <extension> se quiser que seu pacote tenha sucesso em se atualizar em instalações subsequentes.
O atributo version da tag <extension> deve ser definido para a versão mínima suportada do Joomla para este pacote. Por exemplo, se o seu pacote suporta apenas o Joomla! 3.2 e suas versões posteriores, defina isso como 3.2.
Nota: Este atributo version
é puramente opcional. Não tem influência na rotina de instalação do Joomla. A partir do Joomla 4, o atributo version
foi removido de todas as extensões principais. Consulte a solicitação de pull 29960 em github.com
Dependência de desinstalação de extensão
A partir de Jooma! 3.7.0, uma extensão de pacote pode declarar que seus elementos filhos não podem ser desinstalados independentemente com um elemento <blockChildUninstall>true</blockChildUninstall> no manifesto do pacote. Se o seu pacote precisar de todas as suas extensões para funcionar de forma eficaz, defina isso como true ou 1.