Element Types in Craft CMS 2
Element Types sind eines der zentralen Konzepte in Craft. Mit Craft 2 erklärt Pixel & Tonic erstmals ausführlich, was dahintersteckt.
Dieser Artikel ist über 12 Jahre alt. Beschriebene Funktionen und Vorgehensweisen können sich seitdem geändert haben.
One of the key innovations in Craft – make that the key innovation – is a new concept called “Element Types”. We’ve mentioned Element Types here and there, but we haven’t explained what they are yet, much less how plugins can take advantage of them. Now that Craft 2 is out, we’re finally ready to lift the curtain.
Elemente
Dateisysteme verwalten Dateien. iPhoto verwaltet Fotos. iTunes verwaltet Medien. Blog-Systeme verwalten Einträge. Ein Content-Management-System verwaltet Inhalte. Historisch bedeutete das bei den meisten CMS meist: Einträge. Zwar lassen sich auch Benutzer, Kategorien oder Dateien verwalten, doch wirklich von benutzerdefinierten Feldern oder Beziehungen profitieren meistens nur die Einträge.
Craft geht einen anderen Weg. Statt nur Einträge zu verwalten, verwaltet Craft Elemente. Alles in Craft ist ein Element: Benutzer, Dateien, Kategorien, Tags, Globals, Matrix-Blöcke und natürlich auch Einträge. Benutzerdefinierte Felder und Beziehungen stehen dabei nicht nur für Einträge oder Benutzer, sondern systemweit für alle Elemente zur Verfügung.
Der Unterschied zu WordPress wird dadurch besonders deutlich. Dort hat jeder Content-Typ seine eigene API: Posts nutzen WP_Query, Benutzer WP_User_Query, Taxonomien get_terms(). Jede Funktion hat eigene Parameter, Besonderheiten und auch eigene Fehlerquellen. Beziehungen zwischen Typen müssen manuell über Meta-Felder und IDs gepflegt werden. Craft geht stattdessen von einem Grundsatz aus: Alles ist ein Element. Es gibt eine einheitliche Query-API, eine Relations-API und ein zentrales Feldsystem.
Die sieben Element Types in Craft 2
Craft 2 bringt sieben integrierte Element Types mit:
- Entry – der Hauptinhalt, organisiert in Sections (Singles, Channels, Structures)
- Asset – Dateien und Medien, organisiert in Asset Sources
- User – Benutzerkonten
- Category – Taxonomie, organisiert in Category Groups
- Tag – leichtgewichtige Tags, organisiert in Tag Groups
- Global Set – siteweite Inhalte wie Footer oder Einstellungen
- Matrix Block – Inhaltsblöcke innerhalb von Matrix-Feldern
Alle sieben teilen dieselben Grundfunktionen: benutzerdefinierte Felder, Beziehungen, Suche, Statusverwaltung und Lokalisierung. Das bildet den Kern des Konzepts.
Element Types
Element Types sind die Klassen, mit denen die verschiedenen Elemente in Craft eindeutig identifiziert werden. Es gibt beispielsweise einen UserElementType, einen AssetElementType, einen EntryElementType und so weiter. Wer bereits einen benutzerdefinierten Feldtyp für Craft entwickelt hat, wird dieses Prinzip sofort wiedererkennen: die Beziehung zwischen einem Element und seinem Element Type entspricht der Beziehung zwischen einem Feld und seinem Feldtyp.
In Templates lassen sich alle Element Types über eine einheitliche Query-API abfragen:
{% set entries = craft.entries.section('articles').limit(10).find() %}
{% set assets = craft.assets.kind('image').find() %}
{% set users = craft.users.group('authors').find() %}
Jeder Element Type definiert, welche Felder durchsuchbar sind, nach welchen Attributen sortiert werden kann, wie die Elemente in der Tabellenansicht dargestellt werden und wie sie gespeichert werden.
Plugin-Entwickler profitieren
Es hat eine Weile gedauert, bis die Element Type API ausgereift genug war, um sie für Plugins zu öffnen. Mit Craft 2 ist es nun so weit. Plugin-Entwickler können ab sofort eigene Element Types erstellen und damit neue Arten von Inhalten einführen, die sich nahtlos in Craft integrieren. Wer beispielsweise ein Event-System benötigt, schreibt einen eigenen Element Type und erhält damit Suche, Beziehungen, benutzerdefinierte Felder und eine Verwaltungsansicht im Control Panel quasi kostenlos dazu.
Pixel & Tonic hat die API bereits einigen Plugin-Entwicklern in einer privaten Demo vorgestellt. In zwei Wochen folgt zudem ein dreistündiger Workshop zur Entwicklung von Element Types bei Peers.
Fazit
Element Types sind mehr als ein technisches Detail. Sie prägen den gesamten Umgang mit dem System.
Einheitlichkeit statt Sonderfälle. Ein Feldsystem, eine Query-API und eine Relations-API für alle Elemente. Wer verstanden hat, wie Entries funktionieren, versteht damit auch automatisch Assets, Users und Categories. Es gibt kein „Custom Fields gehen nur bei Entries".
Erweiterbarkeit für Plugin-Entwickler. Ein eigener Element Type erhält Suche, Beziehungen, Custom Fields, eine CP-Ansicht und Lokalisierung quasi automatisch. Das erklärt, warum das Craft-Plugin-Ökosystem trotz einer vergleichsweise kleinen Community Plugins hervorbringt, die in ihrer Funktionstiefe mit deutlich größeren Plattformen mithalten können.
Zukunftssicherheit im Datenmodell. Da alle Elemente denselben Regeln folgen, konnte Pixel & Tonic in späteren Versionen das gesamte System auf einmal verbessern, etwa die Query-Performance, das Eager Loading und weitere Funktionen, ohne jeden einzelnen Element Type separat anpassen zu müssen.
Ohne Element Types wäre Craft nur ein weiteres CMS. Mit ihnen ergibt das gesamte System Sinn.