Hilfe zur Selbsthilfe: Listing mit Infinite Scrolling auf den View zugreifen geht nicht

Hallo, 

ich suche Hilfe zur Anpassung meines Plugins an die SW 5.3. Ich hänge hierzu mal den letzten Beitrag meines Selbstgespräches unter https://forum.shopware.com/discussion/47150/listing-mit-infinite-scrolling-auf-den-view-zugreifen-geht-nicht-mehr-ab-der-5-3-rc1 hier an. Ich selbst komme nicht mehr weiter und bin auf Hilfe in dieser Sache angewiesen - dafür wäre ich auch Bereit etwas Geld in die Hand zu nehmen. Wäre super, wenn jemand mir meine Fragen so beantworten könnte, dass ich meine unten stehende Version des Plugins so anpassen kann, dass es wieder funktioniert.

 

Ich hänge hier mal eine reduzierte Version der Bootstrap.php an. Vll. wird das Problem dann etwas deutlicher: 

Frage: 

  1. Wieso funktioniert die Funktion  addXYListing nicht bei dem Event Enlight_Controller_Action_Widgets_Listing_listingCount?
  2. Weshalb gibt es nach dem Event Shopware_Controllers_Widgets_Listing::listingCountAction keine Template Vars in der Console, sondern nur einen JSON-String (siehe Bilder im Beitrag)
  3. Was muss ich tun, damit ich auch bei den nachgeladenen Objekten den Wert an assignen kann?

 

subscribeEvent(
			'Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing',
			'onFrontendPostDispatch'
		);

		/* 5.3 init onFrontendPostDispatch on infinite Scroll */
		$this->subscribeEvent(
			'Enlight_Controller_Action_Widgets_Listing_listingCount',
			'onFrontendPostDispatch'
		);


        /* add Event to get article addXY data on listing */
        $this->subscribeEvent(
        	'Enlight_Controller_Action_PostDispatchSecure_Frontend_Listing',
			'addXYListing'
		);

		/* 5.3 - add Event to get article addXY data on infinite Scroll */
		$this->subscribeEvent(
			'Enlight_Controller_Action_Widgets_Listing_listingCount',
			'addXYListing'
		);

        return true;
    }

    /**
    * Plugin activation
     * @return array
     */
    public function enable()
    {
		return ['success' => true, 'invalidateCache' => $this->getInvalidateCache()];
    }

	/* Plugin Deinstallation */
	public function uninstall()
	{

		return ['success' => true, 'invalidateCache' => $this->getInvalidateCache()];
	}

	/**
	 * Helper method to return all the caches, that need to be cleared after uninstalling/enabling/disabling a plugin
	 *
	 * @return array
	 */
	private function getInvalidateCache()
	{
		return ['frontend', 'backend', 'theme'];
	}

    public function addXYListing(Enlight_Event_EventArgs $arguments)
    {

		$subject = $arguments->getSubject();

        $view = $subject->View();

        $sArticles = $view->getAssign('sArticles');

        if(is_array($sArticles)) {
            foreach ($sArticles as &$article) {
                $sqlArticleId = $article['articleID'];
                $sql = "SELECT meta_description FROM s_articles_supplier WHERE articleID = $sqlArticleId";
                $fields = Shopware()->Db()->fetchOne($sql);
                $article['meta_description'] = $fields;
            }
            unset($article);
        }

        $view->assign('sArticles', $sArticles);

	}

    public function onFrontendPostDispatch(Enlight_Event_EventArgs $args)
    {

		/** @var \Enlight_Controller_Action $controller */
		$controller = $args->get('subject');

		$view = $controller->View();

		$view->addTemplateDir(
			__DIR__. '/Views'
		);

	}
}

Hallo,

ich habe mir den Quellcode nicht im Detail angesehen. Es sieht ganz danach aus, als würdest du noch das alte Plugin-System verwenden. Ab Shopware 5.2 steht ein neues Plugin-System zur Verfügung (siehe https://developers.shopware.com/developers-guide/plugin-system/). Eventuell hilft das ja schon bei der Behebung des Problems.

Gruß,
Igor