Änderungen und Features von MM 2.4

Folgend eine Übersicht der Änderungen und Features zu MetaModels 2.4, die durch das „early adopter Programm“ ermöglicht wurden - mehr dazu unter Fundraising auf der MM Webseite.

Für einen Check nach einem Upgrade zu MM 2.4 sind unten weitere Hinweise.

Bemerkung

Zum Anlegen von mm_*-Tabellen und Spalten der Attribute muss eine DB-Migration durchgeführt werden - siehe Schemamanager.
Nach Anlegen oder Änderungen der Bezeichnungen von Models, Attributen oder Legenden bitte den (Translation-)-Cache löschen - siehe Symfony-Translation.

Allgemein und Core

Mit Contao 5 kommt eine Version von Symfony ins Spiel und wir haben die Mindestversion von PHP auf 8.2 gestellt. Bei Contao 5 ist das leicht abgeänderte Backend mit der vollen Breite und neuen Icons am Auffälligsten. Die neuen Angaben zur Breite eines Widgets in der Eingabemaske wie „w25“ oder „w66“ können natürlich auch in MM verwendet werden. MetaModels unterstützt das „Dunkle Design“ (Dark-Mode) im Backend inkl. Iconvarianten mit Suffix „–dark“.

Bei eigenen Anpassungen bzw. Programmierungen sind einige Dinge zu beachten, die sich in Contao geändert haben wie z. B. die Deprecations aus C 4.13 bzw. C 5, absolute Pfadangaben für Dateien wie Icons oder CSS/JS oder vollständige Angaben beim Aufruf von Methoden z. B. \Contao\Input::get('myvariable').

Bei den Bildgrößen gibt es verschiedene Standardvorgaben wie „Mitte-Mitte“ nicht mehr - dafür eigene Bildgrößen definieren und z. B. bei den Rendersettings anpassen.

Die Verlinkungen im CE und Modul zu Model, Filter usw. öffnen nun in einem separaten Tab im Browser.

Der MM-Core unterstützt nun ein individuelles „route_prefix“, um das Backend statt mit contao/ z. B. mit admin/ aufrufen zu können.

Bei den Frontendausgaben wurde für sichere JavaScripts und Inline-Styles der Support für die Content Security Policy (CSP) eingebaut - mehr dazu im Newsletter vom November 2025

Für den TinyMCE kann man einen Link-Picker auf Detailseiten konfigurieren - siehe jumpTo-Picker (Detailseite) für den TinyMCE und als dcaPicker.

Für die Suche der verwendeten Dateien wird die Erweiterung „Contao File Usage“ unterstützt - siehe File-Usage Integration.

Mehrsprachigkeit

Mit MM 2.4 sind einige Designvorgaben zur Mehrsprachigkeit konsequenter umgesetzt bzw. wurden korrigiert - hier mehr zum Aufbau der Mehrsprachigkeit in MetaModels

Zu den Anpassungen gehört die strikte Ausgabe der Inhalte der Fallbacksprache, sofern die zu übersetzende Sprache keine eigenen Inhalte hat - das gilt z. B. auch für Attribute Datei und Inhalte eines Artikels.

Dieses Vorgehen kann über die Option „Fallback-Modus deaktivieren“ ausgesetzt werden - z. B. steht diese Option bei dem Attribut Übersetzte Checkbox zur Verfügung. Das bedeutet, dass ein Wert für eine Sprache gespeichert wird, auch wenn dieser gleich dem Fallbackwert ist.

Werden mehrsprachige Datensätze kopiert, werden nun neben der Fallbacksprache auch alle weiteren Sprachen mit kopiert.

Verbessert wurde die Anzeige im Backend welche Sprache die Fallbacksprache ist. Wenn in der Eingabemaske von der Fallbacksprache auf die zu übersetzende Sprache wechselt, wird nun bei den Attributen angezeigt, welche Inhalte ausgegeben werden - also ob img_fallback oder img_translated.

