Hallo zusammen,
das Ziel, das ich versuche zu erreichen, ist, die Farbe von Kategorie-Mediendateien im SVG-Format bei Maus-Hover zu ändern.
Kurze Einführung:
Alle Mediendateien, die mit {% sw_thumbnails ... %}
geladen werden, werden in der twig-Vorlage mit einem img
-Tag gerendert. Wenn die Mediendatei Thumbnails hat, dann enthält der img
-Tag ein srcset
mit allen Thumbnail-Pfaden.
Wenn die Mediendatei eine SVG-Datei ist, sind keine Thumbnails vorhanden, daher wird nur ein einfaches img
-Tag gerendert.
Soweit ich weiß, ist es für die Änderung der fill
Farbe eines SVGs bei „mouse hover“ notwendig, dass die Rohdaten der SVG-Datei im DOM vorhanden sind, also nicht in einem img
-Tag eingeschlossen sind.
Shopware rendert seine Standard-Icons bereits auf die oben beschriebene Weise und verwendet dazu eine Twig-Methode namens source()
. Der folgende Code fügt im DOM die Rohdaten eines Icons ein, wenn ein Pfad zur SVG-Datei angegeben wird:
/src/vendor/shopware/storefront/Resources/views/storefront/utilities/icon.html.twig
<span
class="icon icon-{{ name }}{% for entry in styles %}{% if entry != "" %} icon-{{ entry }}{% endif %}{% endfor %}">
{{ source('@' ~ namespace ~ '/../app/storefront/dist/assets/icon/'~ pack ~'/'~ name ~'.svg', ignore_missing = true) }}
</span>
Jetzt kommt die Kernfrage:
Wie kann ich den richtigen Pfad zu einer Mediendatei herausfinden? Was sollte der namespace
und der Pfad zur Datei sein, damit die Twig-Methode source()
die SVG-Datei finden, die Raw-Daten holen und in das DOM einbinden kann?
Hier ein Beispiel:
{{ category.media.url }}
{# Ausgabe: 'media/05/59/4f/1625499059/kategorie_Apple-Mac.svg' #}
Was ich bereits versucht habe:
{% setze Pfad = '@Storefront/media/05/59/4f/1625499059/kategorie_Apple-Mac.svg' %}
{% set path = '@Storefront/public/media/05/59/4f/1625499059/kategorie_Apple-Mac.svg' %}
{% set path = '@default/media/05/59/4f/1625499059/kategorie_Apple-Mac.svg' %}
{% set path = 'media/05/59/4f/1625499059/kategorie_Apple-Mac.svg' %}
{% set path = 'public/media/05/59/4f/1625499059/kategorie_Apple-Mac.svg' %}
{{ source(path) }}
Und viele andere Optionen habe ich ausprobiert, ohne Erfolg zu haben.
Der Twig-Fehler ist immer von der gleichen Art:
# Template "/media/5d/51/e6/1625498977/kategorie_Aktion.svg" is not defined.
Ich wäre wirklich dankbar für jeden hilfreichen Tipp, der mich in die richtige Richtung lenkt.
Mit freundlichen Grüßen