Contao-Extensions vorgestellt: Komplexe Importe mit dem TabImporter

Oft reicht der Contao-eigene Datenimport nicht aus, um komplexe Datenstrukturen ins System zu importieren. Und obendrein möchte man ja manchmal regelmäßig aktualisierte Daten im System haben. Hier hilft der TabImporter.

Ob Nutzerdaten aus einer fremden Datenbankapplikation, ob Preislisten, ob Inhalte aus einem fremden CMS: der Import und Austausch von Daten ist essentiell. Nun ist aber leider der kleinste gemeinsame Nenner oft 'CSV', und komplexe Strukturen, wie sie in relationalen Datenbankmodellen oft vorliegen, sind damit nur mit größeren Umwegen abzubilden. Beispiel ist eine Kundendatei, die nicht nur Adressdaten beinhaltet, sondern auch Zugehörigkeit zu Kundengruppen, bevorzugte Produkte und mehr beinhaltet.

Ein Import per CSV in eine Contao-Installation scheitert da schon an der Frage, wie in einem Schritt Adressdaten in die Tabelle tl_member, Gruppenzugehörigkeiten in die tl_user_groups und die restlichen Informationen in einen Catalog oder die MetaModels hineinkommen. Wenn dann noch die Zuordnung zu Events hinzukommt, dann müsste man die Daten konsistent über vier Importe verteilen - keine einfache Aufgabe, erst recht nicht in einem Livesystem.

Kommt zudem dazu, dass aktualisierte Daten automatisch in jeder Nacht im System hinterlegt werden sollen, dann verbietet sich auch die schnelle Lösung mit einer Session auf Datenbank-Ebene (es sei denn, man möchte in jeder Nacht eine Viertelstunde vor dem PC sitzen).

Im TabImporter von Christian de la Haye, den wir aus dem Repository auf Github laden, legt man zunächt einmal einen neuen Importjob an. Dieser Importjob kann nun mehrere Einzelschritte umfassen, die in vorgegebener Reihenfolge abgearbeitet werden. Um bei unserer Beispielaufgabe zu bleiben: Schritt eins wäre also der Import von Usern und die Zuordnung zu einer Benutzergruppe. Der Tabimporter, der das lesen verschiedener wahlfreier Datenstrukturen unterstützt, bekommt also hier eine CSV-Datei vorgesetzt. Nach Dateiauswahl werden alle enthaltenen Datenfelder angezeigt. Der Clou ist nun, dass für jedes Datenfeld eine Aktion vorgegeben werden kann - das Spektrum reicht  vom einfachen 'ersetze Wert in Zieltabelle 1:1 mit dem Wert aus Quelltabelle' über 'feste Werte', 'Timestamps' oder auch komplexe SQL-Operationen, und man kann auch Werte einfach auslassen, wenn man sie in einem Schritt nicht benötigt.

Das schöne: man kann mehrere Importschritte definieren, die nacheinander abgearbeitet werden. Also beispielsweise zunächst Userdaten importieren, danach die bevorzugten Produktgruppen zuordnen und in einem dritten Schirtt vielleicht ein Avisota-Abonnement, Catalog- oder MetaModel-Tags. Der Phantasie sind keine Grenzen gesetzt, und insbesondere mit der neuen MetaModels-Extension wird der TabImporter zum Universalwerkzeug.

Die Nachtruhe schont die Fähigkeit zur Steuerung mit Cronjobs. So kann dann ein Workflow integriert werden, der zu bestimmten Zeiten den Import einer Datenbank anstößt, automatisch Zuordnungen aktualisiert und dafür sorgt, dass Daten in einem System immer auf dem aktuellen Stand sind.

Ein anderes Scenario ist die Datenübernahme aus einem anderen CMS, die mit der wahlfreien Zuordnung von Feldern der Quell- zu einer Zieltabelle machbar sind. Da sich die Datenstrukturen in verschiedenen CMS sehr unterscheiden  ist hier eine genaue Kenntnis beider Systeme erforderlich. So bildet Wordpress Tags anders ab als Contao mit der Tags-Extension - mit dem TabImporter kein grundsätzliches Problem.

Der TabImporter ist ein mächtiges Werkzeug, allerdings noch im Beta-Stadium. Fehlermeldungen sind nicht immer intuitiv, und auf den Trick, bestimmte Spalten mit Festwerten (zum Beispiel für eine PID) vorzubelegen muss man auch erst einmal kommen. Komplexe SQL-Operationen erfordern solide Kenntnisse. De Konfiguration erfolgt in mehreren Schritten, und Abhängigkeiten wollen erst ausgelotet werden.Insgesamt aber lohnt sich er Blick auf den TabImporter, wenn es darum geht, fremde Daten ins eigene System zu migrieren. Kategorie: empfehlenswert, wenn auch robust programmiert.

Zurück