CRMEB Pro 商品详情页二开:后台改了字段,为什么移动端详情和推荐位没同步?
摘要很多商品二开需求最后都会落到移动端后台新增字段、商品详情要展示后台设置推荐商品、详情页要出现后台改了标签或品牌、商品列表和推荐位也要同步。问题是移动端商品详情并不是只读商品主表它还会组装规格、活动、优惠券、会员价、推荐商品、评价、种草内容、门店配送、直播状态等大量信息。CRMEB Pro 当前移动端商品模块把详情、详情内容、推荐商品、关联活动、商品列表、热门推荐拆成多个接口。二开时如果只改后台保存字段不补移动端接口输出就会出现“后台保存成功但用户端看不到”的情况。这篇梳理商品详情页二开时应该检查的接口和服务链路。一、移动端商品不是一个接口解决所有展示移动端商品路由在crmeb_pro/route/api.phpGET product/detail/:id/[:type] 商品详情 GET product/detail_content/:id 商品详情内容 GET product/detail/recommend/:id 商品详情推荐商品 GET product/detail/activity/:id 商品详情关联活动 GET products 商品列表 GET product/hot 为你推荐 GET groom/list/:type 首页不同类型推荐商品 GET search/filter 商品筛选项 GET brand 品牌列表也就是说移动端商品详情页通常不是一个接口返回全部内容而是由多个接口共同支撑基础详情 详情富文本 规格 SKU 优惠活动 推荐商品 评价 首页推荐位 搜索筛选二开字段要先判断展示位置。如果只在详情页主信息区展示改product/detail如果要在推荐商品卡片展示还要改推荐列表字段如果要参与筛选还要改search/filter和列表查询。二、详情主接口会做大量二次组装商品详情入口在crmeb_pro/app/controller/api/v1/product/StoreProduct.php detail()它会调用服务层StoreProductServices::productDetail()productDetail()会先从缓存获取商品信息getCacheProductInfo($id)然后做一系列组装1. 校验商品存在、未删除、已上架 2. 读取商品详情 DIY 配置 3. 补充品牌名称、商品标签、保障服务 4. 处理活动 promotions 5. 处理视频、主图和缩略图 6. 判断用户收藏 7. 处理预售状态和自定义表单 8. 获取规格 productAttr 和 productValue 9. 计算分销最高佣金 10. 处理配送方式 11. 处理直播状态 12. 计算会员价/等级价 13. 读取评价、种草秀和排行榜 14. 记录浏览日志这说明新增字段时要想清楚它是商品主表缓存字段 SKU 规格字段 活动扩展字段 DIY 控制字段 推荐位列表字段 用户相关字段字段不同补的位置也不同。三、后台字段保存成功不代表移动端会返回后台商品保存时Controller 通过getProductSaveFields()控制可接收字段。保存后移动端详情又通过getCacheProductInfo()读取商品信息。如果新增字段没有进入保存白名单后台传了也会丢如果保存了但详情接口没有处理移动端可能仍不展示如果字段依赖缓存发布后可能还会短时间看到旧数据。建议按这条链路检查后台表单字段 getProductSaveFields() StoreProductServices::saveData() Dao/Model 字段 getCacheProductInfo() productDetail() 移动端页面展示如果字段只给移动端展示不参与搜索和计算可以在storeInfo中输出如果字段要影响价格、库存、配送、购买按钮就必须进入对应业务方法处理。四、详情富文本被拆成独立接口商品详情内容还有单独入口product/detail_content/:idController 里会调用getCacheProductInfo()然后只返回description这意味着如果二开“详情页增加一段图文说明”要先判断它是否属于商品详情富文本。如果属于详情描述应该进入description的保存和展示链路如果是结构化字段比如卖点、参数、适用人群不建议直接塞进富文本里。导入商品时服务层的processDescription()已经支持把分号分隔的图片地址转换为img富文本这也说明项目本身把详情内容当成独立展示块来处理。五、推荐商品不是简单随机列表详情页推荐接口是product/detail/recommend/:idController 里的recommend()会先读取商品详情 DIY 配置确认是否开启推荐。然后分两种情况当前商品是优品推荐并配置了 recommend_list按指定商品推荐 否则从 is_picks 1 的商品中取推荐推荐商品仍然会走StoreProductServices::getProducts()这个方法会处理价格 会员价 商品标签 品牌名称 预售状态 活动信息 优惠活动 缩略图所以如果新增字段要在推荐卡片展示不能只改详情主接口还要补getProducts()的字段列表和回填逻辑。六、活动信息也被拆成独立接口详情关联活动接口是product/detail/activity/:id它会返回activity coupons discounts_products promotions activity_background computed这个接口会根据 DIY 配置决定是否展示活动、搭配购、优惠券等模块。二开活动信息时建议先判断是普通商品活动顺序、优惠券、搭配购、还是平台促销。不要把所有活动字段都塞进商品详情主接口。这样做有两个好处详情首屏接口更轻 活动模块可以按需刷新 优惠券和搭配购逻辑更容易单独维护七、列表、热门、首页推荐位也要同步字段移动端商品列表和推荐位常用这些服务getGoodsList() 商品列表 getProducts() 推荐/热门商品 getRecommendProduct() 首页推荐商品 getActivityList() 活动标签 getProductPromotions() 优惠活动 getProduceOtherList() 购物车数量等辅助信息如果你新增的是“商品卖点”“品牌副标题”“活动角标”“适用人群”等需要在卡片上展示的字段就要同步检查products product/hot groom/list/:type product/detail/recommend/:id否则会出现详情页有字段列表卡片没有或者列表有字段推荐位没有。八、SKU 字段要从规格接口链路补详情主接口里会调用StoreProductAttrServices::getProductAttrDetailCache()返回productAttr productValue如果新增的是 SKU 维度字段例如规格外部编码、规格图片角标、规格起购数量、规格独立说明就应该补规格保存和规格详情输出而不是只补商品主表。尤其要注意单规格商品会把 productAttr 置空 多规格商品才需要展示规格项 productValue 是移动端选择规格的关键数据 缓存没清时规格字段可能还是旧值SKU 字段二开要同时覆盖后台规格表格、规格保存、移动端详情规格输出、购物车和下单读取。九、推荐的移动端商品详情二开流程1. 先确认字段展示位置详情主信息、详情富文本、规格、推荐卡片、列表筛选 2. 后台保存链路补字段白名单和服务层处理 3. 商品主表字段补 getCacheProductInfo 和 productDetail 输出 4. SKU 字段补规格保存和 getProductAttrDetailCache 输出 5. 推荐卡片字段补 getProducts 或 getRecommendProduct 字段列表 6. 筛选字段补 searchFilter、brand 或商品列表搜索器 7. 发布后清理商品和规格缓存 8. 同时测试 H5、小程序和 App 展示如果字段只在后台管理使用不要无脑输出到移动端如果字段要给用户看就要考虑多端兼容和缓存。十、关键代码/目录说明crmeb_pro/route/api.php 移动端商品详情、详情内容、推荐商品、活动、商品列表和热门推荐路由。 crmeb_pro/app/controller/api/v1/product/StoreProduct.php 移动端商品 Controller包含 detail、detailContent、recommend、activity、product_hot、groom_list。 crmeb_pro/app/services/product/product/StoreProductServices.php 商品服务productDetail、getProducts、getGoodsList、getRecommendProduct 等方法负责组装移动端商品数据。 crmeb_pro/app/services/product/sku/StoreProductAttrServices.php 规格详情缓存与 SKU 输出服务。 crmeb_pro/app/controller/admin/v1/product/StoreProduct.php 后台商品保存入口getProductSaveFields 决定字段是否能被接收。 crmeb_pro_admin/src/api/product.js 后台商品保存、复制、规格、上下架等接口封装。十一、注意事项后台能保存不等于移动端接口会返回。详情富文本和详情主信息是两条接口不要混用。推荐商品、热门商品、首页推荐位都可能需要单独补字段。SKU 字段要从规格链路补不要塞进商品主表。商品详情依赖缓存发布后要清理商品和规格缓存。移动端多端展示要一起测试尤其是图片、视频、富文本和规格弹窗。涉及价格、库存、购买按钮的字段必须走服务层计算不要只在前端判断。标签建议CRMEB CRMEB Pro 商品详情 移动端 二次开发 SKU 商城系统