【问题标题】:Change default sorting on product listing in shopware 6更改商店用品 6 中产品列表的默认排序
【发布时间】:2020-10-22 02:08:20
【问题描述】:

我在documentation 之后创建了一个新的排序

    <argument>a-sorting</argument>
    <argument>New Sorting</argument>
    <argument type="collection">
        <argument key="product.markAsTopseller">desc</argument>
        <argument key="product.updatedAt">desc</argument>
    </argument>
    <tag name="shopware.sales_channel.product_listing.sorting" />
</service>

您现在可以在前端选择新的排序,它工作正常。 但我不知道如何将此排序设置为页面默认值。我的意思是产品列表应该在页面加载后进行排序。

我用 ProductListingCriteriaEventProductListingResultEvent

解决了这个问题
<?php declare(strict_types=1);

namespace MyPlugin\Storefront\Subscriber;

use Shopware\Core\Content\Product\Events\ProductListingResultEvent;
use Shopware\Core\Content\Product\Events\ProductListingCriteriaEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ProductSubscriber implements EventSubscriberInterface
{

    /**
     * @inheritDoc
     */
    public static function getSubscribedEvents()
    {
        return [
            ProductListingCriteriaEvent::class  => 'handleRequest',
            ProductListingResultEvent::class    => 'handleResult'
        ];
    }

    /**
     * @param ProductListingResultEvent $event
     */
    public function handleResult(ProductListingResultEvent $event): void
    {
        $request = $event->getRequest();

        /* Sorting is not selected in frontend */
        if (!$request->get('order')) {
            $event->getResult()->setSorting('a-sorting');
        }
    }

    /**
     * @param ProductListingCriteriaEvent $event
     */
    public function handleRequest(ProductListingCriteriaEvent $event): void
    {
        $request = $event->getRequest();
        $criteria = $event->getCriteria();

        /* Sorting is not selected in frontend */
        if (!$request->get('order')) {
            $criteria->resetSorting();
            $criteria->addSorting(
                new FieldSorting('markAsTopseller', 'DESC'),
                new FieldSorting('updatedAt', 'DESC')
            );
        }
    }
}


【问题讨论】:

  • 谢谢,我将其中的一部分捆绑在一个小插件中,还添加了一个配置选项; github.com/elgentos/shopware-default-sort-order
  • 感谢您添加解决方案!
  • 您多久能找到完美的解决方案,准备好复制粘贴。谢谢!

标签: symfony4 shopware


【解决方案1】:

优秀的帖子,感谢@Maltisch!

我想添加一个小细节:他们似乎在 6.2 版本左右将查询名称从“排序”更改为“排序”。就我而言,我必须使用$request-&gt;get('sort')

【讨论】:

    猜你喜欢
    • 2019-08-26
    • 2021-04-28
    • 1970-01-01
    • 2023-03-17
    • 2019-03-05
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多