© svetabelaya/Shutterstock.com
Teil 3: Das Plug-in-System und eigene Erweiterungen

Mehr Freiheit mit den Shopware-6-Plug-ins


In den vorherigen zwei Artikeln haben wir uns allgemein um Shopware 6 und um das neue API gekümmert. Im dritten und letzten Teil dieser Serie werden wir uns nun dem neuen Plug-in-System widmen.

Wir werden ein kleines Plug-in schreiben, das uns in einem eigenen Controller die letzten PHP-Magazin-Hefte mit Cover und Kauflink ausgibt. Dafür benötigen wir über das grundsätzliche Plug-in hinaus eine eigene Entity, eine Migration und einen eigenen Controller mit Theme.

Einem erfahrenen Shopware-Entwickler werden in Shopware 6 viele Konzepte und Strukturen bekannt vorkommen – auch wenn sich z. B. die Plug-in-Struktur deutlich verändert hat. Wir werden nun eine Demoumgebung aufsetzen, uns die neue Plug-in-Struktur anschauen und die composer.json erforschen. Danach werden wir eine eigene Datenbanktabelle via Migration anlegen, eine eigene Entity über den Data Abstraction Layer (DAL) erstellen und schlussendlich alles in einem Controller integrieren und anwenden.

Wer aus den vorherigen Artikeln noch eine funktionierende Demoumgebung hat, kann den folgenden Abschnitt getrost überspringen.

Demoumgebung aufsetzen

Wir verwenden die Docker-Umgebung, die auf einem Linux-Client ausgeführt wird. Zuerst klonen wir das Entwicklungstemplate von GitHub mit git clone git@github.com:shopware/development.git. Nun haben wir die Entwicklungsvorlage für Shopware 6 im Verzeichnis development. Anschließend gehen wir mit cd development in das Verzeichnis und klonen noch das eigentliche Shopware-Plattform-Repository mit git clone git@github.com:shopware/platform.git in das Standardverzeichnis. Achtung: Bitte kein anderes Verzeichnis beim Klonen angeben, da das wichtig für das Autoloading ist.

Damit haben wir jeglichen Quellcode, den wir zum Starten auf unserem Rechner benötigen. Um nun die notwendigen Docker-Container zu bauen und zu starten, geben wir ./psh.phar docker:start ein. Mit diesem Befehl werden alle Docker-Container gebaut und gestartet. Anschließend verbinden wir uns mit dem Application Container via ./psh.phar docker:ssh und starten die Installation mit ./psh.phar install.

Das kann beim ersten Mal einige Zeit in Anspruch nehmen, da bei der initialen Ausführung einige Caches erstellt werden müssen. Um zu prüfen, ob die Installation erfolgreich war, könnt ihr einfach euren Lieblingsbrowser öffnen und auf http://localhost:8000 zugreifen.

Wenn ihr z. B. Mac-Anwender seid, könnt ihr das Ganze auch lokal aufsetzen. Eine beispielhafte VirtualHost-Konfiguration könnt ihr im Installationsguide [1] unter „Setting up your webserver finden. Anschließend müsst ihr nur bin/setup ausführen und werdet dann durch einen interaktiven Installationsprozess geführt. Wenn etwas während der Installation nicht funktioniert hat, prüft ihr, ob es die .psh.yaml.override gibt, wenn nicht, startet ihr das Set-up-Skript mit ./psh.phar install erneut.

Plug-in Basic

Fangen wir nun mit dem Erstellen des Beispiel-Plug-ins an. Eine beispielhafte Struktur findet ihr in Listing 1. Wir wechseln zuerst in das Verzeichnis shopware-root/custom/plugins und erstellen das Verzeichnis PHPMagazin. Das Verzeichnis muss nach dem technischen Plug-in-Namen benannt werden. Daher verwenden wir hier PHPMagazin als Verzeichnisnamen. Jedes Plug-in basiert auf einer composer.json die den Namen, die Version, die Requirements, und viele weitere Metainformationen enthält. Die Entwickler, die mit Composer vertraut sind, werden hier auf viel Bekanntes stoßen. Jedes Plug-in, das wir entwickeln, kann, wie jedes andere Package, automatisch via composer require hinzugefügt werden. Die Anwendung von jeglichen Composer-Schema-Elementen [2] ist ausdrücklich erwünscht.

Wir erstellen nun die composer.json im Pluginroot-Verzeichnis. Einen beispielhaften Inhalt kann man sich in Listing 2 anschauen. Jedes Composer Package benötigt einen technischen Namen als eindeutiges Identifizierungsmerkmal. Das Naming-Schema ist identisch mit dem von Composer empfohlenen. Der Name soll aus einem Vendor- und Projektnamen bestehen, die durch ein „/“ getrennt sind, z. B. "name": "swag/php-magazin".

Des Weiteren kann der Vendor-Name auch gleichzeitig der Vendor-Präfix sein, in diesem Beispiel verwenden wir als Prefix swag. Sollte der Projektname aus mehreren Wörtern bestehen, sollten diese mit einem „-“ konkateniert werden, das wird oft auch als Kebab-Case-Schreibweise beschrieben. Was benötigen wir noch? Eine Beschreibung ("description": "PHPMagazin Example"), eine Versionsnummer des Plug-ins ("version": "v1.0.0"), die verwendete Lizenz, unter der das Plug-in veröffentlicht wird ("license": "MIT"), und den Autor des Plug-ins. Zusätzlich müssen wir noch das Element type wie folgt definieren: "type": "shopware-platform-plugin". Wenn das fehlt, ist das Plug-in nicht gültig und seine Installation nicht möglich.

Im nächsten Schritt definieren wir die Autoloa...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang