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.