Die package.xml ist die einzige Pflichtdatei, die ihr für die Erstellung eines Plugins benötigt. Die package.xml wird wie alle PIP Dateien in xml geschrieben und muss "package.xml" heißen. Eine andere Schreibweise ist nicht möglich. Innerhalb der package.xml werden die generellen Installations- und Updateinformationen eines Plugins verfasst und sie muss sich im Hauptverzeichnis des Plugins befinden.
1 Die XSD auf GitHub
https://github.com/WoltLab/WCF/blob/master/XSD/package.xsd
2 Mögliche Parameter
Tag | Parameter | Definition |
<package> | name="Paketbezeichner" | Einleitendes Elternelement |
<packageinformation> | Keine | Enthält die Meta-Informationen des Plugins |
<packagename> | languagecode="de" (optional) | Name des Plugins. Ohne Angabe des Parameters ist diese Angabe immer für en. |
<packagedescription> | languagecode="de" (optional) | Kurze Pluginbeschreibung. Ohne Angabe des Parameters ist diese Angabe immer für en. |
<readme> | languagecode="de" (optional) | Noch nicht unterstützt im WSC 5.3. Ohne Angabe des Parameters ist diese Angabe immer für en. |
<license> | languagecode="de" (optional) | Noch nicht unterstützt im WSC 5.3. Ohne Angabe des Parameters ist diese Angabe immer für en. |
<isapplication> | Keine | 0 = Es handelt sich um keine Endanwendung 1 = Es handelt sich um eine Endanwendung |
<packageurl> | Keine | Website des Plugins mit weiteren Informationen |
<version> | Keine | Versionsnummer des Plugins |
<date> | Keine | Erstellungsdatum des Plugins |
<authorinformation> | Keine | Enthält Meta-Informationen über den Entwickler des Plugins |
<author> | Keine | Name des Entwicklers |
<authorurl> | Keine | Website des Entwicklers |
<requiredpackages> | Keine | Meta-Informationen über zwingend vorausgesetzte Plugins |
<requiredpackage> | minversion="1.0.0" (optional) | Enthält den Paketbezeichner des benötigten Plugins. |
<excludedpackages> | Keine | Meta-Informationen über Plugins, mit denen sich ein Plugin nicht installieren lässt. |
<excludedpackage> | version="2.2.0 Alpha 1" (optional) | Enthält den Paketbezeichner und Version des Plugins, mit den es sich nicht installieren lässt. |
<compatibility> | Keine | Meta-Informationen über die Kompatibilität des Plugins. |
<api> (Veraltet) |
version="2019" | Enthält die API Kompatibilität als vierstellige Jahreszahl. Wegfall mit dem WSC 5.3. |
<optionalpackages> | Keine | Meta-Informationen über Plugins, die während der Installation optional mit installiert werden können. |
<optionalpackage> | file="optionals/de.yourecom.optional.tar" | Dateipfad ausgehend von der package.xml innerhalb des Plugins zum optionalen Plugin. |
<instructions> | type='install' type='update' fromversion="1.0.0" |
Enthält die Meta-Informationen zu der Installation oder zu einem Update. |
<instruction> | type='file' type='templates' type='acpTemplate' etc. |
Enthält die zu erledigenden Installations- bzw. Updateanweisung. |
3 Beispiel package.xml
XML: package.xml
<?xml version="1.0" encoding="UTF-8"?>
<package name="de.yourecom.example" xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com https://www.woltlab.com/XSD/2019/package.xsd">
<packageinformation>
<packagename><![CDATA[Example Plugin]]></packagename>
<packagename languagecode="de"><![CDATA[Beispiel Plugin]]></packagename>
<packagedescription><![CDATA[This plugin is an example plugin.]]></packagedescription>
<packagedescription languagecode="de"><![CDATA[Dieses Plugin ist ein Beispielplugin]]></packagedescription>
<standalone>0</standalone>
<version>1.0.0</version>
<date>2020-10-01</date>
<packageurl><![CDATA[http://yourecom.de]]></packageurl>
</packageinformation>
<authorinformation>
<author><![CDATA[Marcel Beckers, YoureCom]]></author>
<authorurl><![CDATA[http://yourecom.de]]></authorurl>
</authorinformation>
<requiredpackages>
<requiredpackage minversion="5.3.0 Alpha 1">com.woltlab.wcf</requiredpackage>
</requiredpackages>
<optionalpackages>
<optionalpackage file="optionals/de.yourecom.definition2.wbb.tar.gz">de.yourecom.definition2.wbb</optionalpackage>
</optionalpackages>
<excludedpackages>
<excludedpackage version="6.0.0 Alpha 1">com.woltlab.wcf</excludedpackage>
</excludedpackages>
<instructions type="install">
<instruction type="file" />
<instruction type="acpTemplate" />
<instruction type="template" />
<instruction type="sql" />
</instructions>
<instructions type="update" fromversion="2.0.*">
<instruction type="file" />
<instruction type="acpTemplate" />
<instruction type="template" />
<instruction type="sql">update.sql</instruction>
</instructions>
</package>
Display More
4 Gut zu wissen
- Der Paketbezeichner, wird mittels des Parameters name im package Tag definiert. Dieser muss zwingend aus mindestens 3 Teilen bestehen, die jeweils durch einen Punkt voneinander getrennt werden. Es hat sich etabliert, dass der erste Teil des Paketbezeichners die Domain Endung der Website des Entwicklers und der zweite Teil des Paketbezeichners aus dem Domainnamen des Entwicklers besteht. Der dritte Teil besteht dann aus dem Namen des Plugins, der dann auch ggf. in camelCase geschrieben wird. In meinem Fall sieht der Paketbezeichner als folgendermaßen aus: de.yourecom.example
- Innerhalb von requiredpackages, compatibility, optionalpackages und excludedpackages können die Kindelemente beliebig oft wiederholt werden, um so mehrere Plugins verarbeiten zu können.
- Alle Möglichkeiten des type Parameters im instruction Tag werden innerhalb der jeweiligen PIP´s erklärt.
- Woltlab empfiehlt mittlerweile, mittels excludedpackage die nächste Major Version des WSC generell auszuschließen, um so Inkompatibilitäten bereits im Vorfeld auszuschließen.
- Sollte das WSC nicht innerhalb des requiredpackages explizit angegeben werden, so setzt das WSC diese Information während der Installation automatisch.
- Ein Update ist nur möglich, wenn mindestens eine instruction Anweisung vorhanden ist.
- Generell empfehle ich, sich anzugewöhnen, alle möglichen Tags zu setzen. So hat man immer volle Kontrolle darüber, was geschieht und muss nicht ggf. später lästig suchen, wie nochmal der eine Tag lautete, den man ewig nicht benötigte.
Ihr habt Fragen oder Anregungen? Lob oder Kritik? Lasst es mich doch durch einen Kommentar von euch wissen!