PHP

Masterdatenmanagement mit der Plattform Pimcore

Pimcore: Datenverwaltung leicht gemacht
Keine Kommentare

Kennen Sie das Problem? Die eigene Applikation muss in den meisten Fällen nicht nur die eigene Businesslogik abbilden, sondern benötigt auch ein Backend mit Benutzerinterface zum Verwalten von Daten. Ein schönes, effizientes und gut zu bedienendes UI zu programmieren ist aber kein einfaches Unterfangen. Das Pimcore-System bietet hierzu einen interessanten Ansatz.

Welche Optionen gibt es generell, um Daten in einem Backend pflegen zu können? Der naheliegendste Ansatz besteht natürlich darin, selbst ein entsprechendes Interface vollständig zu entwickeln, dies jedoch über Scaffolding oder Form-Bundles zu vereinfachen. Oftmals ist das aber (immer noch) ein großer Aufwand und/oder führt zu Interfaces, die für Benutzer nicht gut zu bedienen sind.

Eine Alternative ist, ein bestehendes System zu verwenden. Beispielsweise kann man Contentmanagementsysteme (CMS) wie WordPress, Typo3 oder Drupal um eigene Datenstrukturen erweitern. Diese Systeme sind allerdings oft nicht sehr flexibel, was die Abbildung von komplexeren Datenstrukturen angeht. Darüber hinaus können sie meist nicht performant mit großen Datenmengen umgehen. PIM-Systeme (Product Information Management) sind hingegen gut für diese Aufgaben geeignet, allerdings nur, wenn es sich auch um reine Produktdaten handelt. Im Open-Source-Bereich ist die Auswahl an verfügbaren Systemen auch noch sehr überschaubar; Akeneo ist hier ein populäres Beispiel.

Was aber tun, wenn die eigenen Datenstrukturen komplexer werden?

Hier kommt Pimcore ins Spiel. Wie der Name schon sagt, war Pimcore ursprünglich auch für die Verwaltung von Produktdaten gedacht, kann aber durch seine äußerst flexiblen Datenstrukturen quasi beliebige Nutzungsszenarien bedienen – damit geht Pimcore weit über PIM hinaus. Es handelt sich um ein Master-Data-Management-System, kurz MDM.

Als Open-Source-(GPLv3-)Projekt ist es auf GitHub verfügbar und wird einfach über Composer und Packagist installiert:

COMPOSER_MEMORY_LIMIT=3G composer create-project pimcore/skeleton my-project

Direkt nach der Installation auf einem Webserver kann man das Benutzerinterface über einen Browser aufrufen. Das GUI basiert auf dem Sencha-ExtJS6-Toolkit und unterstützt damit viele komfortable Interaktionsmöglichkeiten – insbesondere Drag and Drop von Daten ist überall möglich.

Pimcore selbst versteht sich als Plattform – es ist kein „fertiges“ System, das direkt nutzbar ist – als Entwickler kann man es jedoch schnell und einfach an die eigenen Bedürfnisse anpassen.
Wie funktioniert die Datenverwaltung mit Pimcore nun konkret? Anstatt Datenstrukturen im Code oder per Annotations zu definieren, wie man es typischerweise mit Datenbankabstraktionslayern oder Object Relational Mappers (ORM) wie z. B. Doctrine macht, wählt Pimcore einen visuellen Ansatz. Im Pimcore Backend gibt es das Konzept der Objektklassen. Eine Objektklasse definiert sowohl das physische Datenschema in der Datenbank – Pimcore arbeitet ausschließlich mit MySQL oder MariaDB – als auch die Eingabemasken beziehungsweise Formulare für die Datenbearbeitung durch den Nutzer.

Man fügt Datenfelder und Eigenschaften der Objektklasse hinzu. Im Hintergrund verändert Pimcore dann nicht nur automatisch die Datenbankstrukturen über Datenschemamigrationen, sondern generiert auch das Backend UI für den Benutzer sowie PHP-Code, um per ORM programmatisch auf die Daten zugreifen zu können.

Dieses Feature für sich selbst genommen ist noch nicht spektakulär – was ist z. B. schon ein einfaches VARCHAR-Feld in einer Tabelle mit zugehörigem INPUT-Form-Feld? Interessant ist Pimcore deshalb, weil eine große Anzahl (über 40) zur Verfügung stehender Feld- und Datentypen die Modellierung komplexester Datenstrukturen ermöglichen. So gibt es u. a. auch attributierbare m:n-Verknüpfungsfeldtypen. Damit lassen sich z. B Strukturen wie Objektklasse 1 „Person“, Objektklasse 2 „Firma“, Relationsfeld in „Firma“: „Mitarbeiter“ mit dem zusätzlichen Attribut „Rolle: CTO“ abbilden. Auch gibt es Datenfeldtypen für Bildverknüpfungen (mit Drag and Drop sowie Upload innerhalb des Interface), Geokoordinaten oder Geoflächen (mit Google-Maps-Integration zur Datenbearbeitung) – eine Liste findet sich in Tabelle 1.

Grundsätzlicher Feldtyp Beschreibung
input, textarea, wysiwyg Bearbeitung von Texten und Strings, HTML
numeric, slider, quantityvalue Zahlenwerte
date, time, datetime Datum und Uhrzeit
select, multiselect, country, user Drop-down.Auswahlfelder, teilweise schon mit Daten
Href, multihref, objects, metadata Verknüpfungstypen für Objekte, Assets und Dokumente
block Gruppiert andere Feldtypen und erlaubt Wiederholungen
classification store Sets an Attributen, gruppierbar
table, sturctured table Tabellarische, einfache Daten
fieldcollections Listen von Attributen
image, gallery, video Spezielle Verknüpfungen zu Bildern und Videos, inkl. Metadaten
localized fields Gruppiert andere Felder für Mehrsprachigkeit
geographic Geokoordinaten, Flächen

Tabelle 1: Pimcore-Feld-/Datentypen

In dem visuellen Editor zur Objektklassendefinition kann man aber nicht nur die Datenstruktur, sondern auch das Layout der Bearbeitungsformulare festlegen. Auch hierzu stellt Pimcore eine Reihe an typischen Containern und visuellen Gestaltungsmöglichkeiten wie Panels, Akkordeons oder Tablayouts bereit. Felder und Container lassen sich nebeneinander platzieren oder ineinander verschachteln. Die Abbildungen 1 und 2 zeigen eine einfache Objektklasse für Blogartikel.

Abb. 1: Visuelle Datenstrukturdefinition

 

Abb. 2: Einfaches Bearbeitungsformular

Zu einem Datenbankschema lassen sich jetzt mehrere Bearbeitungsformulare anlegen, um z. B. unterschiedlichen Nutzern und Rollen verschiedene Ansichten und Berechtigungen auf Feldebene zur Bearbeitung zu ermöglichen – Details hierzu finden sich in der Pimcore-Dokumentation unter dem Stichwort „Custom Views“.

Jeder Datensatz, also jede Instanz einer Objektklasse, wird von Pimcore in der MySQL-Datenbank gespeichert. Zur Organisation und Verwaltung setzt man für jeden Eintrag einen symbolischen Namen als Schlüssel (Key). Weiterhin kennt Pimcore eine hierarchische Beziehung zwischen den Datensätzen, mittels derer sich Baumstrukturen direkt mit den Daten- oder aber auch über virtuelle Verzeichnisse abbilden lassen (Abb. 3).

Abb. 3: Baumstruktur

Abb. 3: Baumstruktur

Eine weitere große Stärke von Pimcore ist die Möglichkeit, Varianten von Datensätzen zu verwalten. Hierzu werden automatisch die Feldeigenschaften eines Objekts an die untergeordneten Kindelemente vererbt, d. h., wenn man z. B. den Namen eines Produktobjekts verändert, ist diese Änderung sofort auch in allen Varianten sichtbar. Soll eine Variante einen anderen, spezifischen Namen bekommen, überschreibt man diesen lediglich genau dort.

