Pacotes

From Joomla! Documentation

Revision as of 19:06, 9 January 2024 by FuzzyBot (talk | contribs) (Updating to match new version of source page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎español • ‎français • ‎italiano • ‎português • ‎português do Brasil

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 Joomla 2.5 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.