Eigene Emotion Komponenten in sw5

Liebes Forum :slight_smile: :slight_smile: Hier ist beschrieben, wie man Emotion Elemente selbst erstellt: http://community.shopware.com/_detail_1459.html Die Anleitung scheint aber noch nicht für sw 5 aktualisiert zu sein. Es gibt auch Beispiele. Das Beispiel VimeoWidget, funktioniert soweit, nur die Templetedatei für das Element wird nicht erkannt. Man kann sich damit behelfen, dass man die Element Templatedatei in den Ordner mit den Komponenten schiebt (Themes/Frontend/MeinTemplate/widgets/emotion/components/ ). Aber das ist ja nicht im Sinne der Pluginentwicklung. In shopware 4 hat die Übergabe der .tpl Datei so funktionioniert: ... $component = $this-\>createEmotionComponent( array( 'name' =\> 'Vimeo Video Widget', 'template' =\> 'emotion\_vimeo', 'description' =\> 'A small vimeo widget...') ); Damit wird das Template ‚emotion_vimeo.tpl‘, das im view/…/ im Plugin ist als Frontendtemplate bestimmt. In sw5 geht das so nicht mehr, wie macht man das jetzt? Liebe Grüße Kerstin

Bist du hier weiter gekommen? Ich habe gerade das selbe Problem. Ich bekomme es irgendwie nicht hin, dass die Templatedateien aus dem Pluginverzeichnis ([Plugin-Pfad]/Views/widgets/emotion/components/) geladen werden. Wenn man die im Theme ablegt (/themes/Frontend/Child/widgets/emotion/components) funktioniert es. Ich habe mich beim hinzufügen der Templates an den Quick-Start Guide gehalten https://developers.shopware.com/develop … t-callback Durch den Chat bin ich schon darauf gestoßen worden, dass der Plugin-Template-Pfad(addTemplateDir) ggf. nicht korrekt hinzugefügt wird, weil die Events bei den Widgets anders sind. Ich habe dann ein paar Events durchprobiert (Enlight_Controller_Action_PostDispatch_Widgets_Emotion, Enlight_Controller_Action_PostDispatchSecure_Widget, …), bekomme es aber irgendwie nicht hin, die Templates aus dem Pluginpfad zu laden. Hat da jemand eine Idee?

Also die Templatedatei zu laden war gar kein Problem. Hast du mal das Beispiel VimeoWidget getestet? Du kannst dein Plugin einfach analog aufbauen. Man muss nur sehr genau auf den richtigen Pfad achten, aber das sieht man ja in dem Beispiel. http://community.shopware.com/_detail_1459.html (Download des Beispiels am Ende) Mein Problem ist das Einbinden von css und js. Damit bin ich leider noch nicht weitergekommen. Aber vielleicht erbarmt sich ja jetzt jemand… LG Kerstin

[quote]Mein Problem ist das Einbinden von css und js. Damit bin ich leider noch nicht weitergekommen. Aber vielleicht erbarmt sich ja jetzt jemand…[/quote] Was wurde denn bisher versucht? Das einbinden von JS und LESS ist im übrigen in den devdocs gut beschrieben.

oh, ich hab mir noch einmal meinen Anfangspost durchgelesen. War am Anfang scheinbar doch ein Problem, ist aber eigentlich ganz einfach, das Template wird automatisch eingebunden. Weiss nicht mehr was da genau war. Das Einbinden von css und JS in ein Plugin ist gut beschrieben und eigentlich gar kein Thema. Aber ein Einkaufselement wird ja mehrfach eingebunden. Und damit dann auch mehrfach das css und js. Wie geht man da am besten vor? LG Kerstin

deine Controller/actions werden an mehreren stellen eingebunden jeweils wenn die Events gefeuert werden. Deine JS & LESS welche im Plugin eingebunden sind werden an den Compiler gegeben und nicht mehrfach eingebunden. Grundlegend finde ich einfach das hier im Forum öfter um Hilfe gefragt wird aber selten die Eigeninitiative gezeigt wird btw. Code Posts stattfinden wie z.B. in php Foren sonst üblich. Das finde ich schade deswegen spreche ich das halt an. Wenn es ein schon ein Community Forum ist helfen Code Posts eben auch anderen Usern zum besseren Verständnis weiter. LESS Dateien einbinden /\*\* \* Registers all necessary events and hooks. \*/ private function subscribeEvents() { // Subscribe the needed event for less merge and compression $this-\>subscribeEvent( 'Theme\_Compiler\_Collect\_Plugin\_Less', 'addLessFiles' ); } /\*\* \* Provide the file collection for less \* \* @param Enlight\_Event\_EventArgs $args \* @return \Doctrine\Common\Collections\ArrayCollection \*/ public function addLessFiles(Enlight\_Event\_EventArgs $args) { $less = new \Shopware\Components\Theme\LessDefinition( //configuration array(),

[quote=„Kerstin83“]Also die Templatedatei zu laden war gar kein Problem. Hast du mal das Beispiel VimeoWidget getestet? Du kannst dein Plugin einfach analog aufbauen. Man muss nur sehr genau auf den richtigen Pfad achten, aber das sieht man ja in dem Beispiel. http://community.shopware.com/_detail_1459.html (Download des Beispiels am Ende)[/quote] Ja daran habe ich mich auch orientiert. Es funktioniert bei mir aber leider nicht, wenn ich die Templates im Pluginpfad ablege. :frowning: Dein Post am Anfang las sich irgendwie so als hättest du das gleich Problem, daher hab ich den Thread noch mal ausgegraben. :sunglasses:

mir ist wieder eingefallen, was bei mir der Fehler war. Ich hatte das Plugin im Ordner Frontend geladen (weil die meisten dort sind). Gehört aber unbedingt in Backend. Vielleicht ist das bei dir ja auch so. Liebe Grüße Kerstin

1 „Gefällt mir“

Frontend / Backend mach eigentlich keinen Unterschied, das ist nur für die Ordnung.

Das dachte ich auch. Ich habe es eben noch einmal getestet. Ist definitiv ein Unterschied! Wenn es unter Frontend liegt gibt das einen Fehler. LG Kerstin

Sollte das so sein ist es in den devdocs falsch beschrieben… habs noch nie getestet.

Es ist egal, ob man sie unter Community, Default oder Local speichert. Backend/Frontend ist nicht beliebig. Hängt wahrscheinlich mit der class in der Boostrap.php zusammen, z.B.: class Shopware_Plugins_Backend_EmotionHtml_Bootstrap

Moin, danke für die Hilfe. Frontend/Backend war es bei mir nicht. Ich hatte es zwischendrin wohl schon, mit dem Event “Enlight_Controller_Action_PostDispatch_Widgets_Emotion” funktioniert es bei mir. Das Problem war wohl, dass das Plugin nicht aktiviert war - dann kann man die Elemente zwar im Einkaufswelt-Editor hinzufügen, sie werden aber im Frontend nicht angezeigt. :wink: