Wann ein eigenes Modul besser ist als ein gekauftes
Ein Modul ist ein eigenständiges Stück Code, das Magento um Funktionen erweitert, ohne die Kerndateien von Magento zu ändern. Das macht Updates sicherer. Trotzdem braucht nicht jedes Problem eigenen Code.
- Kein Modul deckt deine Situation ab, zum Beispiel einen eigenen Auftragsablauf im Lager.
- Ein gekauftes Modul erledigt das meiste, aber ein kleiner Teil fehlt, und du musst bei jedem Update um diese Lücke herumarbeiten.
- Ein gekauftes Modul lädt Skripte und Abfragen, die du nicht nutzt, und macht den Shop dadurch langsamer.
- Magento selbst hat einen Fehler oder eine Lücke, und du willst eine gezielte Korrektur, ohne den Kern anzufassen.
- Zwei Systeme sollen etwas austauschen, das standardmäßig nicht geht.
Gibt es ein gutes Modul, das passt? Dann empfehle ich es. Eigener Code ist Wartung, die du mitkaufst, deshalb baue ich nur, was sich auszahlt.
Wie ein Modul in Magento 2 funktioniert
Ein Modul meldet sich über ein paar Konfigurationsdateien bei Magento an. Danach kann es an festen Stellen eingreifen: Ein Plugin ändert das Verhalten einer bestehenden Funktion, ein Observer reagiert auf ein Ereignis (etwa eine aufgegebene Bestellung), und Templates bestimmen, was der Besucher sieht.
Das klingt aufgeräumt, aber Magento führt viele Module nebeneinander aus. Zwei Module, die dieselbe Funktion verändern, können sich gegenseitig aufheben. Einen solchen Konflikt siehst du nicht im Code deines eigenen Moduls, sondern nur im Verhalten des ganzen Shops.
Deshalb lese ich zuerst, wie die vorhandenen Module zusammenhängen, bevor ich eine Zeile schreibe. Das ist der Unterschied zwischen einem Modul, das auf einer leeren Installation läuft, und einem, das in deinem Shop läuft.
Module, die ich selbst geschrieben habe
Diese stammen aus dem Shop, in dem ich selbst arbeite. Sie zeigen, welche Art von Problemen ein eigenes Modul löst.
- Content Security Policy und SRI-Hashes: Die CSP sind die Regeln, die festlegen, welche Skripte dein Shop laden darf, ein SRI-Hash ist eine Prüfsumme, mit der der Browser kontrolliert, ob eine Datei verändert wurde. Mein Modul hat einen Fehler behoben, bei dem die Hashes nach einem Deploy nicht mehr zu den ausgelieferten Dateien passten.
- Canonical-Tags auf CMS-Seiten: Ein Canonical-Tag sagt Google, welche URL das Original ist. Auf CMS-Seiten setzt Magento ihn nicht selbst. Meine Korrektur tut es.
- Ein 'Gate' für Skripte von Drittanbietern: Chat-Widgets, Tracker und andere externe Skripte laden erst, nachdem ein Besucher etwas auf der Seite tut. Die erste Ansicht wartet dann nicht mehr auf fremden Code.
- Ein eigenes Lagermodul fürs Kommissionieren, also das Zusammenstellen von Bestellungen aus dem Regal. Es ist noch in Entwicklung.
Keines davon ist ein Produkt, das du kaufen kannst. Sie existieren, weil der Shop sie brauchte. So arbeite ich auch für dich.
So arbeite ich an deinem Modul
Ein Modul, das in einem Testshop läuft, kann in der Produktion trotzdem scheitern. Deshalb durchläuft jedes Projekt dieselben Schritte.
- Erst lesen: wie der vorhandene Code und die Module zusammenhängen und welche denselben Bereich berühren wie das neue.
- Änderungen zuerst auf einer Testumgebung, mit einer Kopie der Produktionssituation.
- Ausrollen, ohne den Shop lahmzulegen. Besucher und Bestellungen laufen weiter.
- Kein vollständiger Cache-Flush in der Produktion. Ein Flush wirft alle gespeicherten Seiten weg, wodurch der Shop vorübergehend langsam wird. Ich aktualisiere nur, was nötig ist.
Nach dem Ausrollen prüfe ich, ob das Modul auf den relevanten Seiten tut, was es soll.
Aus der Praxis
Ein Magento-2-Shop mit 328 aktiven Modulen
Das ist der Shop, in dem ich selbst arbeite: Magento 2.4.7 mit über 3.400 Produkten, rund 13.600 Produktseiten in vier Sprachversionen und 328 aktiven Modulen. Der Kunde bleibt anonym, die Zahlen sind echt.
Bei so vielen Modulen ist ein neues Modul nie eine Insel. Bevor ich etwas schreibe, finde ich heraus, was bereits an derselben Seite oder demselben Ereignis hängt.
Die LCP ist die Zeit, bis das größte Element im Bild steht. Sie lag bei 14 bis 16 Sekunden und liegt bei echten Besuchern jetzt bei 2,14 Sekunden. Eigene Module müssen einen Shop nicht schwerer machen. Gut geschrieben und getestet halten sie ihn leicht.
Was ich nicht mache
Ein Modul ist Code, den du danach weiterlaufen lässt. Deshalb halte ich mich an ein paar Grenzen.
- Kerndateien von Magento ändern. Das macht jedes Update zum Risiko.
- Ein Modul bauen, obwohl es schon ein gutes gibt, das passt.
- Direkt in der Produktion entwickeln oder testen.
- Einen vollständigen Cache-Flush in der Produktion ausführen.
- Gekaufte Module aus deinem Shop entfernen, ohne dass du es willst.
Wenn eigener Code nicht der beste Weg ist, sage ich das.
Umfang und Preis
Was ein Modul kostet, hängt davon ab, wie viele Teile von Magento es berührt, wie viele andere Module in derselben Ecke sitzen und ob eine Anbindung an ein externes System dazukommt.
Für Magento-Arbeit gibt es bei mir keine festen Pakete. Nach einem ersten Gespräch weiß ich, was das Modul leisten muss, und wir legen den Umfang fest. Mehr dazu, wie ich Preise gestalte, steht auf der Preisseite.