Durch dieses Konzept ist Pimcore nicht auf eine bestimmte Anzahl von Dimensionen für Varianten beschränkt, wie es in anderen Systemen oft der Fall ist.

Fast selbstverständlich für ein Datenverwaltungssystem: Natürlich kennt Pimcore das Konzept der Versionierung mit beliebig vielen Schritten in die Vergangenheit und hat auch einen Papierkorb, aus dem gelöschte Objekte wiederhergestellt werden können. Als Besonderheit kann man jedoch auch Datensätze bearbeiten und die Version dann erst zu einem späteren Zeitpunkt veröffentlichen. Jede Änderung wird dem aktuellen Nutzer zugeordnet und kann visuell verglichen werden.

Kostenlos: IPC Agile Cosmos Cheat Sheet

Agile Cosmos Cheat Sheet-small-220x311In diesem Cheat-Sheet von unserem Experten René Schröder bekommen Sie einen Überblick über den Agile Cosmos und die organisatorische Struktur. Mit diesem Mind-Map haben Sie die perfekte Voraussetzung, um entweder Ihr eigenes agiles Team aufzubauen, Ihre aktuelle Organisation zu verbessern oder einen eigenen Stil von Agil zu kreieren.

Bis hierhin ist es noch nicht erforderlich, eine einzige Zeile Code zu schreiben. Auch weitere Basisfunktionen wie konfigurierbare Listenansichten, CSV Im- und Exporte sowie Hilfsmittel wie die XLIFF-Übersetzungsverwaltung funktionieren direkt aus der Standardinstallation. Sobald jedoch Drittsysteme angebunden werden sollen, bietet es sich an, eigene APIs zu entwickeln. Pimcore hat zwar ein generisches REST API, das prinzipiell auch zum Datenaustausch direkt genutzt werden kann – aufgrund der hohen Flexibilität der Datenstrukturen ist es allerdings meist einfacher, Pimcore an die externen Systeme anzupassen, anstatt in einem Drittsystem die Pimcore-REST-Schnittstelle zu implementieren.

Wie arbeitet man im Code mit den Daten?

Wie eingangs schon kurz erwähnt, generiert Pimcore selbstständig einen ORM als PHP-Code. Dieses PHP API stellt alle Funktionen bereit, um komfortabel auf die Daten zugreifen zu können.

Hier im Listing 1 ein paar einfache Beispiele – in der Pimcore Dokumentation findet man alles Weitere.

// Erstellen eines neuen Datenobjekts
$newObject = new DataObject\Myclassname();
$newObject->setKey('new-object');
$newObject->setParentId(1); // Der Speicherort, 1 ist der Root-Knoten, also '/'
$newObject->setName("New Name");
$newObject->setDescription("Some Text");
$newObject->save()

// Datenabfrage
$myObject = DataObject::getByPath("/new-object");
echo $myObject->getName();Usersession usersession = 

In den allermeisten Fällen beschränken sich die Anforderungen an die Datenverwaltung aber nicht nur auf reine Daten, sondern es müssen oft auch Binärdaten wie Bilder, PDFs oder Office-Dokumente verwaltet werden. Auch hierzu stellt Pimcore mit seinem DAM (Digital Asset Management) Funktionen bereit. So kann es, unter Zuhilfenahme von diversen Open-Source-Werkzeugen, Vorschaubilder von fast allen Dateitypen, Bildern, Dokumenten und Videos erzeugen. Diese Bildverarbeitung ist nicht nur ins System eingebaut, sondern kann vom Nutzer auch selbst als komplexer Bildverarbeitungsablauf definiert und später im Code verwendet werden. Hierzu gibt es neben den traditionellen Crop-, Size- und Farbmanipulationsmöglichkeiten auch Funktionen zur Einbettung von Wasserzeichen oder der automatischen Erkennung von Fokuspunkten (z. B. Gesichtern).

