AlsoBought Vorschläge manipulieren

Hey zusammen,

ich würde gerne die vorgeschlagenen Produkte auf der Detail-Seite eines Produkts leicht manipulieren. Leider bin ich recht neu in der Shopware-Entwicklung, habe allerdings schon herausgefunden, dass die vom System bereitgestellten Vorschläge im View-Assignment “boughtArticles” gespeichert werden. Wenn ich das Event “Enlight_Controller_Action_PostDispatch_Frontend_Detail” subscribe, scheint die Variable noch nicht gesetzt zu sein, zumindest kommt bei folgendem Aufruf “NULL” raus:

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

	public function onFrontendDetail(\Enlight_Event_EventArgs $arguments){
 
		$view = $arguments->get('subject')->View();
		$articles = $view->getAssign('boughtArticles');
		var_dump("Articles: ",$articles);

    }

Gibt es ein anderes Event, das hier besser wäre? Ich hatte schon mal auf einer anderen Seite was von “Enlight_Controller_Action_PostDispatch_Backend_AlsoBought” gelesen, allerdings scheint das beim Frontend Detail nicht aufgerufen zu werden. Habt ihr irgendwelche Tipps für mich?

Danke :slight_smile:

Was ich auch probiert habe, ist es mit einem Hook auf die spezifische Methode der sMarketing-Klasse zu implementieren:

	public static function getSubscribedEvents() {
		return [
			'sMarketing::sGetAlsoBoughtArticles::after' => 'onSGetAlsoBoughtArticles'
		];
	}
	
	public function onSGetAlsoBoughtArticles(Enlight_Event_EventArgs $args){
		file_put_contents('C:/xampp/htdocs/b.txt', "a");

	}

Hier wird aber die onSGetAlsoBoughtArticles() nie aufgerufen, auch nach Neu-Installation und Löschen des sMarketing-Proxies.

Habe das Problem nach einigem Ausprobieren endlich gefunden. Meine Lösung war, dass der Funktionsparametern bei Hooks vom Typ \Enlight_Hook_HookArgs sein muss und nicht Enlight_Event_EventArgs. Zum Überschreiben braucht man scheinbar auch ::replace, da beim call von ::after die Ausgabe der alsoBought-Articles schon passiert ist.