Multilang-Felder in ProcessWire exportieren und importieren, Teil 2
Im ersten Teil dieses Tutorials haben wir uns angesehen, wie man die Inhalte von mehrsprachigen Feldern in Processwire in eine CSV-Datei exportieren kann. Diese Datei kann dann z.B. von einem Übersetzungsbüro bearbeitet werden. Nun wollen wir uns ansehen, wie wir die übersetzte CSV-Datei wieder in Processwire einlesen können:
Wie die CSV-Datei z.B. per upload geladen werden kann, wollen wir hier außer Acht lassen. Wir nehmen der Einfachheit halber an, dass in der Variable $csvFilename der Pfad zu einer einzulesenden Datei steht. Außerdem verwenden wir wieder unsere CSV-Klasse.
Um die übersetzten Texte wieder unseren Processwire-Feldern zuordnen zu können setzt voraus, daß in der CSV-Datei die Spalten pageId und fieldId und die Sprachen-Header unverändert gelassen wurden. Dann können wir mit diesen Ids das Feld eindeutig definieren und den Text aus der entsprechenden Sprache in diesem Feld mit setLanguageValue setzen.
$errors = array();
$csv = new Csv();
$csv->read($csvFilename);
while (!$csv->eof()) {
$pageId = trim($csv->pageId);
$fieldId = trim($csv->fieldId);
if (($pageId != '') && ($fieldId != '')) {
$page = $wire->pages->get($pageId);
$field = $wire->fields->get($fieldId);
if (($page->id) && ($field->id)) {
if ($page->{$field->name} != null) {
$languages = array();
foreach ($wire->languages as $language) {
$langName = $language->name;
$val = trim($csv->{$langName});
if ($val != '') {
$page->of(false);
$page->{$field->name}->setLanguageValue($language, $val);
}
}
$page->save();
} else {
$errors[] = 'Zeile ' . $csv->getRowNum() . ': Seite mit ID ' . $pageId . ' hat kein Feld mit ID ' . $fieldId . '!';
}
} else {
if (!$page->id) {
$errors[] = 'Zeile ' . $csv->getRowNum() . ': Seite mit ID ' . $pageId . ' nicht gefunden!';
}
if (!$field->id) {
$errors[] = 'Zeile ' . $csv->getRowNum() . ': Feld mit ID ' . $fieldId . ' nicht gefunden!';
}
}
} else {
$errors[] = 'Zeile ' . $csv->getRowNum() . ': Spalte PageId oder FieldId fehlt!';
}
$csv->next();
}
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.