Eigenes Shopware 6 Plugin erstellen
Shopware 6 bietet durch die Möglichkeit eigene Plugins zu programmieren, fast grenzenlose Erweiterungsmöglichkeiten. Durch Plugins können gewünschte Funktionen update sicher implementiert werden, oder das Erscheinungsbild des Shops verändert werden. In diesem Artikel zeigen wir Ihnen die Grundstruktur eines Plugins und erklären, anhand kleiner Codebeispiele, wie Sie Dateien, wie Modells und Controller erstellen, um Daten in der Datenbank zu speichern und diese auch im Frontend anzeigen zu lassen.
Grundstruktur
Zu Beginn müssen Sie die minimale Ordnerstruktur des Plugins erstellen. Plugins werden in Shopware 6 im Verzeichnis
composer.json
Jedes Plugin wird durch eine composer.json definiert. Hier legen Sie Metainformationen deines Plugins, wie Name, Version, Lizenz ab.
Die Grundinformation in einer composer.json könnten zum Beispiel so aussehen:
name
Der Name sollte den Richtlinien von Composer entsprechen und aus dem Vendorpräfix und dem Namen des Plugins bestehen, die mit einem “/” gretrennt sind
description
Hier beschreiben Sie die Funktion Ihres Plugins in einem kurzen Text. Dieser wird auch als ofizielle Beschreibung des Plugins verwendet.
license
Sie können für Ihr Plugin jede Lizenz wählen, die Sie wollen. Sie sollten es aber nicht unter der MIT Lizenz veröffentlichen, weil das Andere dazu berechtigen würde, Ihr Plugin unter deren Namen weiterzuverkaufen.
author
Hier können Sie Informationen zum Autor des Plugins hinterlegen. Wie zum Beispiel Name, Rolle, Webseite, E-Mail.
type
Als Typ müssen Sie shopware-platform-plugin angeben, sonst wird das Plugin nicht als solches erkannt.
autoload
Bei diesem Wert können Sie sich an der offiziellen Dokumentation von composer orientieren. Hier definieren Sie das Pluginverzeichnis und den Namespace. Sie können Ihr Plugin Strukturieren wie Sie wollen, es macht aber Sinn sich an die gängige Struktur von composer zu halten.
extra
extra kann jeden Wert enthalten. Shopware nutzt es um Basis Klasse, das Copyright und das Label in verschiedenen Sprachen abzurufen. Der gesamte Namespace Ihrer Basisklasse ist wichtig, weil Sie durch autoload die Struktur des Plugins selbst festlegen können und Shopware somit wissen muss, wo es nach Ihrer Klasse suchen soll.
Plugin Klasse
Jedes Plugin in Shopware 6 benötigt eine PHP Basisklasse. Diese Klasse trägt den gleichen Namen wie Ihr Plugin. In unserem Beispiel also CobExamplePlugin. Hier bestimmen Sie was während des Lebenszyklus Ihres Plugins passieren soll.
Dieser besteht aus folgenden Teilen.
install: wird aufgerufen, wenn das Plugin installiert wird
postInstall: wird aufgerufen, nachdem das Plugin installiert wurde
update: wird aufgerufen, wenn das Plugin updatet
postUpdate: wird aufgerufen, nachdem das Plugin upgedatet wurde
activate: wird aufgerufen, wenn das Plugin aktiviert wird
deactivate: wird aufgerufen, wenn das Plugin deaktiviert wurde
uninstall: wird aufgerufen, wenn das Plugin deinstalliert wird
Die einfachste Pluginklasse sieht zum Beispiel so aus:
Datenbank erstellen / Migrationen
Um Daten für Ihr Plugin zu speichern, müssen Sie die Datenbank von Shopware erweitern. Shopware 6 bietet dafür eine einfache Methode Migrations zu schreiben, die bei der Installation Ihres Plugins ausgeführt werden. Dafür müssen Sie die Migration nur im richtigen Verzeichnis
Die Änderungen an der Datenbank machen Sie in der update Methode. Nur für destruktive Änderungen müssen Sie die updateDestructive Methode verwenden.
Wichtig bei der Erstellung der Migrations ist, dass die Methode getCreationTimestamp den gleichen Timestamp zurückgibt, der auch im Klassennamen vorkommt. Außerdem müssen Sie die Felder created_at und updated_at anlegen, da das DAL (Data Abstraction Layer) diese Werte später automatisch befüllen wird.
Entity erstellen
Nachdem Sie nun die Datenbankstruktur für unser Plugin erstellt haben, müssen Sie dem DAL noch mitteilen das diese existiert. Dafür definieren Sie Ihre eigene EntityDefinition. Diese definiert, wie der Name schon sagt, die Felder Ihrer Entity und mappt diese auf die Felder in der Datenbank. Die Datei erstellen Sie im Verzeichnise
Die EntityDefinition muss die Methoden getEntityName und defineFields enthalten. Erstere gibt lediglich einen String zurück, der dem Namen Ihrer Tabelle gleichen muss.
In defineFields sind alle Felder enthalten, die Sie in der Datenbanktabelle erstellt haben. Im Gegensatz zu voher müssen Sie hier created_at und updated_at nicht mehr definieren. Die Feldklassen benötigen zwei Parameter. Den storageName, der wieder identisch mit dem Namen der Tabellenspalte in der Datenbank ist, und den propertyName der identisch mit dem Namen des Feldes in der Entity sein muss, die Sie noch erstellen.
Nachdem nun die Entity definiert ist, brauchen Sie noch die Entity selbst. Unter
services.xml
Um die Entity für Shopware nutzbar zu machen, müssen Sie die EntityDefinition nun im Dependency Injection Container registrieren. Hierfür nutzen Shopware Plugins wie in Shopware 5 die services.xml. Anders als noch in Shopware 5 liegt diese nun aber im Verzeichnis
Controller erstellen
Im nächsten Schritt erstellen Sie Ihren eigenen Controller um Ihnen die Daten auch im Frontend ausgeben lassen zu können. Im Verzeichnis
Jetzt geht es daran die in der Datenbank gespeicherten Daten im Frontend sichtbar zu machen. Da Sie Ihre EntityDefinition im Dependency Injection Container registriert haben, hat das DAL automatisch ein Repository erstellt. In der index Methode beutzen wir nun dieses Repository um die von uns gespeicherten Daten aus der Datenbank abzurufen und diese ans Frontend weiterzugeben.
Template
Um auch eine Anzeige zu erhalten, erstellen Sie noch eine simple index.html.twig. Unser Beispiel ist sehr simpel gehalten, im Normalfall wollen Sie hier natürlich mehr Styling und Struktur umsetzen. Um zu verdeutlichen, wie die Daten im Frontend ausgegeben werden, reicht dieses Beispiel aber.
Fazit
Shopware 6 ist durch die neue Pluginstruktur und Softwarearchitektur noch besser zu erweitern als Shopware 5. Ihnen sind als Pluginentwickler fast keine Grenzen gesetzt. Dieses Beispiel ist nur ein Einstieg in die generelle Struktur und Funktionsweise eines Plugins, es gibt noch viel mehr Möglichkeiten Shopware 6 nach seinen eigenen Bedürfnissen und Wünschen zu erweitern. In zukünftigen Beiträgen werden wir andere Vorgehensweisen wie zum Beispiel das Eventsystem von Shopware 6 beleuchten. Sie können also gespannt bleiben und sich hier weiter über Shopware 6 informieren.
Wenn Sie Unterstützung bei der Umsetzung Ihres eigenen Onlineshops wollen, können Sie sich gerne bei uns melden.