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