Für Übersetzungen ist zum XLIFF-Ex-Import ein Übersetzungstool für DeepL&Co. hinzu gekommen.

Attribute

  • Checkbox
    • Unterstützung des Dark-Mode bei den Icons - dazu eine weitere Icon-Datei mit dem Suffix „–dark“ anlegen

    • Template mm_attr_checkbox_icon.html5 für Anzeige im Backend als ☑ bzw. ☐ in der Listenansicht

  • Cowegis Marker (NEU)
  • Datei
    • Anpassung der Templates für die Ausgabe title, alt, caption aus Knoten metafile

    • zwei neue Templates mm_attr_file_contao_image.html5 für die Standardausgabe wie in Contao, was auch die Ausgabe der JSON-LD-Daten beinhaltet sowie mm_attr_file_contao_image_ofpage.html5 für die Standardausgabe wie in Contao sowie wird das erste Bild als primaryImageOfPage ausgegeben; siehe auch SEO-Anpassungen

  • Einzelauswahl [select]
    • Support für Einsatz mit Popup-Widget in einer Kindtabelle

  • Inhalt eines Artikels
    • Support für Einsatz in einer Kindtabelle

    • Änderung der Templates - Übergabe eines Arrays mit Content-Objekten

  • Kombinierte Werte
    • Option „Immer speichern“ (alwaysSave) aktiviert - speichern auch ohne Werteänderung

  • Land
    • Änderung der Länderkürzel in Großbuchstaben

  • Langtext
  • Mehrfachauswahl [tags]
    • Support für Einsatz in einer Kindtabelle

  • Tabelle-Multi (MCW)
    • Support für 'inputType' => 'fileTree' mit 'multiple' => 'true' inkl. Verschieben von Dateien

  • Text
  • Token (NEU)
    • erzeugt beim erstmaligen Speichern eines Datensatzes eine kryptographisch zufällige, unveränderliche Zeichenfolge (Token) - siehe Token (ab MM 2.4)

  • Übersetzter Alias
    • Spalte langcode auf varchar(64)

  • Übersetzte Checkbox
    • Unterstützung des Dark-Mode bei den Icons - dazu eine weitere Icon-Datei mit dem Suffix „–dark“ anlegen

    • Template mm_attr_translatedcheckbox_icon.html5 für Anzeige im Backend als ☑ bzw. ☐ in der Listenansicht

    • Spalte langcode auf varchar(64)

    • Option „Fallback-Modus deaktivieren“ zum Speichern eines Wertes für eine Sprache, auch wenn dieser gleich dem Fallbackwert ist.

  • Übersetzte Datei
    • Anpassung der Templates für die Ausgabe title, alt, caption aus Knoten metafile

    • zwei neue Templates mm_attr_file_contao_image.html5 für die Standardausgabe wie in Contao, was auch die Ausgabe der JSON-LD-Daten beinhaltet sowie mm_attr_file_contao_image_ofpage.html5 für die Standardausgabe wie in Contao sowie wird das erste Bild als primaryImageOfPage ausgegeben; siehe auch SEO-Anpassungen

    • Spalte langcode auf varchar(64)

  • Übersetzter Inhalt eines Artikels
    • Support für Einsatz in einer Kindtabelle

    • Spalte mm_lang auf varchar(64)

    • Änderung der Templates - Übergabe eines Arrays mit Content-Objekten

  • Übersetzte Kombinierte Werte
    • Option „Immer speichern“ (alwaysSave) aktiviert - speichern auch ohne Werteänderung

  • Übersetzter Langtext
  • Übersetzte Tabelle-Multi (MCW)
    • Support für 'inputType' => 'fileTree' mit 'multiple' => 'true' inkl. Verschieben von Dateien

    • Spalte langcode auf varchar(64)

  • Übersetzte Tabelle-Text
    • Spalte langcode auf varchar(64)

  • Übersetzter Text
  • Übersetzte URL
    • Spaltenname von language auf langcode geändert - Migration vorhanden

    • Spalte langcode auf varchar(64)

Filter

Alle Filterregeln, die eine URL erzeugen haben eine neue Einstellung („URL-Typ für den Parameter“) ob die Parameter als Slug- oder als GET-Parameter in der URL erscheinen sollen. Aus Gründen der Rückwärtskompatibilität ist die Einstellung nach einem Upgrade „Slug oder GET“ - diese Einstellung ist deprecated und sollte für jede entsprechende Filterregel entweder auf Slug ODER auf GET eingestellt werden. Mehr dazu bei den SEO-Tipps

  • Einfache Abfrage
    • ist die Option „Statischer Parameter“ gesetzt, kann neben dem CE-/Modul MM-Liste auch in MM-Filter für die Filterregel ein Wert als Preset ausgewählt werden - siehe Ticket #345

  • Expression-Regel (Neu)
  • Filter-by-related
    • ersetzt den Filter „Filter-Parent“

    • die Filterregel ermöglicht es, Items nach Eigenschaften eines verknüpften (Relation) MetaModels zu filtern. Als Relationen ist eine Einzelauswahl (Select) oder Kindtabelle möglich.

  • Umkreissuche (Perimeterseach)
    • die Map-Provider GoogleMaps und OpenStreetMaps benötigen beim Aufruf als Parameter ein HttpClientInterface

  • Wert von/bis für ein Attribut (from-to)
    • Min- und Max-Werte stehen im Template als optionsMin und optionsMax zur Verfügung

    • neues Template mit Typ date als mm_filteritem_datepicker.html5

  • Wert von/bis für zwei Attribute (range)
    • Min- und Max-Werte stehen im Template als optionsMin und optionsMax zur Verfügung

    • neues Template mit Typ date als mm_filteritem_datepicker.html5

  • Volltextsuche mit „Loupe“
    • Mit der neuen Filterregel wird ein Index über ausgewählte Attribute erstellt, über den anschließend gesucht werden kann - siehe Loupe

  • Expression-Regel** (Neu)
    • damit kann die Ausführung weiterer Filterregeln an Bedingungen geknüpft werden; mehr dazu bei der Filterregel Expression

Frontend-Editing (FEE)

  • Änderung des Templates form_textfield_multiple zu form_text_multiple in „FormTextFieldMultipleBundle“ (Angleichung an Contao 5)

  • bei den Einstellungen der Eingabemaske für einen Datei-Upload werden bei den Widget-Modi je nach aktivierter Einstellung „Mehrfachbearbeitung“ nur noch die passenden Einstellungen für Einzel- oder Mehrfachupload angezeigt - bei einer Umstellung beim Attribut muss das aber entsprechend beim Upload auch umgestellt werden

  • die Anpassung des Zielverzeichnisses oder Dateinamen mit dem Insert-Tag {{post::<attribute-spaltenname>}} ist nicht mehr möglich, da dieser Tag in Contao 5 nicht mehr vorhanden ist - dafür kann nun ein Simple-Token eingesetzt werden als ##post::<attribute-spaltenname>## - siehe FEE

  • Unterstützung von mehrsprachigen MetaModels - in der FE-Maske gib es einen Sprachenwechsler wie im BE; siehe FEE

  • Auswahlmöglichkeit der Form-Templates für die Eingabemaske (FEE) bei allen übersetzten Attributen

  • Support für die Content Security Policy (CSP)

Known-Issues

  • bei Umschaltung zu/vom Debugmodus im BE per Button stimmt die Referenzseite nicht mehr und man muss die Seite erneut ansteuern - z. B. mit „zurück“ im Browser und Reload der Seite
    Contao bietet aktuell keine Möglichkeit, an der Stelle den Referer zu beeinflussen

Check für Upgrade auf MM 2.4

