Wie kann ich den Kategorie-Listing-Cache in Shopware 6.5 programmgesteuert ungültig machen?

In Shopware 6.5 kann es vorkommen, dass Sie den Cache für Kategorie-Listings programmgesteuert deaktivieren müssen, insbesondere wenn Sie zusätzliche Filter zu Produkt-Listings hinzufügen. Dieser Leitfaden führt Sie durch den Prozess zur Lösung von Cache-Ungültigmachungsproblemen im Zusammenhang mit Kategorieeinträgen.

Vorstehendes Problem

Wenn Sie versuchen , der Produktliste mithilfe des „ ProductListingCriteriaEvent “ einen Filter hinzuzufügen, z. B. einen Filter „ Kategorie nicht in “ , stellen Sie möglicherweise fest, dass der persistente Cache ungültige Ergebnisse in der Liste anzeigt. Dies kann sowohl bei angemeldeten Benutzern als auch bei Gastbenutzern auftreten und die Genauigkeit der Produktliste beeinträchtigen.

Lösung

Um dieses Problem der Cache-Ungültigmachung zu beheben, können Sie eine Lösung implementieren, die den Cache für Kategorieauflistungen programmgesteuert ungültig macht. Nachfolgend finden Sie eine Beispielimplementierung mit PHP und Symfony:

php

use Shopware\Core\Framework\Adapter\Cache\CacheInvalidator;

use Shopware\Core\Content\Product\SalesChannel\Listing\CachedProductListingRoute;



class ProductSubscriber implements EventSubscriberInterface

{

private $cacheInvalidator;



public function __construct(

CacheInvalidator $cacheInvalidator

) {

$this->cacheInvalidator = $cacheInvalidator;

}


// Other event subscriber methods...

**
 Remove cache for specified category IDs.


* @param array $categoryIds An array of category IDs to invalidate cache for.
/

public function removeCategoryCache($categoryIds)

{

// Build cache keys for each category ID

$cacheKeys = array_map([CachedProductListingRoute::class, 'buildName'], $categoryIds);



// Invalidate cache for each category

$this->cacheInvalidator->invalidate($cacheKeys);

}

}

In this solution

  •  We use the `CacheInvalidator` service provided by Shopware to invalidate cache entries.
  •  The `removeCategoryCache` method accepts an array of category IDs for which we want to invalidate the cache.
  •  We utilize `CachedProductListingRoute::buildName` method to construct cache keys for each category ID.
  •  Finally, we invalidate the cache for each constructed cache key using the `invalidate` method of the `CacheInvalidator` service.

Conclusion

By implementing this solution, you ensure that the cache for category listings is properly invalidated when adding additional filters to product listings, thus resolving the issue of invalid results in the product listing.

Comments are closed.