Author in Emotion Blog Component ausgeben

Hallo Community, ich versuche gerade in widgets/emotion/components/component_blog.tpl den Namen des Authors auszugeben, doch leider erhalte ich nur die authorId und ich weiß leider nicht, wie ich mit dieser den Author abfragen kann. Im Template des Blogs selbst (frontend/blog/box.tpl) ist der Author bei den Articles enthalten. Kann mir hierbei jemand helfen? Danke im voraus und viele Grüße Andreas

Wenn in der Data Variable (prüfen über {$Data|print_r}) wirklich nur die ID drin steht müsstest du dir ein Plugin bauen welches den dazugehören Namen aus der s_core_auth Tabelle ausliest und mit in die Variable schreibt. Auf das Event Shopware_Controllers_Widgets_Emotion_AddElement registrieren, prüfen ob es sich um ein Blog-Element handelt, wenn ja, Namen aus der Datenbank lesen und hinzufügen.

Vielen Dank, werde ich mal ausprobieren und hier bescheid geben.

Jetzt habe ich ein Plugin gebaut, dass auf das Event Shopware_Controllers_Widgets_Emotion_AddElement registriert ist Enlight()-\>Events()-\>filter('Shopware\_Controllers\_Widgets\_Emotion\_AddElement', $data, array('subject' =\> $this, 'element' =\> $element)); und frage vorher ab, ob es sich um ein emotion-components-blog handelt. Doch nun stoße ich auf das Problem, wie ich die Informationen über die Blog-Artikel abfragen und ändern kann. In “getReturn()” erhalte ich nur objectId, entry_amount und thumbnail_size: array (size=3) 'objectId' =\> string '8038da89e49ac5eabb489cfc6cea9fc1' (length=32) 'entry\_amount' =\> string '4' (length=1) 'thumbnail\_size' =\> string '2' (length=1) In “getElement()” erhalte ich auch nichts brauchbares: array (size=8) 'id' =\> int 2013 'emotionId' =\> int 13 'componentId' =\> int 6 'startRow' =\> int 1 'startCol' =\> int 1 'endRow' =\> int 6 'endCol' =\> int 2 'component' =\> array (size=8) 'id' =\> int 6 'name' =\> string 'Blog-Artikel' (length=12) 'convertFunction' =\> string 'getBlogEntry' (length=12) 'description' =\> string '' (length=0) 'template' =\> string 'component\_blog' (length=14) 'cls' =\> string 'blog-element' (length=12) 'xType' =\> string 'emotion-components-blog' (length=23) 'pluginId' =\> null In getRequest, getResponse, getSubject finde ich leider auch nichts relevantes um auf die benötigten Daten zuzugreifen, obwohl getSubject() ziemlich groß ist, aber ich nicht weiß, wo ich genau suchen muss. Ich habe auch mal in den Emotion.php Controller geschaut und wenn ich nach dem Hook und nach der Codezeile if (!empty($component['convertFunction'])) { $data = $this-\>$component['convertFunction']($data, $this-\>Request()-\>getParam('categoryId'), $element); } das Element $data ausgebe, habe ich alle relevanten Informationen und könnte diese dann erweitern. Ich selbst kann aber “getBlogEntry” nicht aus dem Plugin aufrufen, weil der ProxyController die Funktion nicht kennt. Vielleicht kann mir jemand den Weg dorthin zeigen? Vielen Dank im voraus und beste Grüße Andreas

Kann mir bitte irgendwer hierbei weiterhelfen und weiß vielleicht jemand die Lösung, wie ich die korrekten Daten erhalte, oder mir aufzeigen, was ich falsch mache? Danke und beste Grüße Andreas

Hallo Andreas, ich dachte, dass du über getReturn() an die Daten kommst, hatte dabei aber nicht auf dem Schirm, dass die eigentlich interessanten Daten tatsächlich erst nach dem Event hinzugefügt werden. Vielleicht hilft dir dann das Hook-System? http://wiki.shopware.de/Shopware-4-Even … html#Hooks Die Funktion die die Blogeinträge ausliest müsste die getBlogEntry im Emotion-Controller sein, den du ja auch schon gefunden hast. Ich würde mal versuchen mich mit einem After-Hook auf die Funktion zu registrieren, habe jetzt allerdings nicht getestet ob das so wirklich funktioniert.

Danke für die Antwort. Grundsätzlich würde es damit gehen, wenn die Funktion getBlogEntry in der Klasse Shopware_Controllers_Widgets_Emotion nicht private wäre. Wenn ich diese auf public setze, dann erhalte ich genau die Daten, die ich benötige, aber das wäre eine Anpassung direkt im Core, was man nicht tun sollte. Wenn ich direkt auf die indexAction zugreife, erhalte ich leider keine Daten, da hier kein return statt findet und der Hook wird nur einmal aufgerufen beim ersten Emotion-Element. Daher erhalte ich mit folgendem Code nur Daten, die ich nicht gebrauchen kann (HTML-Element): $args-\>getClass()-\>View()-\>Template()-\>tpl\_vars['sEmotions'] Probiert habe ich diese beiden: $this-\>subscribeEvent('Shopware\_Controllers\_Widgets\_Emotion::getBlogEntry::after','getblogEntries'); $this-\>subscribeEvent('Shopware\_Controllers\_Widgets\_Emotion::indexAction::after','getblogEntries');

Ah ok, dass das mit private Funktionen so nicht geht war mir nicht bewusst. Eine Möglichkeit die mir jetzt noch einfällt wäre ein eigenes Einkaufswelten Element zu erstellen das im Prinzip das gleiche macht wie das Standard-Element und zusätzlich den Namen ausliest. Ansonsten bin ich auch überfragt…

1 Like

[quote=“t2oh4e”]Ah ok, dass das mit private Funktionen so nicht geht war mir nicht bewusst. Eine Möglichkeit die mir jetzt noch einfällt wäre ein eigenes Einkaufswelten Element zu erstellen das im Prinzip das gleiche macht wie das Standard-Element und zusätzlich den Namen ausliest. Ansonsten bin ich auch überfragt…[/quote] Danke für deine mühe und geduld :slight_smile: Dann werde ich es mal so machen.

Juhuu, endlich geschaft. Habe eigenes Blog Component angelegt, dass nun andere Daten “holt”. Danke für deine Geduld und Hilfe.