如何让Venia storefront筛选器位置与Magento前端配置同步
解决方法
你现在字段返回null是因为仅完成了GraphQL Schema的扩展,没有通过Resolver将字段和Magento实际存储的position数据绑定,按以下步骤操作即可实现需求:
- 修改对应Resolver补全数据获取逻辑
分层导航筛选器的position配置值存储在Magento的catalog_eav_attribute数据表中,你可以在当前编写的聚合字段Resolver中,通过聚合对应的属性code加载EAV属性模型,读取position值绑定到你新增的字段上,参考代码逻辑:
// 注入\Magento\Catalog\Api\ProductAttributeRepositoryInterface依赖 $attribute = $this->productAttributeRepository->get($aggregationAttributeCode); $position = $attribute->getPosition(); // 将position赋值到返回数组的对应字段
如果你使用ElasticSearch作为搜索引擎,也可以在索引构建阶段将属性position值写入ES元数据,Resolver直接从ES查询结果中取值,避免频繁查询数据库提升性能。
2. 清理缓存验证数据
修改完成后执行命令清理Magento缓存:bin/magento cache:clean
再次调用GraphQL接口即可看到position字段返回后台配置的正确值。
3. 调整Venia Storefront排序逻辑
Venia默认按属性名称对筛选器排序,你需要修改Venia端筛选器渲染逻辑,将排序规则改为按返回的position字段升序排列,即可实现和Magento原生前端完全一致的筛选器排序效果。
内容的提问来源于stack exchange,提问作者Jesus Iasenzaniro
相关产品推荐
相关产品推荐

