!EventComponentHandler kein Eventfilter in Shopware 5.3

Liebste Community,

ich habe ein Plugin welches die ArticleSliderEmotion Artikel über den „Shopware_Controllers_Widgets_Emotion_AddElement“ modifiziert, welches unter Shopware 5.2 einwandfrei läuft, unter Shopware 5.3 jedoch nicht mehr.

Auf folgender Seite steht geschrieben

Hint : Existing plugins using the old method below will still work in Shopware 5.3.

Dies kann ich leider nur halb bestätigen, da dieser Event Filter lediglich im EventComponentHandler registriert wird und nicht in den restlichen, nachfolgend aufgeführten, ComponentHandlern.

  • ArticleComponentHandler
  • ArticleSliderComponentHandler
  • BannerComponentHandler
  • BannerSliderComponentHandler
  • BlogComponentHandler
  • CategoryTeaserComponentHandler
  • Html5VideoComponentHandler
  • ManufacturerSliderComponentHandler

Das heißt über diesen in Shopware 5.2 noch funktionierenden Weg, geht es für diese EmotionComponents in Shopware 5.3 nicht mehr.

Nun die Frage, wie wäre das ideale Vorgehen um diesen EmotionComponentHandler zu beeinflußen? Kann ich den ArticleSliderComponentHandler über mein Plugin einfach überschreiben? (ohne Core Hack versteht sich) Wird dieser EventFilter für die anderen ComponentHandler noch nachgezogen @shopware‍? 

Beste Grüße

#edit Das Tags Input Feld in diesem Forum funktioniert auch nicht, und ein Klick auf „Zeige populäre Tags“ macht einen redirect auf diese Seite und löscht dabei den eingegeben Text.  Thumb-down

Hallo,

ab Shopware 5.3 sind die ComponentHandler alles Services, die über den DI-Container verfügbar sind. Siehe shopware/services.xml at 5.3 · shopware/shopware · GitHub
Entsprechend lassen sich die Handler nun einfach per Decorator Pattern anpassen. https://developers.shopware.com/developers-guide/plugin-system/#decorate-a-service

Viele Grüße aus Schöppingen

cool Michael Telgmann

Danke Michael, für deine schnelle Antwort.

Das heißt für mich im Umkehrschluss, dass es keine Abwärtskompatibilität zu 5.2 für die von mir aufgezählten ComponentHandler gibt, richtig?

Beste Grüße

Hallo mowlwurf,

konntest du dein Einkaufsweltenelement mit SW 5.3 lauffähig bekommen?

WIr sind gerade dabei einen Shop von 5.2.25 auf 5.4.5 zu aktualisieren und da funktionieren unsere Einkaufsweltenelemente nicht mehr, da wohl das Event „Shopware_Controllers_Widgets_Emotion_AddElement“ nicht mehr ausgelöst wird. Die Elemente sind noch als Legacy-Plugin entwickelt und wir möchten die Neuprogrammierung zum neuen Plugin-System nach Möglichkeit umgehen, da wir ja dann das alte Plugin löschen, und das neue Plugin dann neu installieren müssten was dann sicher Datenverlust nach sich ziehen würde.

Oder hat jemand einen Tipp, wie wir hier am besten vorgehen?

Grüße

Man kann das Decorate-Pattern auch im alten Plugin-Sytem anwenden @mosaiq_marcel‍ :

https://developers.shopware.com/developers-guide/legacy-plugin-system/#decorate-a-service

Viele Grüße

Hallo simkli,

Danke für die schnelle Antwort. Welchen Service müsste ich denn da dekorieren und wie genau?

Wir haben in unserem Fall ja individuell entwickelte Einkaufsweltenelemente. Eigentlich müsste ich ja lediglich für jedes Element einen eigenen ComponentHandler bereitstellen und diesen im DI-Container registrieren. Allerdings sind das noch Lecacy-Plugins und da gibt es noch keine service.xml. Stellt sich also momentan die Frage, wie ich den ComponentHandler mit dem Tag “shopware_emotion.component_handler” mit PHP im Di-Container registrieren kann.

@mosaiq_marcel‍ : Ich habe das Vorgehen eben noch einmal im Quellcode überprüft. Es sollte auch weiterhin mit dem Event gehen.

Sollte kein ComponentHandler registriert werden, greift automatisch der EventComponent-Handler, welcher folgendes Filter-Event aufruft:

Shopware_Controllers_Widgets_Emotion_AddElement

siehe hier: shopware/EventComponentHandler.php at 56df57575909854d2dec7fcba07500e27a3361ee · shopware/shopware · GitHub

Das heißt, es muss eigentlich weiterhin über dieses Event funktionieren. Ich denke aber, dass du es evtl. zu spät registrierst (bzw. dein Subscriber zu spät bei Shopware angemeldet wird). Wenn du es in der install-Methode mir registerEvent machst, sollte es auf alle Fälle weiterhin funktionieren.

Viele Grüße

 

Hallo simkli,

Danke für deine Hilfe, davon bin ich bislang auch ausgegangen. Allerdings wird die Methode EventComponentHandler::handle() überhaupt nicht ausgeführt :frowning: Das Event ist in der install-Methode registriert.

@mosaiq_marcel‍: Kannst du mal prüfen, ob es einen Eintrag in der s_core_subscribes-Tabelle gibt?

Viele Grüße

Es ist normal, dass der Event nicht gefeuert wird. Ab 5.3 gibs den Break, dass dieses Event nur für deine neuangelegten Elemente gefeuert wird…

Hallo,

hier gibt es weitere Informationen und Beispiele dazu: https://developers.shopware.com/developers-guide/custom-shopping-world-elements/#shopware-5.3-and-above .

Grüße

Sebastian

@mosaiq_marcel schrieb:

Stellt sich also momentan die Frage, wie ich den ComponentHandler mit dem Tag „shopware_emotion.component_handler“ mit PHP im Di-Container registrieren kann.

Ich stehe gerade vor dem selben Problem - hast Du das irgendwie lösen können?

Vielen Dank,
Nils 

Wurde hinzugefügt mit SW-22394 - Add event for registering component handler · shopware/shopware@11fc5eb · GitHub

Für die Nachwelt:

$this->subscribeEvent(‚Shopware_Emotion_Collect_Emotion_Component_Handlers‘,  ‚registerEmotionComponentHandler‘);

public function registerEmotionComponentHandler(\Enlight_Event_EventArgs $args)
{
    $result = new ArrayCollection();
    $result->add(new EmotionComponentHandler());

    return $result;
}

(Natürlich muss der EmotionComponentHandler ebenfalls implementiert sein, siehe z.B. Custom shopping world elements