Entwicklung & Design

Umzug leicht gemacht: Wie es mit der Migration von TYPO3 CMS zu Neos klappt

Seite 2 / 3

Die Migration von TYPO3 CMS zu Neos im Detail

Die Entwicklung des Migrations-Tools planten wir in einzelnen Schritten, um das Vorgehen in handhabbare Aufgaben zu teilen.

Im ersten Schritt ging es darum, den Artikelrumpf an die richtige Stelle zu importieren. Die Kategorisierung der Artikel haben wir in Neos entsprechend der redaktionellen Vorgaben über die Verschachtelung von Page-Nodes abgebildet. Da die alte Kategorie-Struktur nicht mehr passte, schlug der entwickelte Importer die Zielseite, je nach Kategorie, in einem konfigurierbaren Mapping nach. Auch einige Tags der alten Artikel dienten dazu, die Texte der richtigen Kategorie zuzuordnen. Gezieltes Tagging ermöglichte es so, Artikel vor der Migration in die neuen Kategorien einzuordnen.

Das Anlegen von Nodes erfolgt über die API des TYPO3-Content-Repository. Auf Basis einer NodeTemplate-Instanz können bequem mehrere Nodes des gleichen Typs angelegt werden. Die Quelldaten wurden per PDO direkt aus der TYPO3-CMS-Datenbank ausgelesen.

Anlegen von Nodes auf Basis eines NodeTemplates

// create node template
$articleNodeTemplate = new NodeTemplate();
$articleNodeTemplate->setNodeType($this->nodeTypeManager->getNodeType('Journal.Commons:Article'));

// loop over articles to be imported
foreach ($articlesArray as $articleArray) {
	$articleNodeTemplate->setProperty('title', trim($articleArray['title']));
	// create actual article node
	$articleNode = $categoryNode->createNodeFromTemplate($this->articleNodeTemplate);
	// set properties
	$articleNode->setHidden((boolean)$articleArray['hidden']);
	$articleNode->setProperty('author', $this-	>createContributorPageIfNecessary($articleArray['author']));
	$articleNode->setProperty('tags', $this->convertSearchwordsToTagReferences($searchwords));
}

Listing 2

Nachdem der Import der Artikelstruktur umgesetzt war, waren die diversen Verknüpfungen an der Reihe. Jeder Autor bekam automatisch einen Contributor-Node. Die Verknüpfung von Autoren und Artikeln in beide Richtungen ergab sich aus den bestehenden Daten. Auch für die Tags wurden automatisch Nodes angelegt.

Die Quelldaten lasen wir direkt aus der TYPO3-CMS-Datenbank aus. Listing 3 zeigt die entsprechende Methode zur Migration der Artikelinhalte.

Auslesen des Artikel-Inhalts

public function getArticleContent($articleUid) {
	$sql = sprintf('SELECT
		uid, hidden, CType, header, header_layout, bodytext, tx_templavoila_to,
		image, imageorient, imagecaption, imagecols, image_link, altText, titleText,
		pi_flexform
		FROM tt_content
		WHERE deleted = 0 AND irre_parenttable = \'tx_t3blog_post\' AND irre_parentid = %u
		ORDER BY sorting ASC', $articleUid);
	$statement = $this->connection->prepare($sql);
	$statement->execute();

	return $statement->fetchAll(\PDO::FETCH_ASSOC);
}

Listing 3

Eine besondere Herausforderung waren die Links der Artikel untereinander. Da der Import aufgrund des Zeit- und Speicherbedarfs in einzelne Batches unterteilt werden musste, ließen sich die Verknüpfungen nicht im gleichen Schritt anlegen, weil unter Umständen das Ziel eines Links noch gar nicht importiert war. Die Lösung war ein Zwischenschritt: während des Artikel-Imports schrieben wir die Zuordnung von Artikel-UID (aus T3BLOG) und UUID (aus Neos) in eine YAML-Datei. Nachdem der Artikelimport abgeschlossen war, legten wir mithilfe der Datei die Verknüpfungen an. In diese Datei wurden zudem noch RealURL-Aliase und die Pfade der neu angelegten Nodes geschrieben. Daraus entstand eine Rewrite-Map für Artikel-URLs aus dem alten System.

Beim Import war aber noch ein weiteres Problem zu lösen: das Markup der Inhalte. In den Artikeln konnten die Redakteure alle Inhaltselemente von TYPO3 nutzen, beschränkten sich in der Praxis aber nahezu vollständig auf Text und Text mit Bild. Dennoch waren recht viele Transformationen notwendig, um diese Inhalte in Neos nutzen zu können. Besonders anspruchsvoll waren dabei die bodytext-Felder und Bilder.

Migration von TYPO3 CMS zu Neos: Beim Import wurden „Text mit Bild“-Elemente in ihre Bestandteile zerlegt.

Migration von TYPO3 CMS zu Neos: Beim Import wurden „Text mit Bild“-Elemente in ihre Bestandteile zerlegt.

Im bodytext entfernten wir zahlreiche leere Tags. Alle Zeilen wurden in p-Tags eingeschlossen, sodass Neos diese beim Rendern der Seite nicht übernimmt. Zu guter Letzt parsten wir die link-Tags und setzten sie in reguläre HTML-Links um. Eine Wiederverwendung des Parser-Codes aus TYPO3 war leider durch weitreichende Abhängigkeiten nicht möglich, so dass wir einen eigenen Parser implementierten.

Die Migration der Bilder war vor allem eine taktische Aufgabe. Neos unterstützt von sich aus nur einzelne Bilder, die Darstellung mehrerer Bilder in einem Element mit den zahlreichen Möglichkeiten aus CMS ist nicht möglich. Da im neuen Design der Website jedoch nur noch einzelne Bilder oder Carousel-Slideshows vorgesehen waren, konnte eine gute Lösung gefunden werden. Elemente aus mehreren Bildern transformierten wir in ein von uns definiertes Carousel-Element, einzelne Bilder übernahmen wir direkt. „Text mit Bild“-Elemente zerlegte der Importer in ihre Bestandteile, um mit Neos‘ Bordmitteln auszukommen und zugleich an Flexibilität zu gewinnen.

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

2 Kommentare
Wolfgang Wagner
Wolfgang Wagner

Die Überschrift des Artikels passt irgendwie nicht so ganz zum Inhalt, denn unter „Umzug leicht gemacht“ stelle ich mir irgendwie etwas anderes vor ;)

wmcig
wmcig

Ich bin auch davon ausgegangen, dass man in dieser Artikelreihe so gut wie alles für einen möglichen Umzug von TYPO3 CMS zu TYPO3 NEOS erfährt. Ein paar Codebeispiele von einer Agentur sind da leider zu wenig und fördern dies nicht.
Die Überschrift zu diesen Artikel sollte angepasst werden. Es ist total irreführend! Beim nächsten Mal sollte das besser gehen!!!!!