runi
1
Hallo,
wir selektieren nach eigenen Kriterien Produkte und möchten diese dann darstellen.
Dazu haben wir nach dieser Anleitung
die Produkte abgefragt. Das funktioniert soweit. Allerdings fehlen die Preis-Informationen.
Ich habe mal zum Vergleich auf der regulären Such-Seite gedumpt:
Da sind Felder wie calculatedPrices, calculatedPrice, calculatedCheapestPrice, etc. enthalten.
Bei meinem Product fehlen diese Daten:
Mein Code sieht so aus:
public function getProductById(SalesChannelContext $salesChannelContext, string $productId){
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('id', $productId));
$criteria->addAssociation('media');
$criteria->addAssociation('cover');
$criteria->addAssociation('prices');
$criteria->addAssociation('tax');
$product = $this->productRepository->search($criteria, $salesChannelContext->getContext())->first();
return $product;
}
Was fehlt hier? Wie bekomme ich die calculated Preise in mein Produkt?
Für die Darstellung würde ich gerne Folgendes benutzen:
{% sw_include '@Storefront/storefront/component/product/card/box.html.twig' with {
layout: boxLayout,
displayMode: displayMode
} %}
Aber hier steht dann bei Preis 0 EUR. Hier wird auf calculatedPrice zugegriffen.
runi
2
Hier die Lösung, falls es jemanden interessiert:
Der Hinweis von lukvai hier hat mich auf die richtige Fährte gebracht:
In der service-Definition muss es
<argument type="service" id="sales_channel.product.repository"/>
statt
<argument type="service" id="product.repository"/>
heißen.
In der Klasse dann auch entsprechend:
use Shopware\Core\System\SalesChannel\Entity\SalesChannelRepository;
...
public function __construct(SalesChannelRepository $productRepository)
{
...
Und in der search-function muss statt context salesChannelContext verwendet werden:
$product = $this->productRepository->search($criteria, $salesChannelContext)->first();
statt
$product = $this->productRepository->search($criteria, $salesChannelContext->getContext())->first();
Danke an lukvai