Artikel Liste mit Bilder

Hallo Leute,

ich habe ein Plugin geschrieben, das auf der Startseite alle Artikel des (Sub-)Shops anzeigen soll (es sind nicht viele Artikel).
Aktuell hole ich die Daten mit: $articles = Shopware()->Modules()->Articles()->sGetArticlesByCategory();
Für das Design würde ich aber mehrere Bilder für die Anzeige brauchem und die bekomme ich so nicht her.

Die Beste Lösung wäre die Abfrage so zu erweitern, dass ich die selben Daten bekommen, nur eben zusätzlich einen Array „images“ mit den Bildern. Das ist aber leider nicht ganz so einfach, da ich die Methode für die Abfrage nicht gefunden habe. 
Alternativ dazu habe ich das eher schlechte Design mit sub-Abfragen aktuell implementiert (siehe unten), da ist aber noch das Problem aufgetaucht, dass ich zwar den Pfad der Bilder bekomme, der Pfad ist aber nicht vollständig und ich habe keine ösung gefunden, wie ich den vollständigen Pfad bekommen.

Hier die interessanten Teile von meinem Plugin Code:

 public function install()
    {
        $this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatch_Frontend_Index',
            'onFrontendPostDispatch'
        );

        $this->createConfig();

        return true;
    }

public function onFrontendPostDispatch(Enlight_Event_EventArgs $args)
    {
        $controller = $args->get('subject');
        $view = $controller->View();

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

	    $mediaService = $this->get('shopware_media.media_service');
        $categoryId = $this->Config()->get('categoryId');
	    $articles = Shopware()->Modules()->Articles()->sGetArticlesByCategory();


	      foreach ($articles['sArticles'] as &$article) {
		    //$article['images'] = Shopware()->Modules()->Articles()-> sGetArticlePictures($article["articleID"], false, 600, null, true ) ;
		    $builder = Shopware()->Models()->getRepository("Shopware\Models\Article\Article")->createQueryBuilder('articles');
		    $builder->select(['article', 'images', 'imageAttribute']);
		    $builder ->from('Shopware\Models\Article\Article', 'article')
		             ->leftJoin('article.images', 'images')
		             ->leftJoin('images.attribute', 'image.Attribute')
		             ->where('article.id = :articleId')
		             ->setParameters(['articleId' => $article["articleID"]]);
			$imagesObj = $builder ->getQuery() ->getArrayResult()[0]['images'];

		    $article['images'] = $imagesObj;
	    }

	    $view->assign('sCategoryId', $categoryId);
	    $view->assign('productBoxLayout', 'image');
	    $view->assign('sArticles', $articles['sArticles']);
    }

Vielen Dank für die Info / Hilfe - weiß jemand einen besseren Ansatz?

Roman

Also einen Schritt weiter…

Aus einem Plugin kann ich mit dem Search Bundle Artikel holen, was ja gut funktioneirt (sieche code unten), nur finde ich keine Information wo ich die Abfragen erweitern kann, ich bekomme jetzt die gleichen Daten wie über

 $articles = Shopware()-\>Modules()-\>Articles()-\>sGetArticlesByCategory();

also noch immer nur das eine Titelbild und keine weiteren Bilder.

Weiß jemand wie ich eine Datenbankabfrage erstellen kann, die mir eine Liste aus Artikeln zurückliefert (gleich wie sGetArticlesByCategory), nur dass da zusätzlich ein Property mit Bilder dran hängt (ich brauche genau die ersten 2 Bilder pro Artikel).

 

vielen Dank für die Hilfe,

Roman

 

$criteria = new Shopware\Bundle\SearchBundle\Criteria();

	    $context = $this->get('shopware_storefront.context_service')->getShopContext();
	    $service = $this->get('shopware_search.product_search');

	    /**@var $result ProductNumberSearchResult*/
	    $result = $service->search($criteria, $context);

	    $products = $this->get('legacy_struct_converter')->convertListProductStructList(
		    $result->getProducts()
	    );

	    

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

 

Hab’s selber rausgefunden:

in einem Plugin muss man über alle ListenArtikel iterieren und dann für jeden Artikel 

 $images = Shopware()-\>Modules()-\>Articles()-\>sGetArticlePictures($article['articleID'], false,0,null,true,false,false); $article['image1'] = $article['image']['thumbnails'][1]['source']; $article['image2'] = $images[0]['src'][1];

leider bekomme ich das nicht mit den Daten von Shopware()->Modules()->Articles()->sGetArticlesByCategory()[‘sArticles’]; hin, deshalb musste ich den ganzen Ablauf nachbauen… falls jeman ähniche Probleme hat:

/* plugin init*/

 public function install()
    {
        $this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatch_Frontend_Index',
            'onFrontendPostDispatch'
        );

        return true;
    }

private $legacyStructConverter;

	public function sOptimizeText($text)
	{
		$text = html_entity_decode($text, ENT_NOQUOTES, 'UTF-8');
		$text = preg_replace('@]*?>.*?\\1>@si', '', $text);
		$text = preg_replace('!]*?>!u', ' ', $text);
		$text = preg_replace('/\s\s+/u', ' ', $text);
		$text = trim($text);

		return $text;
	}

public function onFrontendPostDispatch(Enlight_Event_EventArgs $args)
    {
        $controller = $args->get('subject');
        $view = $controller->View();



	    $container = Shopware()->Container();
	    $this->legacyStructConverter = $container->get('legacy_struct_converter');
	    $this->config = $container->get('config');

	    $criteria = new Shopware\Bundle\SearchBundle\Criteria();
	    $context = $this->get('shopware_storefront.context_service')->getShopContext();
	    $service = $this->get('shopware_search.product_search');
	    $searchResult = $service->search($criteria, $context);

	    $articles = [];

	    foreach ($searchResult->getProducts() as $product) {
		    $article = $this->legacyStructConverter->convertListProductStruct($product);

		    if (!empty($categoryId) && $categoryId != $context->getShop()->getCategory()->getId()) {
			    $article['linkDetails'] .= "&sCategory=$categoryId";
		    }

		    if ($this->config->get('useShortDescriptionInListing') && strlen($article['description']) > 5) {
			    $article['description_long'] = $article['description'];
		    }
		    $article['description_long'] = $this->sOptimizeText($article['description_long']);

		    $images = Shopware()->Modules()->Articles()->sGetArticlePictures($article['articleID'],
			    false,0,null,true,false,false);
			$article['image1'] = $article['image']['thumbnails'][1]['source'];
		    $article['image2'] = $images[0]['src'][1];

		    $articles[$article['ordernumber']] = $article;
	    }
$view->assign('sArticles', $articles);
}