Der einfachste Weg um ein „vollständiges“ formatiertes Produkt über den Productservice zu erhalten ist über die Artikelnummer.
Dazu wird zuerst das Produkt über den Service als Objekt geholt:
$_product = $this->container->get('shopware_storefront.product_service')->get(
$article_sku,
$this->container->get('shopware_storefront.context_service')->getProductContext()
);
Danach wird mit dem Struct-Converter alles für das Template strukturiert und vorformatiert:
$productArray = $this->get('legacy_struct_converter')->convertListProductStruct($_product);
Damit das Produkt auch verlinkt werden kann, ermitteln wir dazu direkt noch die SEO-URL:
$productArray['link'] = $this->Front()->Router()->assemble([
'controller' => 'detail',
'sArticle' => $_product->getId(),
'number' => $_product->getNumber(),
'title' => $_product->getName(),
]);
Komplett könnte das etwa so aussehen:
try {
$_product = $this->container->get('shopware_storefront.product_service')->get(
$article_sku,
$this->container->get('shopware_storefront.context_service')->getProductContext()
);
if(!is_object($_product))
{
continue;
}
$productArray = $this->get('legacy_struct_converter')->convertListProductStruct($_product);
$productArray['link'] = $this->Front()->Router()->assemble([
'controller' => 'detail',
'sArticle' => $_product->getId(),
'number' => $_product->getNumber(),
'title' => $_product->getName(),
]);
$view->assign('sArticle', $productArray);
} catch(Throwable $t) {
echo "Captured Throwable: " . $t->getMessage() . PHP_EOL;
}