Variantenartikel werden auf Detailpage nicht dargestellt, wenn Hauptvariante keinen Bestand mehr hat

Hallo,

 

da offenbar in Shopware 5.1.2 bei dem von mir zu bearbeitenden Shop auf der Detailseite die Variantenartikel nicht dargestellt werden, wenn die Hauptvariante keinen Bestand mehr hat, bin ich dabei, eine Plugin-Lösung zu entwickeln. Gibt es für ersteres eine andere Lösung?

Dabei habe ich einen after-Hook für die sArticles-Methode getArticleById erstellt.

Leider wirkt sich folgender Code trotz gefundenen Daten für die Variante (mit var_dumps gecheckt) nicht aus.

Die private-Methoden der sArticles-Klasse kann ich von dem Hook-Proxy leider nicht aufrufen.

Vielleicht hat jemand einen Denkanstoß für mich. Hier mein Code:

assertVersionGreaterThen('4.3.0')) {
    		throw new \RuntimeException('At least Shopware 4.3.0 is required');
    	}
    
		$this->subscribeEvent(
		    'sArticles::sGetArticleById::after',
		    'afterGetArticleById'
		);

    	return true;
    }


/**
     * Helper method which returns a Query object in order to select the required variant data
     * @param $articleId
     * @param $offset
     * @param $limit
     * @return Doctrine\ORM\Query
     */
    protected function getVariantsQuery($articleId)
    {
        /** @var $article Shopware\Models\Article\Article */
        $article = Shopware()->Models()->find(
            '\Shopware\Models\Article\Article', $articleId
        );
 
        $builder = Shopware()->Models()->createQueryBuilder();
        $builder->select(array('detail', 'options'))
                ->from('Shopware\Models\Article\Detail', 'detail')
                ->leftJoin('detail.configuratorOptions', 'options')
                ->where('detail.articleId = :articleId')
                ->andWhere('detail.active = true ')
                ->setParameters(array('articleId' => $articleId));
 
        if ($article->getLastStock()) {
            $builder->andWhere('detail.inStock > 0');
        }
 
        return $builder->getQuery();
    }
	
	public function afterGetArticleById(Enlight_Hook_HookArgs $arguments)
	{
	    if (count($arguments->getReturn()) == 0) { 
		    $articleId = $arguments->getId();
		 	$sCategoryID = $arguments->getSCategoryID();
			$number = $arguments->getNumber();
			$selection = $arguments->getSelection();
			
			$subject = $arguments->getSubject();
			
			// nächste Variante mit Bestand herausfinden
			
			$query = $this->getVariantsQuery($articleId);
			
			$query->setHydrationMode(
	            \Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY
	        );
	 
	        $paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query);
	 
	        $totalResult = $paginator->count();
	        $variants = $paginator->getIterator()->getArrayCopy();
			#var_dump($variants); die;
			foreach ($variants as $variant) {
				#var_dump($variant); die;
				if ($variant['inStock']>0) {
					// auf nächste Variante verlinken, da Bestand > 0
			
			        /*$sql= "SELECT article.*, detail.*
			               FROM s_articles article
			               INNER JOIN s_articles_details detail
			                  ON detail.articleID = article.id
			               WHERE article.id = ?";
			 
			        $articleData = Shopware()->Db()->fetchRow($sql, array($variant['articleId']));
			        #$articleData['articleName'] = 'Tutorial Artikel';
			 		#var_dump($articleData); die;
			 		
			 		$categoryId = Shopware()->Modules()->Categories()->sGetCategoryIdByArticleId($variant['articleId']);
					#$selection = $product->getSelectedOptions();
					$selection = array();
					
			        $product = $subject->getLegacyProduct(
			            $product,
			            $categoryId,
			            $selection
			        );

					$arguments->setReturn($product);
			 		
			        #$arguments->setReturn($articleData);*/
			        
			        $argsNew = $arguments->getArgs();
					#$argsNew[0] = $variant['articleId'];	// Artikel-ID ersetzen mit Variante
			        var_dump($argsNew); die;
					
			        $arguments->setReturn(
			            $arguments->getSubject()->executeParent(
			                $arguments->getMethod(),
			                $argsNew
			            )
			        );
			        
					break;
				}
			}
		}
	}
	
// ... Plugin-Code