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

Your email address will not be published. Required fields are marked *