Varianten in listing

Hallo,

Wir versuchen, alle Varianten (mit Konfigurator values) in einem Listing über ein Plugin abzurufen. Gibt es eine Methode, die wir direkt verwenden können, um diese Daten zu erhalten?

Zum Hinzufügen von Daten verwenden wir normalerweise diese Art von Code im Plugin aber $article ist ein array.
Wir können es erreichen, indem wir dbase-queries hinzufügen, aber wir fragen uns, ob wir es einfacher machen können.

public function onPostDispatchListing(Enlight_Event_EventArgs $args)
    {
        // get config
        $config = $this->container->get('shopware.plugin.cached_config_reader')->getByPluginName($this->getName(), $this->container->get('Shop'));

        // get class
        $sArticles = $args->getSubject();

        // get current article
        $article = $args->getReturn();

        $article['extraData'] = 'lorem ipsum';

        return $article;
}

Vielleicht is est mochlich via ein Service?

public function getList(array $numbers, ProductContextInterface $context)
    {
        $products = $this->service->getList($numbers, $context);

        $productContext = $this->contextService->getShopContext();

        return array_map(
            function (ListProduct $product) use ($productContext) {

                $variants = $product->getVARIANTS();

                if (!$variants)
                {
                    $product->addAttribute('myData', new Attribute([]));
                }

                else {

                    $product->addAttribute('myData', new Attribute(['variants' => $variants]));
                }

                return $product;
            },
            $products
        );

    }

 

Aber welcher method brauchen wir fur $variants = $product->getVARIANTS(); ?

Danke!!

In der neuen RC 5.4 wird das Listing um Varianten erweitert.

https://community.shopware.com/_detail_2053.html

Schau doch mal dort im Source-Code wie Shopware das macht.

Es scheint dabei nur um die Filteroptionen zu gehen.

Diese werden dann anscheinend beim createListingCriteria während der sGetArticlesByCategory berücksichtigt.

Aber die Informationen über Varianten der einzelnen Artikel werden nicht in den View gelegt.

Ich habe grade das gleiche Problem und werde wohl ein Plugin schreiben und die Daten jedem Artikel des Views einzeln zuweisen.

 

Bin gerne für Vorschläge offen.

 

Hallo,

 

der ProductList Service muss dekoriert werden mit der Methode getList. Denn Shopware holt standard gemäß nur die Artikel OHNE Varianten. Man muss also quasi in seinem dekorierten Service den Query so ergänzen, dass auch Varianten im Ergebnis mit zurück geliefert werden.

 

 

MFG

 

derwunner

1 Like

Bin auch auf der Suche nach einem Äquivalent zu $product->getVARIANTS(); 

 

Ah, gefunden in der Article Resource. Leider Protected :) 

    /**
     * Helper function which loads all non main variants of
     * the passed article id.
     * Additionally the function selects the variant prices
     * and configurator options for each variant.
     *
     * @param int $articleId
     *
     * @return array
     */
    protected function getArticleVariants($articleId)
    {
        $builder = $this->getRepository()->getVariantDetailQuery();
        $builder->andWhere(‘article.id = :articleId’)
            ->andWhere(‘variants.kind = 2’)
            ->setParameter(‘articleId’, $articleId);

        return $this->getFullResult($builder);
    }