Private Methoden kannst du nicht hooken. Hier wirst du dir einen anderen Weg suchen müssen.
Viele Grüße
Danke für deine Antwort. Aber wie soll ich das machen?
Wenn ein Artikel in der Einkaufwelt angezeigt werden soll passiert doch folgendes: Es wird auf die private Funktion getArticle zugegriffen und (wenn man ein ausgewähltes Produkt hat) dann auf articleByNumber, welches ebenfalls privat ist. Danach wird es schon im Template angezeigt.
hängt etwas davon ab, was du machen möchtest - die sGetPromotionById, die da benuztzt wird, kannst du recht vielseitig erweitern, über Hooks, Events oder Dekorieren der darin aufgerufenen StoreFront-Komponenten.
bspw. über einen Hook auf \sArticles::sGetPromotionById oder Dekorierung des ListProduct-Service wie in Example plugin: storefront extension beschrieben. Du “weißt” da natürlich nicht, dass der Call über den Widget-Controller kam - das ist erstmal immer global. Aber normalerweise ist das ja sogar erwünscht, oder?
Ich muss die Funktion sGetPromotionById von sArtikel überschreiben. Da prüfe ich ab, ob der mode fix ist und kann da mein Artikel holen wie ich möchte.
Hallo [@Daniel Nögel](http://forum.shopware.com/profile/4010/Daniel Nögel “Daniel Nögel”), ich hätte noch eine Frage. Ich habe das Plugin jetzt so umgeschreiben, dass es auf sGetPromotionById geht. Hier der Quellcode:
An sich hat der Code den selben Stand, wie die Orginalfunktion nur habe ich das ‘$this’ durch ‘Shopware()->Modules()->Articles()’ ersetzt. Jetzt laden die Artikel in den Einkaufswelten nicht mehr. Die Fehlermeldung welche ich durch den Browser bekomme ist: Call to a member function notifyUntil()
Kann es damit zusammenhämgem dass notifyUntil private ist?
ja, so solltest du das nicht machen - wenn überhaupt kannst du den Eventmanager auch über Shopware()->Events()->notifyUntil aufrufen.
Generell ist ein Methoden-Replace ist immer etwas problematisch, einfach weil dafür dann viel kopiert wird und ggf. andere Plugins brechen. Falls du da mit einem after- oder before-Hook auch arbeiten kannst (oder sogar einem Event), wäre das sicher vorzuziehen.