Einfaches Erstellen benutzerdefinierter Feldtypen mit eZ Platform 3
Das Herzstück der eZ Platform ist die Content Engine. Ihr markantestes Merkmal ist das flexible Inhaltsmodell, das aus Feldtypen aufgebaut ist. Standardmäßig erfolgt die Auslieferung mit einer Reihe von Feldtypen, die eine Vielzahl von Anwendungsfällen abdecken. Es ist jedoch auch möglich, benutzerdefinierte Feldtypen für spezielle Anforderungen zu erstellen.
Eines unserer Ziele für eZ Platform v3.0 war es, die Entwicklerfreundlichkeit zu verbessern. Dies führte zu allgemeinen API-Erweiterungen durch komfortable Methoden zum Laden häufig verwendeter Daten usw. Eine weitere große Verbesserung für Feldtypen ist die Einführung des generischen Feldtyps.
Der generische Feldtyp wurde erstellt, um die Entwicklung von benutzerdefinierten Feldtypen zu beschleunigen. Hierbei handelt es sich um eine Basis-Klasse, die von Entwicklern bei der Erstellung eigener Feldtypen erweitert werden kann. Dies reduziert den Code- und Konfigurationsaufwand, aber es ist bei der Verwendung unseres Standard-Speichersystems umstritten. In vielen Fällen hilft es, sich auf das Problem zu konzentrieren, anstatt Boilerplate-Code zu schreiben.
Zur Einhaltung allgemeiner Anforderungen ist weniger Code erforderlich
Viele benutzerdefinierte Feldtypen speichern verschiedene Werte und bieten ein benutzerdefiniertes UI-Widget zur Bearbeitung. Dies ist ein übliches Muster für Integrationsfeldtypen oder wenn zwei stark verwandte Werte in einem einzigen Feld gespeichert werden sollen (z.B. Modellnummer und Revision). Hierfür funktioniert und skaliert das Standard-Speichermodell sehr gut. Besonders, wenn es von unserer integrierten Suchmaschine indiziert wird.
Für die Speicherung komplexer Datensätze mit Beziehungen zwischen einer Reihe von Objekten ist der Standard-Speicherungsmechanismus nicht ideal. Für solche Anwendungsfälle bietet eZ Platform einen Mechanismus zur Speicherung von Feldinhalten als externe Daten. Meistens werden externe Daten in benutzerdefinierten Datenbanktabellen außerhalb unseres Standardschemas gespeichert, was bei der Erstellung und Pflege des benutzerdefinierten Feldtyps zusätzlichen Aufwand bedeutet.
Beispielsweise verwenden wir die benutzerdefinierte Speichermethode in der eZ Platform Enterprise Edition, um Daten in Feldtypen zu hinterlegen, die vom Page Builder und den Form Builder-Funktionen verwendet werden. Für diese ist der Aufwand für ein paar zusätzliche Klassen in der Codebasis im Vergleich zur Komplexität insgesamt unerheblich.
Wann sollte man sich also für den generischen Feldtyp entscheiden? Als Faustregel gilt: Ist man der Meinung, dass der Großteil der Funktionalität in dem Feldtyp in der Integration oder der Benutzeroberfläche liegt, sollte man genau damit beginnen, um sich etwas Zeit zu sparen. Wenn die Speicherkapazität zu einem begrenzenden Faktor wird, kann der Feldtyp später auf APIs auf niedrigerer Ebene umgestaltet werden.
Die zentrale Feldtyp-API ist unverändert geblieben
Es ist wichtig zu erwähnen, dass der generische Feldtyp auf den Feldtyp-APIs aufbaut. Sie funktionieren weiterhin wie bisher, so dass alle bestehenden Feldtypen nicht zusammenbrechen sollten. Tatsächlich haben wir die einfachen Kernfeldtypen wie Integer oder TextBlock nicht geändert, um die neue Basisklasse zu verwenden.
Bei einem benutzerdefinierten Feldtyp, der von eZ Platform v2.5 LTS nach v3.x migriert werden soll, empfiehlt es sich jedoch zu überprüfen, ob er vollständig mit den v3-Kern-APIs kompatibel ist (siehe Liste der Verwerfungen). Gemäß der semantischen Versionierung garantieren wir die Stabilität der APIs für den Lebenszyklus einer Hauptversion (v3.x).
Bei einer neuen Projektimplementierung, bei der benutzerdefinierte Feldtypen erstellt werden müssen, würde ich empfehlen, sich für die eZ Platform v3.1 zu entscheiden und den generischen Feldtyp zu verwenden, wenn dies dem Anwendungsfall entspricht. Wenn anschließend ein Upgrade auf v3.x LTS (das später in diesem Jahr veröffentlicht wird) durchgeführt wird, wird ebenfalls bald langfristiger Support zur Verfügung stehen und die neuesten Funktionen für die Entwicklung können genutzt werden. Das Beste aus beiden Welten.
Wie sich benutzerdefinierte Feldtypen bequemer erstellen lassen, erfahren Sie in der Dokumentation zum Erstellen eines benutzerdefinierten Feldtyps. Es steht auch eine Schritt-für-Schritt-Anleitung zur Erstellung eines 2D-Punktfeldtyps zur Verfügung.