Eigene Twig-Funktion in Shopware 6 Plugin erstellen
Stelle dir vor, du möchten während der Theme-Entwicklung ein PHP-Skript innerhalb des Twig-Templates aufrufen, um beispielsweise einen MD5-Hash zu erstellen. Für diese Fälle können wir unsere eigenen Twig-Funktionen erstellen.
In diesem Beispiel übergeben wir der Twig-Funktion einen String und erhalten als Rückgabewert den MD5-Hash.
Es wird nicht empfohlen, Twig-Funktionen zu verwenden, um Daten aus der Datenbank abzurufen. In diesen Fällen könnte ein DataResolver hilfreich sein.
Vorkenntnisse
Um eine eigene Twig-Funktion für dein Plugin zu erstellen, benötigst du zunächst ein Plugin als Basis. In der Shopware Dokumentation findest du eine Anleitung, wie du ein Plugin erstellst.
Twig-Funktion erstellen
Damit die Twig-Funktion funktioniert müssen wir zunächst ein paar Dateien erstellen. Genaugenommen nur 2 Dateien. Zum einen die PHP-Datei mit der Twig-Function selbst und die services.xml. Die services.xml wirst du wahrscheinlich schon haben.
Der Übersichtlichkeit halber erstellen wir im Ordner src einen Ordner namens Twig. Darin erstellen wir eine neue PHP-Datei. Die kannst du beliebig benennen.
Im Code beziehe ich mich auf die Beispiele aus der Shopware-Dokumentation. Sprich, du musst SwagBasicExample
mit deinem Plugin-Namen ersetzen.
//<plugin root>/src/Twig/SwagCreateMd5Hash.php
<?php declare(strict_types=1);
namespace SwagBasicExample\Twig;
use Shopware\Core\Framework\Context;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class SwagCreateMd5Hash extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('createMd5Hash', [$this, 'createMd5Hash']),
];
}
public function createMd5Hash(string $str)
{
return md5($str);
}
}
Selbstverständlich kannst du hier auch alles andere machen, was du mit PHP machen kannst. Du kannst also theoretisch auch Daten aus der Datenbank abrufen oder sonstige PHP-Logik verwenden.
Was jetzt noch fehlt, ist die services.xml
. Wir müssen die Funktion im DI Container registrieren.
<!-- <plugin root>/src/Resources/config/services.xml -->
<services>
<service id="SwagBasicExample\Twig\SwagCreateMd5Hash" public="true">
<tag name="twig.extension"/> <!--Required-->
</service>
</services>
Wenn das erledigt ist, kannst du die Twig-Funktion im Theme verwenden.
{{ createMd5Hash('Hello World') }}