Allgemein Plugin Shopware 6

CoreUtils – suchen und finden ganz einfach

CoreUtils sind auf jedem Unix oder Unix-Like Betriebssystem zu finden. Die Frage ist wie schreibt man so einen Befehl und wo ist der Use Case, wenn es doch auch viel moderne Software mit GUI gibt? Nehmen wir an, dass wir einen Shopware 6 Shop besitzen der sehr viele Plugins enthält und zudem auch noch sehr Individualisiert ist vom Template her. Und nun fällt uns ein Fehler im Shop auf. Woran könnte es liegen fragt man sich dann. Wenn wir eine Idee haben können wir probieren im Quellcode von Shopware und den Plugins nachzusehen. Vielleicht haben wir ja auch ein konkretes HTML Schnipsel wo nach wir suchen können.

Als kleines Beispiel suchen wir mal im Shopware Core nach Template Datei, die Shopware selber Extended.

grep -R "sw_extends" vendor/shopware/storefront/Resources/views

Der Name des Programms (CoreUtils) steht am Anfang der Befehlszeile in diesem Fall “grep”. Grep sucht nach einem Text in einer Datei. Mit dem Parameter “-R” geben wir an, dass wir Rekursiv durch alle Dateien und Ordner bzw. Unterordner suchen in “vendor/…”.

grep -R "sw_extends" vendor/shopware/storefront/Resources/views | grep "component/account"

Dieser Befehl baut auf dem ersten Befehl auf. Die Ausgabe des ersten Befehls wird als Text in der Konsole ausgeben. Außer wir setzen ein “|” (Pipe) dahinter. Dann wird die Ausgabe des Vorherigen Befehls in den Nächsten übergeben. Das bedeutet unsere Ausgabe wird nun zusätzlich nach dem Text “component/account” durchsucht. Das minimiert unseren Output und wir bekommen eindeutigere Ergebnisse.

Möchten wir eine Shopware Funktion hinzufügen, aber sind noch nicht mit der Ordner Struktur vertraut, dann können wir auch nach Dateinamen suchen.

find vendor/shopware -iname "*Controller.php" | grep "storefront"

Brauchen wir mal eben Auskunft über alle Storefront Controller in Shopware mit Namen und Datei Pfad dann würde ich den Befehl oben ausführen. Das gleiche gilt auch für Events und Subscriber:

find vendor/shopware -iname "*Subscriber.php"
find vendor/shopware -iname "*Event.php" | grep -i "lineitem"

Möchten wir auf groß und klein Schreibung verzichten, weil wir uns Vielleicht nicht sicher sind, ob es nun groß oder klein geschreiben ist, dann verwenden wir in “grep” den Parameter “i”. Das selbe gilt auch bei “find”. Der parameter “iname” sucht nach Dateinamen aber “case insensitive”.

grep "__constru" -C 10 vendor/shopware/storefront/Controller/AuthController.php

Grep mit Kontext also Zeilen Davor und danach geht auch mit “-C ANZAHL”. Damit zeige ich mir mal schnell den Konstruktor des AuthControllers an. Schreibfaul bin ich natürlich auch… “__constru” reicht aus, da ich davon ausgegangen bin, dass diese Zeichenkette nicht wieder vorkommen wird in der Datei.

Jetzt der Bonus Trick. Wenn Sie Fleißig mit getippt haben, sehen Sie, dass im Konstruktor Abstrakte Parameter vorkommen. Jetzt wollen wir wissen welche Klassen dort wirklich übergeben werden:

grep -R "AuthController" -A 4 vendor/shopware/storefront/DependencyInjection

Wir sehen eigentlich wird SendPasswordRecoveryMailRoute statt AbstractSendPasswordRecoveryMailRoute verwendet. Die Befehle sind kurz, schnell, wiederverwendbar und leicht zu merken mit etwas Praxis. Das sind gerade mal die Basics gewesen. Aber das reicht um alles zu finden was notwendig ist. Mit etwas Kreativität können Sie schnell die richtigen Template und PHP stellen finden. Vielleicht verwenden Sie ja nächstes mal die CoreUtils, statt Ihre langsame IDE q;^)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.