Nachgelade Artikeln im Listing werden nicht mehr duchr Plugins überschrieben nach Update auf 5.4.6

Hallo Zusammen,

wir sind von 5.2 auf 5.4 heochgegangen, seit dem greifen unsere Anpassungen bei den nachgeladenen Artikeln nicht mehr.

Unsere Plugins hängen sich bei dem Event “Enlight_Controller_Action_PostDispatch_Frontend_Listing” ein und greifen die “index”-Action ab. 

Früher reichte es sich zusätlich mit der selben Methode beim “Enlight_Controller_Action_PostDispatch_Widgets_Listing” einzuhängen (bei der “ajaxListing”-Action) damit die selben Anpassungen auch für die nachgeladen Artikeln gegriffen haben:

	public function install() {
		$this->subscribeEvent(
				'Enlight_Controller_Action_PostDispatch_Frontend_Listing',
				'onFrontendPostDispatch', 1
		);
		
		$this->subscribeEvent ( 'Enlight_Controller_Action_PostDispatch_Widgets_Listing',
				'onFrontendPostDispatch', 1
		);
		return true;
	}

Seit dem Update wird die  ajaxListing-Action aus den Frontend gar nicht aufgerufen, sondern die “listingCount”-Action. Es bringt aber gar nichts sich dort einzuhängen:

	public function onFrontendPostDispatch(Enlight_Event_EventArgs $arguments)
	{
		/**@var $controller Shopware_Controllers_Frontend_Index */
		$controller = $arguments->getSubject();
		$view = $controller->View();
		$request = $controller->Request();
		
		
		if(!($request->getModuleName() == "frontend" && $request->getControllerName() =="listing" && $request->getActionName() == "index") &&
			 !($request->getModuleName() == "widgets" && $request->getControllerName() =="Listing" && $request->getActionName() == "ajaxListing") &&
			 !($request->getModuleName() == "widgets" && $request->getControllerName() =="listing" && $request->getActionName() == "listingCount")
			){
			return;
		}
		$articles = $view->getAssign('sArticles');
		$articles = ......hier zusätzliches Zeugs laden....

		//Add our plugin template directory
		$view->addTemplateDir($this->Path() . 'Views/');
		$view->extendsTemplate('frontend/listing/extension.tpl');
		$view->assign('sArticles', $articles);
	}

Was mache ich falsch? Wie kriege ich in Shopware 5.4 die nachgeladene Artikeln erweitert?

Danke und Gruß, Nikolaj

Subscribe dich auf das Event Shopware_Controllers_Widgets_Listing_fetchListing_preFetch

1 Like

vielen Dank für die erstaunlich schnelle Antwort!!!

leider hat sich an dem Verhalten nicht geändert. Für meinen Test habe ich die diese „Action-Sperre“

		if(!($request->getModuleName() == "frontend" && $request->getControllerName() =="listing" && $request->getActionName() == "index") &&
			 !($request->getModuleName() == "widgets" && $request->getControllerName() =="Listing" && $request->getActionName() == "ajaxListing") &&
			 !($request->getModuleName() == "widgets" && $request->getControllerName() =="listing" && $request->getActionName() == "listingCount")
			){
			return;
		}

herausgenommen. Trotzdem werden die nachgeladenen Artikel nicht angepasst…

Bist du auf der aktuellsten 5.4 Version? Das Event kam in einer Zwischenversion von 5.4 rein

Ich bin auf 5.4.6, also ja, sehr aktuell.

Wo kann ich mich denn, zu dem Event schlaumachen? Ein klitzekleines Codebeispiel, der z.B. bei den nachgeladenen Artikeln ein zusätzliches “< h1 >”-Element setzt wäre eine absolute Klasse…

Danke und Gruß, Nikolaj Ruppert

Wieso machst du eigentlich das ganze im PostDispatch Event? Nimm doch das Event Legacy_Struct_Converter_Convert_List_Product dann bist du global bei allen Artikel Boxen…

3 Likes

Danke, 

aber das ist doch ein Filter-Event, oder? Mein PlugIn muss etwas an der Darstellung  ändern. Ich lade zwar schon auch züsätzliche Daten dazu, aber primär muss ich die Darstellung (Dinge hinzufügen, ausblenden, css-Datei einbinden…) anpassen. Bei dem Event habe ich doch gar kein View-Objekt, sodass ich “$view->addTemplateDir…” und “$view->extendsTemplate (…” machen kann.

Oder liege ich falsch?

Warum mache ich “das ganze im PostDispatch Event”? Weil es für mich damals (vor 20 Updates) eine intuitive und verständliche Lösung war. Was wäre denn ein besserer (oder irgendein) Weg?

Schöne Grüße, Nikolaj Ruppert

Up!

Die Frage ist noch sehr aktuell. Erweiterung bei Nachgeladenen Artikeln muss doch auch in der neueren Version funktionieren!

Liebe Shopware-Entwickler, wie mache ich das nun nach dem Udate?

Danke und Gruß,

Nikolaj Ruppert

Wäre auch an einer Lösung interessiert. 

Gruß 

Carsten

@Shyim schrieb:

Wieso machst du eigentlich das ganze im PostDispatch Event? Nimm doch das Event Legacy_Struct_Converter_Convert_List_Product dann bist du global bei allen Artikel Boxen…

After 4 hours of working, i have this nice and clean event that solve all my issues :)  

 

public static function getSubscribedEvents() { return [‚Legacy_Struct_Converter_Convert_List_Product‘ => ‚addFlags‘,]; } public function addFlags(\Enlight_Event_EventArgs $args) { $article = $args->getReturn(); if($article[‚flags‘]) { // remove first and last „|“ $flagsId = substr($article[‚flags‘], 1, -1); $flags = explode(’|’,$flagsId); $pvr = $this->getPropertyValueRepository(); $flagsArray = ; foreach ($flags as $flagId) { $propertyValue = $pvr->findOneBy([‚id‘ => $flagId]); $flagsArray = $propertyValue->getValue(); } $article[‚rausch_flags‘] = $flagsArray; } return $article; }

private function getPropertyValueRepository(){ return Shopware()->Models()->getRepository(’\Shopware\Models\Property\Value’); }

1 Like