Beispiele für neues Ereignis onAfterCreateDraft

08. Sep 2016

Mit dem neuen Ereignis onAfterCreateDraft lassen sich Inhalte vor der Bearbeitung beliebig anpassen.

Mit dem neuen Ereignis onAfterCreateDraft lassen sich Inhalte vor der Bearbeitung beliebig anpassen. Dieser Artikel zeigt Beispiele für den praktischen Einsatz.

Falls es ausreicht, wenn Daten erst dann angepasst werden müssen, bevor sie im Editor bearbeitet werden, können Sie dafür das Ereignis onAfterCreateDraft nutzen. Es wird beim Öffnen des Editors nach dem Erstellen einer Arbeitskopie gefeuert. 

Beispiel, um einen Wert in ein Fragment zu schreiben, falls es leer ist

$path = $eventData['filePath'];

$domPage = wDOM::parseFile($path);
$domPage->encoding = 'utf-8';

$pictureItems = wDOM::executeXPath($domPage, "//wd:item[@type = 'picture.standard']");

$hasChanged = false;

foreach(
$pictureItems as $pictureItem){
$fragmentTitle = wDOM::executeXPath($domPage, "wd:fragment[@id = 'title']", array('context' => $pictureItem))->item(0);
if(
$fragmentTitle){
if(
$fragmentTitle->textContent == ''){
$fragmentTitle->appendChild($domPage->createTextNode('Bildtitel'));
$hasChanged = true;
}
}
}

if(
$hasChanged){
$xmlStrNew = wStringconverter::removePrologXml($domPage->saveXML());
wReadWrite::writeFile($path, $xmlStrNew);
}

Beispiel, um eine alte Variable aus der Projektkonfiguration zu löschen

$path = $eventData['filePath'];

$domVariables = wDOM::parseFile($path);
$domVariables->encoding = 'utf-8';

$variableNodes = wDOM::executeXPath($domVariables, "/wVariables/variable");

$hasChanged = false;

foreach(
$variableNodes as $variableNode){
$key = $variableNode->getAttribute('key');
if(
$key == 'variable_to_delete'){
$variableNode->parentNode->removeChild($variableNode);
$hasChanged = true;
}
}

if(
$hasChanged){
$xmlStrNew = wStringconverter::removePrologXml($domVariables->saveXML());
wReadWrite::writeFile($path, $xmlStrNew);
}
Je nach Funktion kann es sinnvoll sein, bestehende Arbeitskopien durch eine Projektbereinigung zu löschen.