Wie werden die neuesten Produkte in der Liste für ausgewählte Kategorien zuerst angezeigt? – Shopware 6
Wie werden die neuesten Produkte in der Liste für ausgewählte Kategorien zuerst angezeigt? – Shopware 6
In diesem Artikel wird beschrieben, wie man die neuesten Produkte in der Liste der Produkte einer Kategorie zuerst anzeigt.
Wir müssen einen benutzerdefinierten Abonnenten für ProductEvents hinzufügen
/** * class MySubscriber implements EventSubscriberInterface { /** * @var SystemConfigService */ private $systemConfigService; public function __construct( SystemConfigService $systemConfigService ) { $this->systemConfigService = $systemConfigService; } public static function getSubscribedEvents(): array { return [ ProductEvents::PRODUCT_LISTING_CRITERIA => 'productListingCriteria' ]; } public function productListingCriteria(ProductListingCriteriaEvent $event) { if ($this->systemConfigService->get(Plugin.config.sortCreatedByCategories')) { if ($this->checkCategoryFromConfig( $this->systemConfigService->get('Plugin.config.sortCreatedByCategories'), $event->getRequest()->attributes->get('navigationId')) ) { $criteria = $event->getCriteria(); $criteria->addSorting( new FieldSorting('createdAt', 'DESC') ); } } return; } function checkCategoryFromConfig($categories, $configCategory) { if(is_array($configCategory)) { return !empty(array_intersect($configCategory, $categories)); } return !empty(in_array($configCategory, $categories)); } } */
Hier verwenden wir den SystemConfigService, um die Plugin-Konfiguration zu erhalten. Damit werden die ausgewählte Kategorie oder Kategorien in der Plugin-Konfiguration abgerufen.
Dann müssen wir die Liste nach dem Erstellungsdatum sortieren.
Hier sind die services.xml und config.xml, um Ihnen die Arbeit zu erleichtern.
/** * <service id="Plugin\Subscriber\MySubscriber"> <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService" /> <tag name="kernel.event_subscriber"/> </service> */<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
/** * <card> <component name="sw-entity-multi-id-select"> <name>sortCreatedByCategories</name> <entity>category</entity> <label>Choose Categories To Be Sorted Based on Creation Date</label> </component> </card */<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
Ich hoffe, es hilft.
Leave a Reply