Themen / Website & Apps

Eigenes Shopware 6 Plugin erstellen


In diesem Blogbeitrag lernst du die Basisstruktur von Shopware 6 Plugins und lernst ein einfaches Beispiel kennen. Wir zeigen dir, wie du ein Modell und einen Controller anlegst um eigene Daten zu speichern und auszugeben.

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 dir, die Grundstruktur eines Plugins und erklären, anhand kleiner Codebeispiele, wie du Dateien wie Modells und Controller erstellst, um Daten in der Datenbank zu speichern und diese auch im Frontend anzeigen zu lassen.

Grundstruktur

Zu Beginn musst du die minimale Ordnerstruktur des Plugins erstellen. Plugins werden in Shopware 6 im Verzeichnis /custom/plugins abgelegt. Hier erstellst du nun einen Ordner der den Namen deines Plugins erhält. In unserem Beispiel werden wir den Namen CobExamplePlugin verwenden. Es ist immer sinnvoll dein Vendortag vorne an den Namen deines Plugins zu hängen, um Kollisionen mit anderen Plugins, die den gleichen Namen tragen, zu vermeiden.

Plugin Struktur

composer.json

Jedes Plugin wird durch eine composer.json definiert. Hier legst du Metainformationen deines Plugins, wie Name, Version, Lizenz ab.

Die Grundinformation in einer composer.json könnten zum Beispiel so aussehen.

composer.json

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 beschreibst du die Funktion deines Plugins in einem kurzen Text. Dieser wird auch als ofizielle Beschreibung deines Plugins verwendet.

license

Du kannst für dein Plugin jede Lizenz wählen die du willst. Du solltest es aber nicht unter der MIT Lizenz veröffentlichen, weil das Andere dazu berechtigen würde, dein Plugin unter ihrem Namen weiterzuverkaufen.

author

Hier kannst du Informationen zum Autor des Plugins hinterlegen. Wie zum Beispiel Name, Rolle, Webseite, E-Mail.

type

Als Typ musst du shopware-platform-plugin angeben, sonst wird dein Plugin nicht als solches erkannt.

autoload

Bei diesem Wert kannst du dich an der offiziellen Dokumentation von composer orientieren. Hier definierst du das Pluginverzeichnis und den Namespace. Du kannst dein Plugin Strukturieren wie du willst, 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 deiner Basisklasse ist wichtig, weil du durch autoload die Struktur deines Plugins selbst festlegen kannst und Shopware somit wissen muss, wo es nach deiner Klasse suchen soll

Plugin Klasse

Jedes Plugin in Shopware 6 benötigt eine PHP Basisklasse. Diese Klasse trägt den gleichen Namen wie dein Plugin. In unserem Beispiel also CobExamplePlugin. Hier kannst bestimmst du was während des Lebenszyklus deines 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.

Plugin Klasse

Datenbank erstellen / Migrationen

Um Daten für dein Plugin zu speichern, musst du die Datenbank von Shopware erweitern. Shopware 6 bietet dafür eine einfache Methode Migrations zu schreibe, die bei der Installation deines Plugins ausgeführt werden. Dafür musst du die Migration nur im richtigen Verzeichnis /src/Migration ablegen.

Die Änderungen an der Datenbank machst du in der update Methode. Nur für destruktive Änderungen musst du die updateDestructive Methode verwenden.

Wichtig ist bei der Erstellung der Migration, dass die Methode getCreationTimestamp den gleichen Timstamp zurückgibt, der auch im Klassennamen vorkommt. Außerdem musst du die Felder created_at und updated_at anlegen, da das DAL (Data Abstraction Layer) diese Werte später automatisch befüllen wird.

Migratin Shopware 6

Entity erstellen

Nachdem du nun die Datenbankstruktur für unser Plugin erstellt hast, musst du dem DAL noch mitteilen das diese existiert. Dafür definierst du deine eigene EntityDefinition. Diese definiert, wie der Name schon sagt, die Felder deiner Entity und mappt diese auf die Felder in der Datenbank. Die Datei erstellst du im Verzeichnise /src/Entitiy.

