symfony4 - 更改商店用品 6 中产品列表的默认排序
问题描述
我在这个文档之后创建了一个新的排序。
<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>
您现在可以在前端选择新的排序,它工作正常。但我不知道如何将此排序设置为页面默认值。我的意思是产品列表应该在页面加载后进行排序。
我用ProductListingCriteriaEvent和ProductListingResultEvent解决了它
<?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')
);
}
}
}
解决方案
很棒的帖子,谢谢@Maltisch!
我想添加一个小细节:似乎他们在 6.2 版本左右将查询名称从“排序”更改为“排序”。就我而言,我不得不使用$request->get('sort')
.
推荐阅读
- c# - 断锁策略——分析修正
- javascript - 将 Node.js 编译成可执行文件而不将整个 Node.js 放入其中
- python - 每次使用 tkinter 在选项菜单上选择特定选项时打开一个弹出窗口
- java - java android grandResult中的权限
- dataframe - 热图无法正确显示数据
- xml - XML 找不到似乎已经声明的元素的声明
- arrays - Turbo 汇编器中的字符串数组
- recaptcha - Google ReCaptcha v2 HIPAA 是否兼容?
- python - 卸载和安装 python 和 pycharm 后运行简单的 kivy 程序时出错 error:raise Exception('Invalid instance in App.root')
- node.js - Docker节点js容器不会运行