21. 08. 2014, 17:53

Nach dem Update von TYPO3 6.1 auf 6.2 funktioniert die Anzeige von Bildern aus dem Feld 'pages.media' nicht mehr: Während auf einer Seite mit Standardsprache („Hauptseite“) das Bild noch angezeigt wird, gibt es auf anderssprachigen Seiten kein Bild. Bei der Migration werden die Daten nicht korrekt verarbeitet, möglicherweise liegt hier ein Bug vor. (Hinweis: Hauptseite und übersetzte Seiten sollen alle dasselbe Bild zeigen, das Bild selbst wird also nicht „übersetzt“!)

Wenn jedoch nach dem Update eine Übersetzung vorgenommen wird, funktioniert die Anzeige des Bildes auch auf der übersetzten Seite. Der Fehler liegt also nur in der Migration und nicht in der FAL-Funktionalität selbst.

Es sieht so aus, als wenn sich bis Version 6.1 die Hauptseite (Tabelle 'pages') und die übersetzten Seiten (Tabelle 'pages_language_overlay') einen Eintrag in der Tabelle 'sys_file_reference' geteilt hätten. In 6.2 muss aber wohl die Hauptseite und jede Übersetzung einen Eintrag in 'sys_file_reference' haben. Dieser Eintrag referenziert dann immer denselben Satz in der Tabelle 'sys_file', die schließlich die Bilddatei spezifiziert. Bei der Migration wird versäumt, für alle übersetzten Seiten einen 'sys_file_reference'-Eintrag vorzunehmen.

Die folgende SQL-Anweisung macht das nachträglich: Für jedes nicht gelöschte Language-Overlay wird in der 'sys_file_reference' ein Eintrag neu angelegt. Die Felder mit Texten, die wieder übersetzt werden müssten ('description', 'alternative'…), werden dabei nicht gesetzt; sie müssen ggf. manuell nachgepflegt werden!

Achtung – Vor Ausführung Datenbank-Backup anlegen! Und eigentlich auch nur ausführen, wenn du erfahren im Umgang mit Datenbanken bist, du solltest die Anweisung verstehen.

Ich freu mich über eure Kommentare und Verbesserungsvorschläge! Danke schon mal dafür!

  1. -- Zuerst alle bisherigen Referenzen löschen (falls diese Anweisung mehrmals ausgeführt wird):
  2. DELETE FROM sys_file_reference WHERE tablenames = 'pages_language_overlay';
  3.  
  4. -- Dann Einträge in sys_file-reference vornehmen:
  5. INSERT sys_file_reference (
  6. pid,
  7. tstamp,
  8. crdate,
  9. cruser_id,
  10. sorting,
  11. deleted,
  12. hidden,
  13. sys_language_uid,
  14. l10n_parent,
  15. uid_local,
  16. uid_foreign,
  17. tablenames,
  18. fieldname,
  19. sorting_foreign,
  20. table_local,
  21. link
  22. )
  23. SELECT
  24. r.uid_foreign AS pid,
  25. UNIX_TIMESTAMP() AS tstamp,
  26. UNIX_TIMESTAMP() AS crdate,
  27. 3 AS cruser_id,
  28. r.sorting AS sorting,
  29. o.deleted AS deleted,
  30. o.hidden AS hidden,
  31. o.sys_language_uid AS sys_language_uid,
  32. r.uid AS l10n_parent, -- Ref. auf sys_file_reference-Satz f. Standardsprache
  33. r.uid_local AS uid_local, -- Referenz auf sys_file
  34. o.uid AS uid_foreign, -- Referenz auf pages_language_overlay
  35. 'pages_language_overlay' AS tablenames, -- referenzierende Tabelle
  36. 'media' AS fieldname,
  37. 1 AS sorting_foreign,
  38. 'sys_file' AS table_local, -- referenzierte Tabelle
  39. r.link AS link
  40. FROM pages_language_overlay o
  41. JOIN pages p ON p.uid = o.pid
  42. JOIN sys_file_reference r ON r.uid_foreign = p.uid AND r.tablenames = 'pages'
  43. WHERE o.deleted = 0 AND r.deleted = 0