Paket

From Joomla! Documentation

Revision as of 09:56, 8 July 2021 by Vovos (talk | contribs) (DE zu optionalem version-Attribut)
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎español • ‎français • ‎italiano • ‎português • ‎português do Brasil

Anmerkung zu komponentenabhängigen Modulen

Manche Module (oder Plugins etc.) verwenden Models, Helpers u.ä. einer Komponente. In diesen Fällen wäre es wünschenswert, das Modul so zu packen, dass es deinstalliert wird, sobald die Komponente selber deinstalliert wird. Dieses dependency management wird in Joomla! zwar angestrebt, aber bisher nicht umgesetzt. Es wird empfohlen, den Standards zu folgen und ein Paket zu verwenden wie unten beschrieben.

Was ist ein Paket?

Ein Paket ist eine Erweiterung, mit der mehrere Erweiterungen auf einmal installiert werden. Dies wird z.B. verwendet, wenn man eine Komponente und ein Modul hat, die voneinander abhängig sind. Wenn diese in einem Paket kombiniert werden, kann der Benutzer die beiden Erweiterungen in einem Rutsch installieren und deinstallieren. Paket-Erweiterungen können ab Joomla Joomla 2.5 verwendet werden.

Wie erstellt man ein Paket?

Eine Paket-Erweiterung wird erstellt indem alle zip-Dateien der Erweiterungen zusammen mit einer XML-Manifest-Datei gepackt werden. Ein Paket besteht beispielsweise aus folgenden Bestandteilen:

  • Komponente helloworld
  • Modul helloworld
  • Bibliothek helloworld
  • System-Plugin helloworld
  • Template helloworld

Das Paket sollte die folgende Baumstruktur in der zip-Datei haben:

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

Die Datei pkg_helloworld.xml könnte folgendermaßen aussehen:

 <?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>

Wenn dies in eine ZIP-Datei gepackt wird und man diese installiert, wird jede enthaltene Erweiterung installiert. Das Paket wird auch im Backend in der Liste der Erweiterungen aufgeführt und wird verwendet, um alle Erweiterungen des Paktes zu deinstallieren.

Es sollte immer der Uninstaller des Pakets verwendet werden und nicht die Uninstaller der einzelnen Teilpakete. So wird verhindert, dass in der Erweiterungsverwaltung verwaiste Einträge stehen bleiben.

Id= <file id="not_arbitrary">

Das Id-Element im <file ..> Tag kann NICHT beliebig gewählt werden! "id=" sollte auf den Wert der element-Spalte in der Tabelle "#__extensions" gesetzt werden. Wenn diese nicht korrekt gesetzt werden, können die Teilpakete ( <file> ) bei der Paket-Deinstallation NICHT gefunden und deinstalliert werden.

Manifest-Dateiname und Paketname

Die Möglichkeit die Paketdatei zu deinstallieren und der Name der Manifest-Datei hängen eng zusammen. Die Manifest-Datei muss das Präfix "pkg_" haben. Der Rest des Namens (ohne die Erweiterung .xml) wird als <paketname> verwendet. Oder anders herum gesagt: ein Paket, das als "blurpblurp_J3" identifiziert werden soll, muss eine Manifest-Datei "pkg_blurpblurp_J3.xml" haben. Ist dies nicht der Fall, kann das Paket nicht deinstalliert werden.

Optional kann eine Datei <pkg_script.php> verwendet werden, die eine Klasse pkg_<packagename>InstallerScript mit einer öffentlichen Funktion postflight enthält (unterstützt seit Joomla! 3.6).

Extension tag

Seit Joomla! 3.4 sollte method="upgrade" im <extension> tag hinzugefügt werden, wenn sich das Paket bei Folge-Installationen updaten soll.

Das Versionsattribut des <extension> tags sollte auf die minimal unterstützte Joomla!-Version für dieses Paket gesetzt werden. Wenn das Paket z.B. Joomla! 3.2 und höher unterstützt, sollte dies auf 3.2 gesetzt werden.

Hinweis: Das version-Attribut ist rein optional. Es hat keinen Einfluss auf die Installationsroutine von Joomla. Ab Joomla 4 wurde daher das version-Attribut aus allen Core-Erweiterungen entfernt. Siehe Pull-Request 29960 auf github.com

Extension Uninstall Dependency

Ab Jooma! 3.7.0 kann eine Paketerweiterung mit einem <blockChildUninstall>true</blockChildUninstall>-Element im Paketmanifest deklarieren, dass ihre Kind-Erweiterungen nicht eigenständig deinstalliert werden können. Wenn das Paket alle seine Erweiterungen benötigt, um korrekt zu funktionieren, setzen Sie dies auf true oder 1.