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

Shopware 6.6自定义CMS Resolver拖拽后数据不显示问题求助

Shopware 6.6自定义CMS Resolver拖拽后数据不显示问题

问题概述

自定义CMS Resolver在Shopware 6.5中运行正常,升级至6.6后,拖拽自定义CMS Element时,Resolver返回的内容数据无法显示,控制台抛出TypeError: _filter_asset is not a function错误。即使复制Shopware官方标准CMS Resolver代码并修改类型,问题依然存在。

控制台错误信息

app.js?1725361876:79 An error was captured in current module: TypeError: _filter_asset is not a function
    at Proxy.render (eval at AZ (app.js?1725361876:43:411), <anonymous>:50:14)
    at nj (app.js?1725361876:39:174753)
    at eO.fn (app.js?1725361876:39:210999)
    at eO.run (app.js?1725361876:39:161136)
    at X.e.update (app.js?1725361876:39:211402)
    at X (app.js?1725361876:39:211428)
    at Z (app.js?1725361876:39:209524)
    at W (app.js?1725361876:39:209299)
    at x (app.js?1725361876:39:206117)
    at eO.fn (app.js?1725361876:39:210450)

自定义Resolver代码(原演示版本)

class ProductTestCmsElementResolver extends AbstractCmsElementResolver
{
    public function getType(): string
    {
        return 'product-test';
    }

    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        return null;
    }
    
    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $data = new ProductListingStruct();
        $slot->setData($data);
    
        // 替换为演示数据
        $demoProducts = [
            [
                'id' => Uuid::randomHex(),
                'name' => 'Demo Produkt 1',
                'price' => '19.99',
                'manufacturer' => 'Demo Hersteller 1',
            ],
            [
                'id' => Uuid::randomHex(),
                'name' => 'Demo Produkt 2',
                'price' => '29.99',
                'manufacturer' => 'Demo Hersteller 2',
            ],
            [
                'id' => Uuid::randomHex(),
                'name' => 'Demo Produkt 3',
                'price' => '39.99',
                'manufacturer' => 'Demo Hersteller 3',
            ],
        ];
    
        $data->setListing($demoProducts);
    }
}

问题分析与解决方案

1. 控制台错误的直接原因

_filter_asset是Shopware前端的资产过滤函数,6.6版本中该函数的调用方式发生了变更:

  • 旧版本直接调用_filter_asset()
  • 新版本需通过全局$assets对象调用:$assets.filter()

检查你的自定义CMS Element的Vue模板,若存在类似_filter_asset(product.cover)的代码,替换为$assets.filter(product.cover)即可解决该函数报错问题。

2. Resolver数据结构适配问题

你的演示数据是普通数组,而ProductListingStruct的listing字段预期接收的是ProductEntity实例集合。前端模板可能尝试读取产品的cover等字段,因数据结构不匹配导致后续逻辑报错。

修改Resolver的enrich方法,构造符合Shopware标准的产品实体数据:

public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
{
    $data = new ProductListingStruct();
    $slot->setData($data);

    $demoProducts = [];
    $currencyId = $resolverContext->getContext()->getCurrencyId();
    
    foreach (range(1, 3) as $i) {
        // 创建标准ProductEntity实例
        $product = new ProductEntity();
        $product->setId(Uuid::randomHex());
        $product->setName("Demo Produkt {$i}");
        
        // 设置符合Shopware格式的价格数据
        $product->setPrice([
            [
                'gross' => 19.99 + ($i * 10),
                'net' => 16.99 + ($i * 10),
                'currencyId' => $currencyId
            ]
        ]);
        
        // 添加封面媒体实体,避免前端无数据报错
        $cover = new MediaEntity();
        $cover->setId(Uuid::randomHex());
        $cover->setUrl("/demo-product-{$i}.jpg");
        $product->setCover($cover);
        
        // 添加制造商实体
        $manufacturer = new ManufacturerEntity();
        $manufacturer->setName("Demo Hersteller {$i}");
        $product->setManufacturer($manufacturer);
        
        $demoProducts[] = $product;
    }

    $data->setListing($demoProducts);
}

3. 其他检查项

  • 确认service.xml中Resolver的注册标签shopware.cms.data_resolver配置正确,服务优先级未被覆盖
  • 检查后台用户权限,确保可访问自定义CMS Element的相关数据
  • 在前端Vue组件中打印slot.data,验证Resolver是否正确传递数据

补充说明

Shopware 6.6对CMS模块的前端逻辑做了较多细节优化,部分未公开的变更集中在模板渲染和数据结构校验上,严格遵循官方实体结构传递数据可避免大部分兼容性问题。

内容的提问来源于stack exchange,提问作者BestItSebastianHöck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:08:14