在 Shopware 产品列表页面上显示评论计数

2024-01-21

我想要产品列表页面(如产品详细信息页面)上产品评论的总计数,如何在列表页面上获取该计数?


这并不是那么微不足道的事情。您需要编写一个插件来实现此目的。

在你的插件中你需要创建订阅者 https://developer.shopware.com/docs/guides/plugins/plugins/plugin-fundamentals/listening-to-events并监听与产品搜索和列表相关的事件。然后,您需要通过添加聚合来更改搜索条件,以及为列出的产品对象设置聚合值的搜索结果。

class CustomListingEventSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            ProductListingCriteriaEvent::class => [
                ['handleListingCriteria', -101],
            ],
            ProductSearchCriteriaEvent::class => [
                ['handleListingCriteria', -101],
            ],
            ProductListingResultEvent::class => [
                ['handleListingResult', 0],
            ],
            ProductSearchResultEvent::class => [
                ['handleListingResult', 0],
            ],
        ];
    }

    public function handleListingCriteria(ProductListingCriteriaEvent $event): void
    {
        $criteria = $event->getCriteria();

        $criteria->addAggregation(
            new TermsAggregation('review_count', 'product.id', null, null, new CountAggregation('review_count', 'product.productReviews.id'))
        );
    }

    public function handleListingResult(ProductListingResultEvent $event): void
    {
        /** @var TermsResult $aggregation */
        foreach ($event->getResult()->getAggregations() as $aggregation) {
            if ($aggregation->getName() === 'review_count') {
                foreach ($aggregation->getBuckets() as $bucket) {
                    /** @var SalesChannelProductEntity $product */
                    $product = $event->getResult()->getEntities()->get($bucket->getKey());
                    if (!$product) {
                        continue;
                    }
                    // Ideally you should implement you own `Struct` extension
                    $text = new TextStruct();
                    $text->setContent((string) $bucket->getResult()->getCount());
                    $product->addExtension('review_count', $text);
                }
            }
        }
    }
}

对于此示例,它将计算与产品相关的所有评论,而不仅仅是那些活跃的评论。您可能还想查看有关的文档如何过滤聚合 https://developer.shopware.com/docs/resources/references/core-reference/dal-reference/aggregations-reference#filter-aggregation.

之后,在产品框的模板中,您应该能够输出每个产品的评论数:

{{ product.extensions.review_count.content }}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Shopware 产品列表页面上显示评论计数 的相关文章

  • 添加到 Windows 的 ios 8 视图的旋转问题

    I have created category for view rotation And added views on controllers view as well as on window for showing custom in
  • 为什么 Honeywell POS4NET 会为两个不同的扫描仪触发相同的事件?

    我想读取两个霍尼韦尔扫描仪的输入 即航行者1202克 and 轨道7190克 对于某些业务需求 需要在同一台计算机上使用这两种设备 Both扫描仪使用 Honeywell POS4NET 驱动程序 我需要知道 which扫描仪正在传送数据
  • 如何在flutter中实现圆角底部Appbar?

    我想创建一个像这样的圆形底部应用栏 圆角底部应用栏 但它看起来像这样 编码的BottomAppBar How do I get rid of that white portion return ClipRRect borderRadius
  • 使用 Swift 通过键盘移动视图

    我有一个应用程序 在视图的下半部分有一个文本字段 这意味着当我在文本字段中输入内容时 键盘会覆盖文本字段 我如何在打字时向上移动视图 以便可以看到我正在输入的内容 然后在键盘消失时将其移回到原来的位置 我到处都看过 但所有解决方案似乎都在
  • 原则 2 按 ASC 和最后的空值排序

    我正在尝试获取结果 并且我需要按升序排序 但有些值可能为空 空 我需要将其放在最后 同时排序从 0 1 2 开始 然后为空值 我尝试了 SortableNullsWalker 但没有帮助 我正在排序的值不是列 它是正在排序的两个值的乘法 这
  • 如果可能的话,如何为 python 3.5+、3.6 构建 .exe?

    现在是否有一个简单的协议可以使用模块 pyqtgraph qt5 theano pymc3 numpy scipy os 和 sys 从 python 3 5 构建 exe 并打开存储在 ui 文件中的简单 GUI 我浪费了几个小时 最终没
  • 如何为每个输入预先计算一个掩码并根据该掩码调整权重?

    我想提供一个与输入图像大小相同的掩码 并根据该掩码调整从图像中学习到的权重 类似于注意力 但为每个图像输入预先计算 如何使用 Keras 或 TensorFlow 做到这一点 Question 如何向图像添加另一个特征层 例如掩模 并让神经
  • java中未选中和选中复选框的httpservlet请求getparameter

    我的表单上有几个复选框 大约 15 个 我遇到的问题是 复选框的名称仅在选中时出现在枚举中 但我希望返回所有复选框 以便在打印数据时将显示复选框的名称并显示 已选中 或 未选中 我曾想过一种方法 我可以手动设置标志来查看存在的内容和不存在的

