Update von Typo3 8.7 auf Typo3 10.4

Aus Debacher-Wiki
Wechseln zu:Navigation, Suche

Neben dem klassischen Weg über den Update-Manager gibt es noch einen weiteren Weg um ein vorhandenes System zu aktualisieren, welches auf dem Nettemplate aufsetzt.

Update über .t3d

Für diesen Weg habe ich folgende Schritte unternommen:

  • Auf der alten Seite die Datei tx_impexp_presets.sql importiert in die leere Datenbanktabelle tx_impexp_presets (Die BenutzerID in dem Datensatz muss diejenige des Benutzers für den Export sein, hier 1).
  • Damit einen Export im .t3d Format, das xml-Format scheint hier nicht zu funktionieren (Speicher Probleme beim Import)

Bildschirmfoto von 2020-11-15 21-45-18.png

  • Von den Fehlermeldungen nicht irritieren lassen, sondern unter Datei&Voreinstellungen die Einstellung auswählen und laden

Bildschirmfoto von 2020-11-15 21-49-22.png

  • Weiter unten kann man einen Namen angeben und die Datei dann sichern

Bildschirmfoto von 2020-11-15 21-52-50.png

  • Dann ein neues Typo3-System angelegt ohne Seitenbaum. Dazu habe ich das Paket nettemplate_2.0.5.zip installiert (.zip Upload), aus dem ich vorher die Datei data.xml im Verzeichnis Installation entfernt habe
  • Die .t3d Datei ist meistens so groß, dass sie nicht im Browser hochgeladen werden kann, ich habe sie dann direkt in das Verzeichnis fileadmin/user_upload/_temp_/importexport/ kopiert
  • Auf dem neuen System habe ich diese Datei dann importiert

Bildschirmfoto von 2020-11-15 14-21-46.png

  • * Ähnlich ist es mit den Dateien für Formulare. Die liegen jetzt im Verzeichnis fileadmin/form_definitions/ auch da einmal per Hand kopiert.
  • Unter DB-Überprüfung den Referenz-Index aktualisieren
  • Dann noch die Seite Ausgangsseite zum Ordner machen und die Slugs aller direkten Unterseiten aktualisieren, die Weiterleitungen kann man jeweils entfernen

Wenn jetzt niemand Veränderungen an den Templates und Typoscript Dateien vorgenommen hat, dann sollte damit das Update erledigt sein.

  • Veränderte Template-Dateien lassen sich leicht finden. Beim Import werden die vorhandenen Dateien nicht überschieben, sondern die im t3d vorhandenen geänderten Dateien werden mit einem _01 versehen, sind also leicht zu finden. Soweit es Dateien aus dem Template betrifft können die Veränderungen problemlos übernommen werden. Dies Dateien kann man aufspüren mittels
cd fileadmin
find . -name *_01\.*
  • Die Dateien mit dem _01 im Namen stammen von der alten Installation und können in der Regel direkt übernommen werden.

Vorteile dieses Verfahren

  • alle nicht benutzten Dateien werden sich nicht im neuen System anfinden

Nachteile des Verfahrens

  • Bei großem Datenvolumen kann es Probleme mit dem Speicher bzw. der Ausführungszeit geben. Dann funktioniert eventuell nur der klassische Weg.
  • Wenn nach dem Start des Exports der Bereich einfach nur grau wird, dann langt der Speicher nicht. Man braucht in der Regel mehr Haupt-Speicher, als das Festplattenvolumen der Seite.

Schwierigkeiten

Bei umfangreicheren und auch älteren Webseiten schlägt der Export von der Seite 0 oft fehl. In diesem Fall greife ich zum Export über die Ausgangsseite. Dann sind aber eine Reihe von Datenbank-Tebellen direkt zu manipulieren:

  • sys_file
  • sys_file_metadata
  • be_groups
  • be_users

Und die Grafikdateien werden auch nicht kopiert, das muss man dann händisch machen.

