Für diejenigen die es interessiert, ist hier meine Lösung:
private EntityRepository $productRepository;
public function __construct(EntityRepository $productRepository)
{
$this->productRepository = $productRepository;
}
public static function getSubscribedEvents(): array
{
return [
BeforeLineItemAddedEvent::class => 'beforeLineItemAdded'
];
}
public function beforeLineItemAdded(BeforeLineItemAddedEvent $event)
{
// liefert neu hinzugefügtes LineItem im Warenkorb
$lineItem = $event->getLineItem(); // Shopware\Core\Checkout\Cart\LineItem\LineItem
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('id', $lineItem->getId()));
$criteria->setLimit(1);
// Hole Produkt-Datensatz zum LineItem
$products = $this->productRepository->search($criteria, $event->getContext()); // Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult
foreach ($products as $product) // $product = Shopware\Core\Content\Product\ProductEntity
{
// Checke packUnit-Felder für das LineItem
if (($product->getPackUnit() !== null) && ($product->getPackUnitPlural() !== null)){
$packUnits = array("packUnit"=>$product->getPackUnit(), "packUnitPlural"=>$product->getPackUnitPlural());
$lineItem->setPayloadValue("packUnits", $packUnits);
}
}
}
Der Zugriff im HTML-Template erfolgt über {{ nestedItem.payload.packUnits.packUnit }}
oder {{ nestedItem.payload.packUnits.packUnitPlural }}
Der Zugriff im TXT-Template erfolgt bei mir über {{ lineItem.payload.packUnits.packUnit }}
oder {{ lineItem.payload.packUnits.packUnitPlural }}
Beste Grüsse
Andreas