随机推荐

  • 名称“驱动程序”未定义,Selenium Webdriver python3

    我正在尝试使用 Selenium WebDriver Chrome 打开一个网站 但由于我的代码不断产生错误 所以还没有实现 我已经通过将 Chrome 驱动程序目录中的 加倍来修复了一个问题 我正在使用Pycharm 我想知道为什么会发生
  • 使用 beautifulsoup 'NoneType' 对象进行网页抓取没有属性 'get_text'

    我正在尝试学习 beautifulsoupscrape纽约时报政治文章中的文本 目前使用我现在拥有的代码 它确实设法浏览了两个段落 但在那之后 它吐出了 AttributeError NoneType object has no attri
  • 如何在cordova应用程序中创建“离线模式”?

    我必须为平板电脑 Android 开发一个应用程序 该应用程序将由一些在不同地方的人使用 这些地方的互联网连接并不总是可用 但这个应用程序需要数据才能工作 用户必须能够在有或没有互联网接入的情况下使用该功能 我们将与 cordova 合作构
  • 如何使用发布构建工件任务发布特定文件

    我正在使用 Visual Studio Build In Azure Pipeline 构建 C 应用程序 我的解决方案包含多个项目 Manager Web 和 Web API 我想分别发布两个单独的 Artifact ManagerWeb
  • Jest 的 `it.each()` 描述用于在引用 $predicate 时呈现箭头函数源代码

    问题定义 Jest 允许测试用例的数据用于it each s name via 前缀变量 下面的代码产生如下输出 PASS src array functions find pairwise spec ts findPairwise sho
  • 如何将 Bootstrap 与 Django 一起使用?

    我正在从 PHP 学习 python 和 Django 这一切都非常令人兴奋 我很乐意使用 Bootstrap 和 Django 来创建性感的网页 据我了解 我正在关注他们网站上的 Django 教程 Django 使用 应用程序 它可以包
  • 需要 Magento 模型的文档 (Mage::getModel())

    我读过艾伦 斯托姆的指南here http www magentocommerce com knowledge base entry magento for dev part 5 magento models and orm basics关
  • 在 IE11 上使用 Babel 扩展运算符

    我想使用扩展运算符转译为Babel在 IE11 上 但这不起作用 const navigationItemSubmenu document querySelectorAll data target navigationItemSubmenu
  • iPhone操作系统3.2; PDF渲染;用户互动

    我需要创建一个 iPad 应用程序来渲染多个 PDF 文件 一个文件包含一页 每个页面都应该是可滚动 可缩放的 如果用户点击 PDF 的一部分 应该会弹出一个网站或照片库 目前我认为我可以通过以下方式做到这一点 A UIWebView 很好
  • OpenCV 从采集卡或 OBS Studio FaceRecogition 加载视频

    我正在创建一个概念证明 我有一个闭路电视设置 我可以访问的唯一输出是 HDMI 端口 我可以使用采集卡或 OBS 作为 openCV 的输入吗 使用带有 PiCam 的树莓派 所以我对功能的限制有点迷失 这对我使用 USB HDMI 采集卡
  • 如何在 DOS 汇编中正确挂接中断 28h 并恢复它?

    我试图将中断28h的处理程序设置为我自己的例程 恢复所有涉及的寄存器和标志 并恢复原始的中断处理程序 我在 VirtualBox 中的 DOSBox 和 MS DOS 6 22 下使用 NASM Assembler 我考虑过调试 但在 TS
  • 如何用渐变填充 UIBezierPath?

    我使用 UIBezierPath 绘制了一个图表 我可以用纯色填充图表下方的区域 但我想用渐变而不是纯色填充图表下方的区域 但我不确定如何使渐变仅适用于图表而不适用于整个视图 我已经阅读了一些问题 但没有发现任何适用的内容 这是主要的绘图代
  • 如何使用 django-tables2 从字典创建表

    我有一个如下所示的字典列表 set u meal 0 08 35 882945 set 0 u personal set 0 u sleep set 0 u transport set 0 u work 我做的 u meal u perso
  • AWS lambda函数-“发生错误:收到来自Lambda的错误响应:已处理”

    致力于AWS Lex用于创建 ChatBot 并使用Node js in AWS Lambda 错误 发生错误 收到来自 Lambda 的错误响应 已处理 拉姆达函数 var aws require aws sdk var ses new
  • 会话、HTTP 连接之间的区别?

    我一直在阅读this https stackoverflow com questions 20763999 how does http keep alive work lq 1 and this http www javaworld com
  • DDD 用户安全策略

    我有一个租赁财产类 看起来像这样 class RentalProperty Money MonthlyRent List
  • 用 C 实现的 UNIX 命令

    对于我的操作系统课程 我有一个作业 该作业是建立在之前作业的基础上的 不幸的是 除了我不知道下一个项目需要从哪里开始之外 我之前的项目无法正常工作 我下面的代码假设模仿一个简单的 UNIX Linux shell 其中包含一些无法使用 ex
  • .bind('input', function(){}) 在 IE8 中不起作用

    我一直在使用 bind input 使用 jQuery 因为它似乎是检测它们是否复制 粘贴到框中 或者只是键入然后从浏览器给定的下拉菜单中选择的最佳解决方案 我与其他人的问题 例如change 至少对我来说 它们只有在用户失去对盒子的注意力
  • 概率和百分比的解释

    非常感谢您帮助编写我的模型 如果您不介意的话 我想问您一些编码中的解释 抱歉我不是数学专家 to move ask turtles with gender male if random float 1 lt 0 025 为什么它是 和百分比
  • 在 Shopware 产品列表页面上显示评论计数

    我想要产品列表页面 如产品详细信息页面 上产品评论的总计数 如何在列表页面上获取该计数 这并不是那么微不足道的事情 您需要编写一个插件来实现此目的 在你的插件中你需要创建订阅者 https developer shopware com do