Grundsätzlich ist ein Upgrade innerhalb des MM 2.x-Zweiges problemlos möglich und ggf. notwendige Anpassungen an Bezeichnungen und DB-Änderungen werden über Migrationen abgefangen. Es gibt aber ein paar Sachen, die damit nicht oder nur sehr schwer abzufangen sind. Aus dem Grund sollten bei der Umstellungen auf MM 2.4 die folgenden Punkte im Blick behalten werden:

  • bitte alle Hinweise aus MM 2.3 und MM 2.2 beachten

  • Änderung der Templates vom DC_General

  • Änderung des Templates form_textfield_multiple zu form_text_multiple in „FormTextFieldMultipleBundle“ (FEE)

  • Änderung der Templates bei Datei und übersetzte Datei für Ausgabe der Metadaten

  • Check der eigenen Programmierungen an Contao 5 (s.o.)

  • bei FEE mit Dateiupload, Widget-Modus bei Einstellungen des Atttributs in der Eingabemaske prüfen (s. o.)

  • bei FFE und Dateiupload: prüfen ob Insert-Tag {{post::*}} verwendet wurde und anpassen (s. o.)

  • bei FEE und Link zum Löschen eines Items die Änderungen durch den CSP-Support beachten und ggf. CSS anpassen (S. o.)

  • für Dark-Mode ggf. weitere Varianten der eigenen Icons mit Suffix „–dark“ anlegen - z. B. zu flag_enabled.svg und flag_disabled.svg ein flag_enabled–dark.svg und flag_disabled–dark.svg - siehe EAP-News Oktober II 2024

  • bei Attribut Land wurden die Schreibweisen der Länderkürzel auf Großbuchstaben wie in Contao geändert - vorhandene Daten werden mit einer Migration angepasst; ggf. eigene Prüfungen oder Speicherungen anpassen

  • bei Attribut übersetzte URL wurde der Name der Spalte für die Sprachkürzel auf langcode geändert - ggf. eigene SQL-Abfragen oder Templateausgaben anpassen

  • Auswahl der Bildgrößen prüfen - verschiedene Standardvorgaben wie „Mitte-Mitte“ gibt es nicht mehr

  • wenn Option „Statischer Parameter“ in Filterregel gesetzt ist, dann in MM-Liste den Standardwert bei „Filterwert für Attribut“ prüfen - sofern keine Items in der Liste ausgegeben werden auf „ohne Datenwert [null]“ stellen

  • bei eigenen Abfragen für die Umkreissuche bzw. Ermittlung der Geokoordinaten, bei dem Map-Provider ein HttpClientInterface als Parameter mit übergeben

  • bei Filterregeln die Einstellung „URL-Typ für den Parameter“ prüfen und auf Slug ODER GET einstellen

  • neue Templates für Inhalt eines Artikels (auch mehrsprachig) mit Übergabe eines Arrays mit Content-Objekten

  • Ausgabe der Inhalte der Fallbacksprache, wenn keine übersetzten Inhalte vorliegen

  • bei Übersetzte Checkbox die Option „Fallback-Modus deaktivieren“ (Attributseinstellungen) setzen für Beibehaltung der bisherigen Filterungen - Attribute ermitteln:

1SELECT mm.name AS metamodel, a.colname
2FROM `tl_metamodel_attribute` AS a
3JOIN `tl_metamodel` AS mm ON mm.id = a.pid
4WHERE a.type = 'translatedcheckbox'
5ORDER BY mm.name, a.colname;

Re-Finanzierung

Siehe auch

Für eine Re-Finanzierung der umfangreichen Arbeiten, bittet das MM-Team um finanzielle Zuwendung. Als Richtgröße sollte der Umfang des zu realisierenden Projektes genommen werden und etwa 10% einkalkuliert werden - aufgrund der Erfahrung der letzten Zuwendungen, sind das Beträge zwischen 100€ und 500€ (Netto) - eine Rechnung inkl. MwSt wird natürlich immer ausgestellt. Mehr…