Du möchtest Shopware 6 programmieren lernen? Auf dieser Seite sammle ich eigene Erfahrungen und Tipps sowie Links zu anderen Seiten und Tutorials, die dabei helfen.
Zuerst findest du einige Grundlagen. Dann gehe ich auf Themen in alphabetischer Reihenfolge ein. Am Ende findest du weiterführende Links zu anderen Seiten, auf denen du dich informieren kannst.
Inhaltsverzeichnis
- Grundlagen
- Build und Deployment
- Coding Best Practices
- Datenbank
- Design und Konzeption
- Development-Setup
- Document Root
- Effizienter programmieren
- Entwicklungs-Tools
- Events
- Geplante Aufgaben
- Logging
- Plugins zur Shop-Verwaltung
- Test- / Staging-Systeme (und lokale Dev-Systeme)
- Weiterführende Links: Tutorials, Kurse, Link-Listen, Newsletter, Artikel
Grundlagen
Nötiges Vorwissen
Wenn du Backend-Programmierung für Shopware 6 lernen möchtest, solltest du bereits mit objektorientierter Programmierung in PHP vertraut sein. Hast du früher mit alten PHP-Versionen gearbeitet, dann mache dich mit den großen Verbesserungen vertraut, die mit den PHP-Versionen 7.0 bis 7.4 eingeführt wurden. Außerdem solltest du wichtige Programmier-Prinzipien und Design Patterns wie Dependency Injection kennen.
Wenn du Frontend-Programmierung machen möchtest, solltest du bereits wissen, wie man modernes HTML, CSS und JavaScript schreibt.
Wichtige Prinzipien
Verinnerliche:
- Shopware 6 baut mit Symfony, Twig, jQuery und Bootstrap auf populären Frameworks auf.
- Findest du keine Antworten auf deine Fragen zu Shopware 6, dann findest du deswegen vielleicht passende Antworten, wenn du deine Suche direkt in Kombination mit diesen Frameworks startest.
- Beschäftige dich mit dem Grundaufbau des Codes. Finde heraus, wo Shopware 6 den Standard dieser Frameworks verwendet, wo es darauf aufbaut und es erweitert, und wo es von diesen Standards abweicht.
- Shopware 6 sieht sich als „API-first“. Versuche selbst, so zu denken: Erstelle Funktionalitäten möglichst als (REST-)API, welche von anderen verwendet werden kann – selbst wenn das nur du in ein paar Wochen in einem anderen Ticket bist.
Custom Fields, Properties und Entity Extensions
Es gibt drei verschiedene Wege, Produkten weitere Informationen hinzuzufügen:
- Custom Fields
- Properties
- Entity Extensions
(Randnotiz: Custom Fields und Entity Extensions können auch andere Entitäten erweitern.)
Es ist wichtig, zu wissen:
- Was die Unterschiede zwischen diesen Optionen sind,
- wann man welche am besten verwendet,
- wie man das programmatisch tut.
Gute Artikel dazu sind:
- BrocksiNet: CustomFields, Properties and Entity Extensions for Shopware 6
- Webkul: How to Create New Properties in Shopware 6?
- Shyim: Why I don’t like Custom fields?
API
Artikel von mir:
Apps
Was kann man alles mit Apps tut, bzw. was gehört dazu? Björn („Brocksi“) hat das in einem Diagramm zusammengefasst.
Build und Deployment
Über die Umgebungsvariablen SHOPWARE_ADMIN_BUILD_ONLY_EXTENSIONS und DISABLE_ADMIN_COMPILATION_TYPECHECK kann man die Zeit zum Bauen von Plugin-Assets für den Administrationsbereich stark beschleunigen.
Björn Meyer hat weitere Tipps zu Umgebungsvariablen im Build-Prozess, zum Beispiel PROJECT_ROOT, APP_URL, MODE und SHOPWARE_ES Variablen.
Noch mehr zum Deployment gibt es bei Shopware The Right Way.
Coding Best Practices
Best Practices von Fabian Blechschmidt, zum Beispiel, wie man automatische Updates und den Admin Message Consumer deaktiviert
Tomasz Nowicki von Divante teilt ebenfalls seine Best Practices, wie man Code in Shopware 6 Projekten organisiert.
Datenbank
Datenbank-Dump erstellen und einspielen
Wenn man einen Datenbank-Dump erstellen und einspielen möchte:
- Mit diesem Skript von Kellerkinder kann man die Datenbank entsprechend DSGVO/GDPR exportieren.
- Alternativ gibt es dieses Skript zum Dumpen, auch mit Möglicher Berücksichtigung von DSGVO/GDPR, von Winkelwagen.
- Datenbank-Exporte und -Importe lassen sich nicht zwischen MySQL und MariaDB mischen, weil virtuelle Spalten unterschiedlich implementiert werden.
Erhältst du diese Fehlermeldung:
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, '$."number-of-buckets-specified"') FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'database' AND TABLE_NAME = 'acl_role';': Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
Dann füge den Parameter --column-statistics=0
hinzu (Quelle).
Datenbanken synchronisieren
Mit diesem Tool für Mac und Linux kannst du von deinem Live-System die Datenbank und Media-Files per SSH ziehen, aufbereiten und in deine lokale Entwicklungsumgebung einspielen.
SQL-Queries debuggen
Brocksi beschreibt, wie du in verschiedenen Szenarien MySQL-Datenbank-Abfragen in Shopware 6 debuggst.
Demo-Daten
Du benötigst Demo-Daten bzw. Fake-Daten in deinem Shop?
Dabei hilft dir das Fixtures Plugin von basecom.
Design und Konzeption
Der offizielle Shopware Figma-Account bietet allerhand Vorlagen für Mockups und Designs.
Development-Setup
Es gibt verschiedene Möglichkeiten, ein Projekt bei sich aufzusetzen.
Beliebte Setups sind:
- dockware von der dasistweb GmbH
Ein Docker-Setup mit extra gebauten Images, das in verschiedenen Varianten existiert: „Play“ ermöglicht es Jedem, innerhalb von Sekunden eine Test-Instanz von Shopware zum Ausprobieren zu starten, mit „Dev“ kann man an Projekte umsetzen bzw. Plugins erstellen, und mit „Contribute“ gibt es eine Umgebung, mit der man leicht direkt zum Shopware Core selbst beitragen kann. - shopware-docker von shyim
Es bietet nicht nur die nötigen PHP/Webserver/…-Container selbst, sondern auch eine Zugriffsmöglichkeit auf die DB über PHPMyAdmin, Mails werden über Mailcatcher abgefangen und die Suche wird über einen Elasticsearch-Container abgebildet.
Document Root
Dein Webserver muss auf das Shopware-Unterverzeichnis public/ zeigen.
Effizienter programmieren
Die Meteor component library stellt UI-Komponenten für den Administrations-Bereich bereit. Das früher empfohlene „Admin Extension SDK“ hat Shopware in Pension geschickt.
Mit Jisse Reitsmas Shopware 6 Admin Auto Plugin muss man sich während der Entwicklung nicht mehr ständig im Admin-Bereich anmelden.
Entwicklungs-Tools
Da sich Shopware stark an Symfony und anderen Frameworks orientiert, reicht es in deiner Lieblings-IDE die Plugins für Symfony, Doctrine und Twig zu installieren. Für PhpStorm gibt es zusätzlich das kostenlose Plugin „Shopware 6 Toolbox„, das Live-Templates, Auto-Completion, Scaffolding-Features und vieles mehr hinzufügt.
Im Projekt selbst kannst du ein DevelopmentHelper-Plugin installieren, das dir weitere Hilfen bei der Entwicklung gibt.
Shopware liefert außerdem ähnlich wie Magento ein Kommandozeilen-Tool namens bin/console mit häufig benötigten Befehlen.
Events
Ein Tipp von Shyim: Seit Shopware 6.4.9.0 kann ein Subscriber per Annotation auf ein Request-/Render-Response-Event für eine spezifische Route angesetzt werden. Man erspart sich dadurch die typische If-Condition, welche auf die korrekte Route überprüft. Das macht den Code einfacher zu lesen, und er wird seltener ausgelöst.
Geplante Aufgaben
shopware.invalidate_cache und shopware.elasticsearch.create.alias stehen in Shopware 6.4 auf „queued“
Leider hat sich rund um 6.4.15.0 ein Bug eingeschlichen, dass diese beiden geplanten Aufgaben immer auf „queued“ stehen bleiben. Zumindest mit 6.4.20.0 ist das immer noch der Fall.
Eine rege Diskussion gibt es in diesem Thread. Der Bug im Issue-Tracker wurde für 6.4.19.0 als gelöst markiert, das scheint aber nicht der Fall zu sein.
Logging
Log-Meldungen reduzieren
In Shopware-Logs findet man viele Log-Meldungen, die nicht unbedingt geloggt werden müssten und die Übersicht verschlechtern. Zum Beispiel werden Aufrufe nicht-existenter URLs geloggt, wie sie häufig von Bots abgesetzt werden. Das liegt an Monolog, welches standardmäßig sehr log-freudig ist.
In diesem Post gibt es Tipps, wie man die Anzahl der Log-Einträge reduziert.
Plugins zur Shop-Verwaltung
Egal, ob in der lokalen Entwicklungs-Umgebung oder am Kundenserver: Diese Plugins helfen Programmierer:innen bei der Verwaltung des Shops.
Plugin | Zweck |
---|---|
yireo/shopware6-additional-user-commands | Fügt CLI-Befehle zur User-Verwaltung wie „user:list“ und „user:delete“ hinzu. |
Test- / Staging-Systeme (und lokale Dev-Systeme)
Ich hatte bisher nur Projekte mit bezahlten Shopware-Editionen, in denen Plugins aufgrund der Edition bzw. unseres Partner-Status mehreren Domain für Staging-, Dev-, … Systeme verwendet werden dürfen, aber wenn man mit der Community Edition arbeitet, dann sollte man laut offiziellem Tutorial so arbeiten können:
- Live-System ganz normal wie immer aufsetzen
- Test-/Staging-System mit einer Subdomain verwenden (bitte nicht in einem Unterverzeichnis des Live-Shops, wie früher gerne gemacht)
- Dev-Systeme mit einem Hosts-Eintrag entwickeln, welcher wiederum eine Subdomain der für Plugins lizensierten Haupt-Domain arbeitet.
Weiterführende Links: Tutorials, Kurse, Link-Listen, Newsletter, Artikel
Im Community Digest sammelt das Shopware-6-Team alles an Blog-Posts, Community-Events etc, was es finden kann.
Das Awesome Shopware 6 Linkverzeichnis von Elgentos bietet eine Menge an Links zu Plugins, Ressourcen, Themes und mehr.
Shopware bietet gemeinsam mit Jisse Reitsma einen offiziellen, kostenlosen Kurs Shopware 6 Backend Development an.
Auf Stack Overflow findest du viele Fragen zu Shopware 6. Die akzeptierten Antworten dort zu lesen, bringt dir ebenfalls interessante Einblicke in diverse Themen.
Darüber hinaus gibt es die offizielle Shopware 6 Entwickler:innen Dokumentation.