Die EntityDefinition muss die Methoden getEntityName und defineFields enthalten. Erstere gibt lediglich einen String zurück, der dem Namen deiner Tabelle gleichen muss.

In defineFields sind alle Felder enthalten, die du in der Datenbanktabelle erstellt hast. Im Gegensatz zu voher musst du 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 du noch erstellst.

EntityDefinition Shopware 6

Nachdem nun die Entity definiert ist, brauchst du noch die Entity selbst. Unter /src/Entity erstellst du eine Datei MyEntity.php. In dieser Datei legst du nun alle Felder an die deine Entity benötigt. Die ID wird dabei durch den EntetityIdTrait umgesetzt. Zu den Feldern musst du natürlich noch Getter und Setter Methoden definieren. Aus Platzgründen haben wir in unserem Beispiel nur wenige Felder angelegt. Je nach Umfang deines Plugins, kann eine Entity natürlich auch bedeutend größer sein.

Entity Shopware 6

services.xml

Um die Entity für Shopware nutzbar zu machen, musst du 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 /Resources/config/.
Dem gibts du noch den shopware.entity.definiton mit und nennst das Attribut entity genau so wie den EntityName in deiner EntityDefiniton.

services.xml Shopware 6

Controller erstellen

Im nächsten Schritt erstellst du deinen eigenen Controller um dir die Daten auch im Frontend ausgeben lassen zu können. Im Verzeichnis /src/Controller erstellst du eine Datei ExampleController.php. Die PHP-Klasse muss vom Shopware\Storefront\Controller\StorefrontController erben. Die Route des Controllers wird über Annotations (@Route(‘/exmapleRoute’) festgelegt. Diese Route musst du aber auch wieder für Shopware “sichtbar” machen.
Hierfür legst du unter /Resources/config eine routes.xml Datei an und definieren hier in welchem Verzeichnis Shopware nach Annotationen suchen soll.
Nun ist dein Controller unter deinShop.de/exampleRoute aufrufbar.

routes.xml Shopware 6

Jetzt geht es daran die in der Datenbank gespeicherten Daten im Frontend sichtbar zu machen. Da du deine EntityDefinition im Dependency Injection Container registriert hast, 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, erstellst du noch eine simple index.html.twig. Unser Beispiel ist sehr simpel gehalten, im Normalfall willst du hier natürlich mehr Styling und Struktur umsetzen. Um zu verdeutlichen, wie die Daten im Frontend ausgegeben werden, reicht dieses Beispiel aber.

index.html.twig Shopware 6

Fazit

Shopware 6 ist durch die neue Pluginstruktur und Softwarearchitektur noch besser zu erweitern als Shopware 5. Dir 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. Du kannst also gespannt bleiben und dich hier weiter über Shopware 6 informieren.

Wenn du Unterstützung bei der Umsetzung deines eigenen Onlineshops willst, kannst du dich gerne bei uns melden.

codeblick


Wir sind eine Digital- & E-Commerce Agentur mit einem hochqualifizierten Expertenteam. Wir entwickeln auch für Sie und Ihr Unternehmen den passenden und effektiven digitalen Weg und stehen Ihnen als Ihr Partner bei der Digitalisierung zur Seite.

Bereits zahlreiche Kunden aus ganz Deutschland werden von uns unterstützt, schenken uns Ihr Vertrauen und lassen Sich von neuesten Technologien sowie modernstem Know-How & Lösungen täglich begeistern.

Wir sind eine qualifizierte und erfahrene Contentful- und Shopware Partner Agentur, sowie Partner von Facebook, Google und vielen weiteren. Kurz gefasst: Digitale Lösungen sind unsere Stärke - Lassen Sie uns gemeinsam digital überzeugen!

Google Partner Agentur codeblick aus Augsburg
Shopware Partner Agentur codeblick aus Augsburg, München und Umgebung.
codeblick Ihre Contentful Agentur aus München.

Suchen Sie einen Partner mit dem Sie Ihr Vorhaben umsetzen können?