Apfel und Burger mit Pfeil in Richtung Dose mit TYPO3 Aufschrift

Daten in TYPO3 importieren mit external_import

Oftmals ist die Anforderung an uns TYPO3-Entwickler, Daten von externen Quellen zu importieren. So sollen Neuigkeiten aus einem RSS-Feed auf der eigenen Webseite dargestellt werden oder man möchte bei einem Relaunch Daten aus dem alten System übernehmen. Hier hat sicherlich jede Agentur / jeder Entwickler seine eigenen Vorlagen oder Erweiterungen, welche dann für den jeweiligen Fall angepasst werden.

Die Erweiterung external_import von Francois Suter bietet – wie wir finden – ein schönes Grundgerüst um Daten zu importieren. Dabei werden alle gängigen Formate abgedeckt. Sei es eine XML, CSV oder JSON-Datei oder eine andere Datenbank. Allein schon diese Tatsache veranlasste uns dazu, die Extension näher vorzustellen und ihr so einen kleinen Tribut zu zollen.

In diesem Blogbeitrag zeigen wir euch, wie einfach ihr die Extension installieren und anwenden könnt.

Installation der Extension external_import

Die Installation erfolgt einfach mittels composer. Alternativ dazu kann die Erweiterung auch im Extension-Manager heruntergeladen werden.

composer req cobweb/external_import

Je nachdem woher die Daten bezogen werden, sind ein oder mehrere weitere Extensions herunterzuladen.

  • svconnector_csv für den Import von Daten aus CSV-Dateien oder ähnlichen. Bei sehr großen Dateien ist portrino/svconnector_csv_extended zu empfehlen.
  • svconnector_feed für den Import von Daten aus XML-Dateien sowie zum Beispiel RSS-Feeds.
  • svconnector_sql für den Import von Daten aus externen Datenbanken. Hier kann jede SQL-basierte Datenbank genommen werden, da Doctrine verwendet wird.
  • svconnector_json für den Import von Daten aus JSON-Dateien.
compoer req cobweb/svconnector_csv cobweb/svconnector_feed cobweb/svconnector_sql cobweb/svconnector_json

Anschließend sind die Erweiterungen noch im Extension-Manager oder via Konsole zu installieren. Im Backend werden zwei neue Module sichtbar, auf die wir später noch eingehen.

Um automatisierte Tasks starten zu können, sollte noch die TYPO3-Core Erweiterung „Scheduler“ installiert sein.

Das war es auch schon. Jetzt kann mit den Konfigurationen begonnen werden.

Anpassungen im TCA

Nun beschreiben wir, welche Spalten in unseren TYPO3 mit den externen Daten befüllt werden sollen. Was bietet sich da eher an, als das Table Configuration Array (TCA) von TYPO3 zu nutzen. Hier werden bereits Eigenschaften der Tabellenspalten beschrieben.

Um den Überblick leichter zu behalten, empfehlen wir die Einstellungen für den Import in den jeweiligen TCA/Overrides zu definieren. Dadurch sind alle Konfigurationen für den Import an einer Stelle.

Hier eine Beispielkonfiguration für den Import aus einer externen Datenbank.

$table = 'tx_csexample_domain_model_item';

// table conf
$GLOBALS['TCA'][$table]['ctrl']['external'] = [
    0 => [
        'connector' => 'sql',
        'parameters' => [
            'driver' => 'mysqli',
            'init' => 'SET NAMES \'UTF8\';',
            'server' => '172.0.0.1',
            'user' => 'db_user',
            'password' => '1234',
            'database' => 'my_database',
            'query' => 'SELECT * FROM old_item WHERE deleted=0 ORDER BY uid'
        ],
        'data' => 'array',
        'referenceUid' => 'tx_externalimport_externalid',
        'group' => 'cs_example_items',
        'pid' => 1,
        'description' => 'Import ' . $table
    ]
];


// columns
$GLOBALS['TCA'][$table]['columns']['tx_externalimport_externalid']['external'] = [
    0 => [
        'field' => 'uid'
    ]
];


$GLOBALS['TCA'][$table]['columns']['title']['external'] = [
    0 => [
        'field' => 'header'
    ]
];


Zuerst erfolgt die allgemeine Konfiguration für die Tabelle.

