Shopware-Technik: Kleine Smarty-Helfer

Im heutigen Blogpost geht es etwas technischer zu. Als Shopware Agentur, die ihren Kunden möglichst nachhaltige und updatesichere Entwicklungen anbieten möchte, sind wir immer auf der Suche nach schlanken Lösungen für wiederkehrende Problemstellungen und wollen diese gerne vorstellen und zum "Nachmachen" anregen.

Bei der Theme-Entwicklung stoßen Frontend-Entwickler oft an Grenzen, wenn benötigte Daten nicht oder beispielsweise nur als ID vorhanden sind. Normalerweise wird an dieser Stelle ein Workaround gesucht oder ein Backend-Entwickler beauftragt, die gewünschten Informationen auch im Frontend zur Verfügung zu stellen. Handelt es sich dabei um ein Problem, das regelmäßig und an verschiedenen Stellen auftritt, gehen dafür verhältnismäßig viel Entwicklungszeit und Nerven drauf. Ein solches Problem, dem wir in unserer Agentur wieder und wieder begegnen, ist, dass Bilder in Shopware, z.B. bei Artikeleigenschaften, per ID referenziert werden, jedoch die URL benötigt wird, um das Bild auszugeben.

 

Unsere Lösung: Smarty-Plugins

Für unser Beispiel bedeutet das, dass Frontend-Entwickler, die Variable der Bild-ID ganz normal einbinden können und daran den entsprechenden Plugin-Namen anfügen. Unser Plugin an dieser Stelle heißt „picurl“. Steht die ID des Bildes also in der Variable $bildID, schreibt der Entwickler statt „{$bildID}“ „{$bildID| picurl }“ und bekommt statt der ID den Link zum Bild.

 

Wo liegt der Vorteil gegenüber einem Shopware-Plugin?

Es wird kein separates Shopware Plugin mehr benötigt, um die Umwandlung der Informationen vorzunehmen. Außerdem passiert dieser Prozess nun direkt im Shopware Template, was eine größere Flexibilität erlaubt. Dies wird unterstützt von der Tatsache, dass das Smarty Plugin unabhängig von Controllern u.ä. angewendet werden kann.
 

Wie wird das Smarty Plugin angewendet?

Die Datei sollte „modifier.PLUGIN-NAME.php“ benannt und in den Ordner themes->Frontend->THEME-NAME->_private->smarty gelegt werden (für PLUGIN-NAME und THEME-NAME setzen Sie entsprechend ihre Namen ein). Fertig ist die Installation.
Wie die Datei-Endung schon verrät, ist das Plugin selbst in PHP geschrieben. Beginnt man die Datei wie folgt, wird mit dem Aufruf „{VARIABLE|PLUGIN-NAME}“ der Code in den geschweiften Klammern ausgeführt, mit der Variable als Parameter.

<?php function smarty_modifier_PLUGIN-NAME($value) { }

In unserem Beispiel mit den Bildern holen wir uns zunächst das der ID entsprechende Media-Objekt aus dem Media-Repository

$picUrl = Shopware()->Models()->getRepository('Shopware\Models\Media\Media')->findOneBy(['id' => ($value)]); 

und holen uns dann den Pfad über den Media-Service, welchen wir anschließend zurückgeben.

$picUrl = Shopware()->Container()->get('shopware_media.media_service')->getUrl($pic->getPath()); return $ picUrl ;

Wie man an diesem Beispiel sehen kann, gehen solche Tricks nicht selten mit wenig Aufwand einher, sparen aber im laufenden Betrieb Zeit und Geld und bieten somit in mehrerlei Hinsicht auch für unsere Kunden einen eindeutigen Mehrwert.