1 Erklärung
Es gibt verschiedene Ursachen, wieso es vorkommen kann, dass man eine Option, die mittels des Options-PiP angelegt wurde, umbenennen möchte. Direkt vorweg möchte ich sagen, dass es hierfür keinen direkten Weg gibt, sondern man diesen Effekt nur durch einen einfachen aber effektiven Trick nachbilden kann. Zuerst benötigen wir eine Update Anweisung in der package.xml. Mit dieser legen wir die Reihenfolge der Arbeiten fest. Als Erstes werden die neuen Optionen angelegt, als Zweites werden mittels eines Scripts die alten Werte übernommen und im dritten Schritt werden die alten Werte gelöscht.
2 Komplettes Beispiel
<instructions type="update" fromversion="*">
<instruction type="option" />
<instruction type="script" application="wcf">acp/update_de.yourecom.package_updateOptions.php</instruction>
<instruction type="option">option_delete.xml</instruction>
</instructions>
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/2019/option.xsd">
<import>
<options>
<option name="app_option_new">
<categoryname>app.name.general</categoryname>
<optiontype>boolean</optiontype>
<defaultvalue>1</defaultvalue>
</option>
</options>
</import>
</data>
Display More
<?php
use wcf\data\option\Option;
use wcf\data\option\OptionEditor;
/**
* Update options to new format
*
* @author Marcel Beckers
* @license Blupp Lizenz
* @package de.yourecom.cbs.league
*/
$options = [
'app_option_old' => 'app_option_new'
];
foreach($options as $oldOptionName => $optionName) {
$option = Option::getOptionByName($optionName);
$objectEditor = new OptionEditor($option);
$objectEditor->update([
'optionValue' => constant(strtoupper($oldOptionName))
]);
}
Display More
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/2019/option.xsd">
<delete>
<option name="app_option_old" />
</delete>
</data>
Durch dieses Verfahren ist es möglich, z.B. Rechtschreibfehler bei der Vergabe einer Option zu korrigieren und dennoch die Einstellungen in einer Installation beizubehalten. Durch die Verwendung der foreach Schleife innerhalb des Update Scripts, ist es auch möglich, gleichzeitig mehrehre Optionen auf einmal zu sichern.
3 Gut zu wissen
Unter Umständen kann bei der Vergabe eines Optionsnamens wie z.B. appName zu Fehlern führen, weswegen WoltLab die Namensvergabe nach dem Schema app_name empfiehlt. Optionsnamen werden also komplett kleingeschrieben und neue Wörter werden durch einen Unterstrich getrennt.
Ihr habt Fragen oder Anregungen? Lob oder Kritik? Lasst es mich doch durch einen Kommentar von euch wissen!