Folgende Schritte:

  • Ausgangssystem aufräumen, vor allem die Datenbank aktualisieren
  • T3D-Export ausgehend von der Ausgangsseite, alle weiteren Seiten sind Kindseiten, ich übernehme folgende Tabellen
    • be_groups
    • be_users
    • sys_file
    • sys_file_metadata
    • sys_file_filemounts
    • sys_file*
    • sys_language
    • sys_news*
    • backend_layout
    • sys_domain
    • sys_template
    • tt_content
    • index_conf
    • tx_gridelements
  • eventuell noch News-Seite extra importieren
  • im Zielsystem nettemplate installieren ohne den Seitenbaum
  • im Zielsystem root-Seite erstellen und konfigurieren
  • site-Einstellungen vornehmen
  • t3d Dateien auf das neue System kopieren
  • von der root-Seite ausgehend importieren (uid erzwingen)
  • root-Templates aktivieren
  • es fehlen jetzt die Bilder, die vom alten auf das neue System kopieren (hoffentlich eine sinnvolle Struktur)
  • auf dem Ausgangssystem folgende Datenbanktabellen exportieren:
    • sys_file
    • sys_file_metadata
    • be_groups
    • be_users
  • auf dem Zielsystem in dieser Reihenfolge in die richtige Tabelle importieren dabei darauf achten:
    • die Importdateien stehen in den sys_file Tabellen (1 bzw. zwei), dort löschen
    • tauchen beim Import Meldungen über unbekannte Spalten auf, diese in der Zieldatenbank Ergänzen (t3ver_id: int(11), t3ver_label: varchar(30) )
  • nach dem Import die Datenbank jeweils wieder prüfen und korrigieren lassen.


Konfiguration der Backend-Anmeldung

Manche Betreiber mochte auch das Formular für die Anmeldung (https://<meine domain>/typo3) gestalten. Das geht aktuell über Einstellungen -> Extension Konfiguration -> backend :

Bildschirmfoto von 2020-11-28 21-05-05.png


Anpassungen an fluid_styled_content

An mehreren Stellen ha mich gestört, dass HTML-Elemente nicht gerendert werden, z.B.

  • in Bildunterschriften
  • Tabellen

Es gibt dafür eine einfache Lösung.

Man erweitert des Typoscript, indem man an die setup.txt folgende Zeile anhängt:

lib.contentElement.partialRootPaths.200 = {$resDir}/Private/Partials/

Damit sagt man, das Fluid Partials zuerst im angegeben Verzeichnis sichen soll. Dann kopiert man das Partial, mit dem man nicht zufrieden ist dorthin

cd fileadmin/nettemplate/Resources/Private/Partials
cp -a ../../../../../typo3/sysext/fluid_styled_content/Resources/Private/Partials/Table/ .

oder dann

cp -a ../../../../../typo3/sysext/fluid_styled_content/Resources/Private/Partials/Media/ .

Dann ersetzt man in der Datei

Columns.html

bzw.

Type/Image.html

Zeilen der Art

 {cell -> f:format.nl2br()}

durch

   <f:format.htmlentitiesDecode>{cell}</f:format.htmlentitiesDecode>

Bzw.

 {file.description -> f:format.nl2br()}

durch

   <f:format.htmlentitiesDecode>{file.description}</f:format.htmlentitiesDecode>


Conditions

Bisher habe ich folgendermaßen abgefragt, ob ein Benutzer im backend angemeldet ist.

[globalVar = TSFE : beUserLogin > 0] 

Das funktioniert nicht mehr.

Mit Typo3 9 muss man stattdessen schreiben

[getTSFE().isBackendUserLoggedIn()]

Seit Typo3 10 geht es übersichtlicher mit

[backend.user.isLoggedIn]

Das bietet noch mehr Möglichkeiten

[backend.user.isAdmin]
[backend.user.userId == 2]

Merkwürdigkeiten in Fluid

Etwas wie

<f:if condition="({Item.children} && {Item.active})">
  <f:render section="submenu" arguments="{submenu: Item.children}"/>
</f:if>

funktioniert leider nicht. Man kann den Umweg wählen:

 <f:if condition="{Item.children}">
    <f:if condition="{Item.active}">
      <f:render section="submenu" arguments="{submenu: Item.children}"/>
    </f:if>
 </f:if>

oder folgende Krücke (noch nicht getestet) über einen Array-Vergleich

<f:if condition="{0:Item.children} = {0:'1'} && {0:Item.active} = {0:'1'}">
  <f:render section="submenu" arguments="{submenu: Item.children}"/>
</f:if>

oder eventuell

<f:if condition="{0:Item.children,1:Item.active} == {0:'1',1:'1'}">
  <f:render section="submenu" arguments="{submenu: Item.children}"/>
</f:if>