Nach dem Shopware Update 6.5.5.2 => 6.5.8.11 funktioniert das individuelle Filter-Plugin nicht mehr. Es sollte Eigenschaften in Abhängigkeit von einer anderen ausgewählten Eigenschaft filtern.
Hier sehen Sie, wie die Klasse Subscriber.php aussieht:
class Subscriber implements EventSubscriberInterface
{
private EntityRepository $optionRepository;
public function __construct(EntityRepository $optionRepository)
{
$this->optionRepository = $optionRepository;
}
public static function getSubscribedEvents(): array
{
return [
ProductListingCriteriaEvent::class => [
['onListingCriteria', -200],
],
];
}
public function onListingCriteria(ProductListingCriteriaEvent $event): void
{
$event->getCriteria()->addAssociation('properties');
$event->getCriteria()->addAssociation('properties.group');
$criteria = $event->getCriteria();
$filters = $criteria->getExtension('filters');
if (!$filters instanceof FilterCollection) {
return;
}
$propertyFilter = $filters->get('properties');
if (!$propertyFilter instanceof Filter || !\is_array($propertyFilter->getValues())) {
return;
}
$currentPropertyOptions = $propertyFilter->getValues();
$event->getContext()->addExtension('currentPropertyOptionsCriteria', new ArrayEntity($currentPropertyOptions));
$criteria1 = new Criteria();
$criteria1->addAssociation('myTags');
$criteria1->setIds($currentPropertyOptions);
$tags = new TagCollection();
$options = $this->optionRepository->search($criteria1, $event->getContext())->getEntities();
/** @var PropertyGroupOptionEntity $option */
foreach ($options as $option) {
$extension = $option->getExtension('myTags');
if (!$extension instanceof TagCollection) {
continue;
}
$tags->merge($extension);
}
$tags = $option->getExtension('myTags');
$tagnames = $tags->map(fn (TagEntity $tag) => $tag->getName());
$event->getContext()->addExtension('myTagsNames1', new ArrayEntity($tagnames));
$prefixes = ['84a5f522d04f463a93a858b3c1bb8f7a','40f24f88c4c34196ad21ec5dcd094e6a', 'e892c99ffc5747848aea3aa5c8126201', '96e839a6e32a4301b238e90088f4a778', 'c5d7bcee60f7493bb6203965e15068e0', '9c493945d37b4ff1b527a874d8315519', 'f032b2d21c484196ad3a98d90379f6c0', 'a07ec367574a4c3d81b7fb6ceae66ffe'];
if (in_array('3f777000a2734deead391133cee3a6a9', $currentPropertyOptions)) {
$multiFilter = new MultiFilter(MultiFilter::CONNECTION_OR);
foreach ($tagnames as $tagname) { $multiFilter->addQuery(new PrefixFilter('product.properties.name', $tagname));}
foreach ($prefixes as $prefix) {
$multiFilter->addQuery(new EqualsFilter('product.properties.group.id', $prefix));
}
$criteria->addFilter($multiFilter);
}
..
if (in_array('a637fe94fe794a84b0ce7fc2a13e1485', $currentPropertyOptions)) {
$multiFilter = new MultiFilter(MultiFilter::CONNECTION_OR);
foreach ($tagnames as $tagname) { $multiFilter->addQuery(new PrefixFilter('product.properties.name', $tagname));}
foreach ($prefixes as $prefix) {
$multiFilter->addQuery(new EqualsFilter('product.properties.group.id', $prefix));
}
$criteria->addFilter($multiFilter);
}
}
}
Ich kann kein Problem finden. Assoziierte Eigenschaften Tags sind im Admin-Backend vorhanden. Aber es filtert nicht die Eigenschaften je nach ausgewählter Eigenschaft.
Kann jemand einen Tipp zur Fehlersuche geben? Oder gibt es vielleicht eine neue Möglichkeit, diese Art der benutzerdefinierten Filterung in Shopware 6.5.8.11 oder 6.6 (wir werden auf die neueste Version aktualisieren) zu implementieren?