Shopware Plugin 101 | Service extensions

Wer schon mal im neuen Shopware Daten im Listing oder in der Suche erweitern wollte, wird schon auf die serivce extensions gestoßen sein. Neue Services wie StoreFrontBundle enthalten keine Hooks mehr, sondern werden mit einem Dekorater ersetzt oder erweitert.

Pluginstruktur

Base File

Wie üblich besteht unser Plugin aus einer Base File, in unserem Fall einfach:

welche sich im Root Verzeichnis des Plugins unter custom/plugins/MiHoListingErweiterung befindet.

plugin.xml

Diese kommt ebenfalls in das Root Verzeichnis. Nun fehlen uns nur noch die die services.xml und die ListProductService.php – die services.xml enthält die Symfony DIC service container und in der File ListProductService erweitern wir die Produktliste um ein Attribut.

services.xml

Wir dekorieren hier also den ListProductService und zwar in MiHoListingErweiterung\Bundle\StoreFrontBundle\ListProductService 

Die verschiedenen StoreFrontBundle Services finden wir unter engine/Shopware/Bundle/StoreFrontBundle/services.xml

Wollten wir den kompletten Service überschreiben, würden wir das wie folgt tun:

 

ListProductService.php

Wie bereits gesagt erweitern wir hier den ListProductService. Ich habe hier im Beispiel keine wirkliche Logik eingebaut, lediglich ein Attribut (miho_listing_erweiterung) mit einem Array gesetzt.

Das ganze können wir dann im Frontend mit:

auslesen/ausgeben. Ob Ihr die Daten direkt im Plugin verarbeitet (Resources/views) oder im Theme ist dann euch überlassen.

Fazit

Besonders interessant ist das für alle Entwickler, welche vorab auf Events im Listing zugegriffen haben um Daten der Artikel zu erweitern. Beispielsweise über die Events

oder

dies hat für Shopware 5.2 noch funktioniert – in 5.3 müsst Ihr aber den Weg über die service extensions gehen.

 

Plugin Download

Ihr könnt das Plugin HIER herunterladen

Eine Antwort auf „Shopware Plugin 101 | Service extensions“

  1. Was muss denn für ein Template angelegt werden, um das Listing im Plugin überschreiben? Ich habe

    {$test = $sArticle.attributes.miho_listing_erweiterung->get(‚yourstuff‘)}
    {$test.0}

    in die Detailseite im Theme hinzugefügt. Hätte es aber gerne im Plugin, um es themeunabhängig zu haben.

Schreibe einen Kommentar

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