Wir haben als connecor-Typ ’sql‘ angegeben. Weitere Typen sind ‚csv‘, ‚json‘ und ‚feed‘. Je nachdem müssen die Erweiterungen (s. oben) installiert sein.

Die Parameter (‚parameters‘) variieren je nach connector-Typ. Sie sind in der jeweiligen Dokumentation ausführlich beschrieben. Die Angaben zur Datenbank-Verbindung sind hier nur exemplarisch und anzupassen.

Als nächstes wird mit ‚data‘ definiert, in welchem Format die Daten zurückgegeben werden. Dies kann entweder wie hier ein Array oder XML sein.

Mit ‚referenceUid‘ wird definiert, wo die ID des externen Datensatzes zu speichern ist. Dies ist gerade bei mehrfachen Importen wichtig, damit die Daten konsistent vorliegen. Das Feld sollte in der ext_tables.sql definiert werden. Dabei ist zu beachten, den Datenbank-Analyzer durchzuführen, damit die Spalte wirklich in der Datenbank angelegt wird.

CREATE TABLE tx_csexample_domain_model_item (
   tx_externalimport_externalid varchar(255) DEFAULT '' NOT NULL
);

Über die ‚pid‘ wird festgelegt, auf welcher Seite die neuen Datensätze angelegt werden. Die entsprechende uid der Seite wird hier eingetragen.

Die letzten hier aufgeführten Eigenschaften ‚group‘ und ‚description‘ dienen der Anzeige im Backend-Modul.

Anschließend an die allgemeine Konfiguration für die Tabelle, erfolgt die Definition der Spalten. In unserem Beispiel wird die die uid aus der externen Tabelle in die Spalte ‚tx_externalimport_externalid‘ übernommen, ebenso wie ‚header‘ in ‚title‘.

Die Konfigurationsmöglichkeiten gehen hier sicherlich noch weiter. So können individuelle Transformationen, Mappings und MM-Relationen einfach deklariert werden, um die externen Daten in das gewünschte Format zu überführen. Die Dokumentation zur Extension ist gut geschrieben und sehr umfangreich.

Nachdem alle Spalten definiert sind, gilt es erste Tests auszuführen, ob die Daten auch wie gewünscht gespeichert werden. Hierfür bietet das Backend-Modul eine Vielzahl an Möglichkeiten.

Import ausführen im Backend-Modul

Sobald bei einer Tabelle im TCA unter ‚ctrl‘->’external‘ die Einstellungen vorgenommen wurden, erscheint ein neuer Task im Backend Modul der Erweiterung external_import.

Das praktische ist, dass dieser Task direkt im Scheduler und in der Konsole ausgeführt werden kann. Der Import kann somit automatisiert im gewünschten zeitlichen Intervall ausgeführt werden.

Modul der Erweiterung external_import im TYPO3 v9.5 LTS

Im Backend-Modul können die Scheduler Tasks direkt über das Plus-Symbol angelegt werden. Die direkte Ausführung erfolgt über den Synchronisierungs-Button. Unter Info kann man sich nochmal die getroffenen Konfigurationen anschauen.

Viel interessanter ist jedoch die Vorschau-Ansicht. Der Import erfolgt immer in mehreren Schritten. Jeder einzelne Schritt des Imports, kann hier separat durchgeführt werden. Alle vorherigen Schritte werden ebenfalls ausgeführt. Schließlich kann ich mir erst meine umgewandelten Daten anschauen, wenn sie bereits geholt wurden.

Neben den vordefinierten Schritten ist es möglich eigene Schritte zu definieren. Beispielsweise wäre ein Schritt Bilder im File Abstraction Layer (FAL) zu registrieren.

Ausblick

Die Konfigurationsmöglichkeiten der Extension external_import gehen weit über das hier Gezeigte hinaus. Sicherlich ist es eine sehr umfangreiche Erweiterung, aber gerade das ist für Importe auch erforderlich. Die Erweiterung erspart einem das Anlegen eigener Tasks und ermöglicht eine übersichtliche Konfiguration.

Wir bedanken uns sehr beim Extension-Autor Francois Suter für seine Arbeit. Zudem möchten wir nochmal auf die sehr gute Dokumentation verweisen.

Falls ihr eigene Erfahrungen mit der Erweiterung external_import habt, könnt ihr diese gerne in den Kommentaren teilen.

Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.