Hallo zusammen,
ich würde gerne die Private Methode buildTextDynamic in der Klasse AdditionalTextService Hooken.
(’\engine\Shopware\Bundle\StoreFrontBundle\Service\Core\AdditionalTextService.php’)
Ich bekomme ich es mit der Standard Anleitung noch nicht gebacken.
Es wäre super wenn ich ein paar Anreize bekommen könnte wie ich das ganze angehen kann.
MfG,
ipsKenni
shyim
2
Du musst es dekorieren siehe dazu Service extensions
Hey,
danke für deine schnelle Antwort.
Ich habe das Beschriebene getestet komme aber eben nicht darauf was ist falsch mache.
Ordnerstruktur:
- TestCardAttribute.php
- Resources\service.xml
- Bundle\StoreFrontBundle\AdditionalTextService.php
service.xml:
AdditionalTextService.php:
configuratorService = $configuratorService;
}
/**
* {@inheritdoc}
*/
public function buildAdditionalText(ListProduct $product, ShopContextInterface $context)
{
$products = $this->buildAdditionalTextLists([$product], $context);
return array_shift($products);
}
/**
* {@inheritdoc}
*/
public function buildAdditionalTextLists($products, ShopContextInterface $context)
{
$required = [];
foreach ($products as &$product) {
if (!$product->getAdditional()) {
$required[] = $product;
}
}
if (empty($required)) {
return $products;
}
$configurations = $this->configuratorService->getProductsConfigurations(
$required,
$context
);
/** @var $required ListProduct[] */
foreach ($required as &$product) {
if (!array_key_exists($product->getNumber(), $configurations)) {
continue;
}
$config = $configurations[$product->getNumber()];
$product->setAdditional($this->buildTextDynamic($config));
}
return $products;
}
/**
* @param Group[] $configurations
*
* @return string
*/
private function buildTextDynamic($configurations)
{
$text = [];
foreach ($configurations as $group) {
foreach ($group->getOptions() as $option) {
$text[] = $option->getName();
}
}
return implode(', ', $text);
}
}