Shopware 5.3 Plugin 101 | Subscribers

Bisher haben wir in den ersten Schritten unsere Events direkt in der Plugin Basisklasse angelegt. Das ist für den Anfang sicherlich ausreichend. Das wird aber sehr schnell unübersichtlich, daher werde ich hier kurz den Web über Subscriber aufzeigen.

Struktur

Zuerst benötigen wir den Ordner Resources in unserem Plugin

/custom/plugins/MiHoDetailPageExtension/Resources

dort erstellen wir die Datei services.xml

touch services.xml

Die Grundstruktur sieht wie folgt aus:

<?xml version="1.0" encoding="utf-8"?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="mi_ho_detail_page_extension.subscriber.frontend" class="MiHoDetailPageExtension\Subscribers\Frontend">
            <tag name="shopware.event_subscriber" />
        </service>
    </services>
</container>

Die beiden Attribute id und class im Knoten service geben den Service Namen an.

Danach legen wir die Subscriber im Ordner Subscribers ab:

 

In diese können wir nun unsere simple Logik packen:

<?php
namespace MiHoDetailPageExtension\Subscribers;

use Enlight\Event\SubscriberInterface;

class Frontend implements SubscriberInterface
{


	public static function getSubscribedEvents()
	{
		return [
			'Enlight_Controller_Action_PostDispatch_Frontend_Detail' => 'onFrontendDetail'
		];
	}



	public function onFrontendDetail(\Enlight_Event_EventArgs $arguments){

		$view = $arguments->get('subject')->View();
		$container = Shopware()->Container();

		/** @var \Doctrine\DBAL\Connection $qb */
		$qb = $container->get('dbal_connection')->createQueryBuilder();

		$qb->select('name')
		   ->from('s_articles')
		   ->where('s_articles.id = :id')
		   ->setParameter('id', 5);

		$single = $qb->execute()->fetch();
		$view->assign('mein_produkt', $single);

	}
}

Wir nutzen hier weiterhin unsere getSubscribedEvents() Methode. Wichtig dabei ist, dass Ihr Enlight\Event\SubscriberInterface; einbindet und eure exakt so in der services.xml eintragt.

Das war es auch schon – nun könnt Ihr je nach Bedarf noch Subscriber für Backend, Search Bundle o.ä. anlegen.

 

Schreibe einen Kommentar

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