die Funktion „searchMedia“ ist ja bekannt und man kann mit ihr ein Bild und dessen Kontext über die Id ausgeben. Gibt es eine ähnliche Funktion „searchProduct“ mit der man ggf. ein Produkt und dessen Eigenschaften erhält?
Das Ziel wäre es anschließend Attribute wie den Preis, oder Bilder auszugeben.
Bsp.:
„{% set media = searchMedia([ImageId], context.context) %}“
→
ca. „{% set product = searchProduct([productId], context.context) %}“
Genau diese Frage wollte ich gerade auch stellen mit searchCategory([categoryId], context.context)
Hintergrund, wir haben verlinkte Kategorien, die wir in einem Block in einer einzelnen Kategorie darstellen wollen, diese verlinkten Kategorien werden über ein Custom-Field eingetragen…leider bekommen wir nur die IDs der Kategorien raus, aber nicht den Titel / Link
Danke @abdullah die Links haben mir sehr weitergeholfen!
@a.hoffmann
ich habe es nun bei uns in das Theme reingebaut und das wären nur wenige Schritte damit es im Theme verwendbar ist.
habe ich eine Datei bei uns im Theme Ordner erstellt. Also /custom/plugins/Theme/src/Twig/Extension/CategoryExtension.php
dort habe ich dann folgenden Code reingeschrieben:
<?php
namespace Theme\Twig\Extension;
use Shopware\Core\Content\Category\CategoryCollection;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class CategoryExtension extends AbstractExtension
{
private EntityRepositoryInterface $entityRepository;
public function __construct(EntityRepositoryInterface $entityRepository)
{
$this->entityRepository = $entityRepository;
}
public function getFunctions(): array
{
return [
new TwigFunction('searchCategory', [$this, 'searchCategory'])
];
}
public function searchCategory(array $ids, Context $context): CategoryCollection
{
if(empty($ids)) {
return new CategoryCollection();
}
$criteria = new Criteria($ids);
return $this->entityRepository->search($criteria, $context)->getEntities();
}
}
Dann habe ich in der Datei /custom/plugins/Theme/src/Resources/config/services.xml folgendes ergänzt: