You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6.5.x中page.reviews.totalReviews返回null的原因及解决办法

Shopware 6.5.x产品评论总数变量失效问题分析与解决方案

失效原因

Shopware 6.5.x对CMS页面的产品数据结构做了调整:在自定义产品类型CMS页面中,page.reviews不再自动加载评论统计数据。因为默认情况下,CMS页面的产品上下文不会初始化评论聚合器,导致page.reviews.totalReviews返回null。而6.4.x版本中,评论统计直接挂载在产品页面的page对象下,无需额外配置。

可行解决方案

方案1:直接调用产品实体的reviewCount属性

Shopware内置了产品实体的reviewCount属性,会自动统计该产品的有效评论总数,无需额外查询。修改Twig代码如下:

{% sw_include '@Storefront/storefront/page/product-detail/buy-widget.html.twig' with {'totalReviews': page.product.reviewCount} %}

方案2:手动加载评论统计数据(适用于需要详细评论信息的场景)

如果需要获取除总数外的更多评论数据,可通过事件订阅器扩展CMS页面加载逻辑,主动获取评论统计:

  1. 创建自定义事件订阅器,监听CmsPageLoadedEvent事件
  2. 从CMS页面的区块中提取产品实体,调用ReviewRepository获取统计数据
  3. 将统计结果挂载到page对象的扩展属性中

示例PHP代码:

use Shopware\Core\Content\Cms\Event\CmsPageLoadedEvent;
use Shopware\Core\Content\Product\ProductEntity;
use Shopware\Core\Content\Review\ReviewRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class CmsProductReviewSubscriber implements EventSubscriberInterface
{
    private ReviewRepository $reviewRepository;

    public function __construct(ReviewRepository $reviewRepository)
    {
        $this->reviewRepository = $reviewRepository;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            CmsPageLoadedEvent::class => 'onCmsPageLoaded'
        ];
    }

    public function onCmsPageLoaded(CmsPageLoadedEvent $event): void
    {
        $page = $event->getPage();
        $context = $event->getContext();
        
        // 遍历CMS区块获取产品实体
        foreach ($page->getSections() as $section) {
            foreach ($section->getBlocks() as $block) {
                foreach ($block->getSlots() as $slot) {
                    $data = $slot->getData();
                    if (isset($data['product']) && $data['product'] instanceof ProductEntity) {
                        $stats = $this->reviewRepository->aggregateByProductId($data['product']->getId(), $context);
                        $page->addExtension('reviewStats', $stats);
                        break 3;
                    }
                }
            }
        }
    }
}

对应的Twig调用代码:

{% sw_include '@Storefront/storefront/page/product-detail/buy-widget.html.twig' with {'totalReviews': page.extensions.reviewStats.totalReviews} %}

方案3:使用内置Twig函数获取评论数

通过Shopware内置的sw_review_count函数直接获取指定产品的评论总数:

{% set totalReviews = sw_review_count(page.product.id) %}
{% sw_include '@Storefront/storefront/page/product-detail/buy-widget.html.twig' with {'totalReviews': totalReviews} %}

内容的提问来源于stack exchange,提问作者Leon Schwanitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:07:41