Die Assets können dann nicht nur einfach in den Datenobjekten per Drag and Drop eingefügt werden, sondern auch selbst neben den Standards IPTC und EXIF Metadaten erhalten, z. B. per Verknüpfung mit Datenobjekten.

Neben den Möglichkeiten zur Daten- und Assetverwaltung bietet Pimcore auch weitergehende Funktionen zur Ausspielung. Glücklicherweise wurde hierzu nicht das Rad neu erfunden – Pimcore basiert auf Symfony und folgt dem (M)VC-Ansatz mit Controllern, Actions und Twig-Templates.

Ein „Dokument“ in Pimcore kann eine Seite einer Webseite sein, aber auch ein Newsletter oder Teil eines Druckdokuments – typischerweise also HTML. Dokumente werden im Pimcore Backend analog zu Objekten und Assets in einer Baumstruktur angelegt. Den Dokumenten können dann spezifische Controller, Actions und Templates zugeordnet werden.

Neben der klassischen Methode, Daten in der Action-Methode des Controllers in die View, also das Template zu übergeben, kennt Pimcore das Konzept der sogenannten Editables. Hierzu fügt man Code in die Templates ein und erhält dann im Backend im Bearbeitungsmodus entsprechende Formularelemente. Wird das Dokument hingegen im Frontend gerendert, kommen die Inhalte zum Vorschein. Listing 2 zeigt auszugsweise ein simples Beispiel für ein Twig-Template mit Platzhaltern für Bild und Text.

<h1>{{ pimcore_input("titeltext") }}</h1>
<div>{{ pimcore_image("artikelbild") }}</div>

Auch bei der Dokumentenerstellung ist dies nur ein einfaches Beispiel – neben Elementen kann Pimcore auch mit Renderlets umgehen. Damit lassen sich dann per Drag and Drop ganze Objekte in ein Dokument ziehen, werden verknüpft und entsprechend der Vorgaben des Entwicklers dargestellt – immer mit den aktuellsten Daten aus dem Objekt.

Die bislang hier vorgestellten Features und Konzepte kratzen nur an der Oberfläche dessen, was mit Pimcore möglich ist, und welche Funktionalitäten sich noch in der Plattform verstecken. An dieser Stelle sei z. B. noch auf die Analytics-Integration zu Matomo/Piwik, umfassende Contentpersonalisierung und Marketingautomatisierungsfähigkeiten, CRM und ein vollständiges E-Commerce-Framework hingewiesen.

Wann sollte man Pimcore nicht verwenden?

Die vielfältigen Möglichkeiten, die Pimcore bei der Datenbearbeitung und dem PHP API liefert, haben natürlich ihren Preis: Wenn man oft Batch-Operation über Millionen von Datensätzen ausführt, dann ist es typischerweise effizienter, diese direkt auf der MySQL zu machen. Auch ist zur Einrichtung eines angepassten Systems solides PHP- und DevOps-Know-how erforderlich; die Lernkurve ist für PHP-Neulinge vermutlich doch recht steil. Darüber hinaus ist Pimcore durch die Codegenerierung von einem POSIX-Dateisystem abhängig – die Einrichtung eines skalierbaren und hochverfügbaren Betriebs auf Docker Containern, z. B. über Kubernetes ist verhältnismäßig aufwendig. Diese Eigenschaft teilt sich Pimcore allerdings mit fast allen größeren Daten- und Contentmanagementsystemen.

Fazit

Pimcore ist eine mächtige Plattform, mit der Entwickler sehr schnell und einfach grundlegende Datenstrukturen modellieren können. Es steht sofort ein umfassendes Interface für die Nutzer bereit, mit dem Daten schnell und komfortabel bearbeitet werden können. Um das System zu erweitern und an spezifische Anforderungen anzupassen, ist es nicht notwendig, komplexe neue Konzepte zu lernen. Pimcore baut auf Standards in der PHP-Entwicklung auf und gibt dem Implementierer hilfreiche Werkzeuge an die Hand. Zu guter Letzt: Mit Pimcore entwickeln macht Spaß!

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -