商品 (Shopping.Product)


商品插件提供了商城使用的商品管理和展示功能。
商品插件仅实现了最基本的商品功能,但提供了灵活的接口,可以在其他插件中实现更高级的功能。

商品类目的数据结构

类目下有规格和属性,
规格代表在购买时需要选择的值,例如颜色尺码套餐,
属性代表只用于显示的值,例如年份品牌。

商品类目的ER图

商品的数据结构

商品可以关联多个分类和标签,商品可以选择一个类目并设置规格和属性。
商品可以设置价格和库存的匹配规则,符合指定的条件时使用指定的价格和库存(可以把有填写库存的规则看成一个SKU)。
商品可以设置对应的卖家,其他插件可以对有卖家的商品进行多店铺商城专用的特殊处理。

商品的ER图

商品的管理界面

商品的管理界面

商品的列表页面

商品的列表页面

商品的展示页面

商品的展示页面

商品数据的详细解释

  • Product 商品
    • Category 商品类目,多对一,类目下包含了可以使用的规格和属性
      • Name 类目名称
      • Properties 类目包含的属性,多对多,例如"颜色"可以同时用在服装和自行车上
        • Name 属性名称
        • IsSalesProperty 是否销售属性,例如颜色和尺寸等是销售属性,年份和材质等是非销售属性
        • ControlType 编辑时用的控件类型,有文本框,下拉框和多选框等
        • PropertyValues 属性值列表,一对多
          • Name 属性值名称
          • DisplayOrder 显示顺序,从小到大
          • CreateTime 创建时间
          • LastUpdated 更新时间
          • Remark 备注
        • DisplayOrder 显示顺序,从小到大
        • CreateTime 创建时间
        • LastUpdated 更新时间
        • Deleted 是否已删除
        • Remark 备注
      • CreateTime 创建时间
      • LastUpdated 更新时间
      • Deleted 是否已删除
      • Remark 备注
    • Name 商品名称
    • Introduction 商品介绍,格式是Html
    • Type 商品类型,默认有实体商品和虚拟商品
    • State 商品状态,默认有已上架,等待上架和已下架
    • Seller 卖家,可以没有卖家
    • CreateTime 创建时间
    • UpdateTime 更新时间
    • DisplayOrder 显示顺序,前台展示时默认按这个顺序显示,从小到大
    • Remark 备注,格式是Html
    • Deleted 是否已删除
    • Classes 关联的商品分类
    • Tags 关联的商品标签
    • MatchedDatas 商品匹配数据,一对多
      • Conditions 匹配条件,类型是Dictionary,包含规格和购买数量等
      • Affects 影响的数据,类型是是Dictionary,包含价格和库存等
      • Price 价格,等于null时继续匹配下一项
      • PriceCurrency 价格的货币,跟随价格匹配
      • Weight 重量,等于null时继续匹配下一项
      • Stock 库存,等于null时继续匹配下一项
      • ItemNo 货号,等于null时继续匹配下一项
      • BarCode 条形码,等于null时继续匹配下一项
      • MatchOrder 匹配顺序,从小到大
      • Remark 备注,纯文本
    • PropertyValues 关联的属性值,一对多,选中的规格和属性的值
      • Property 属性,例如颜色
      • PropertyValue 属性值,例如黑色
      • PropertyValueName 属性值的别名

FAQ

商品类目和商品分类有什么区别?

类目包含规格和属性,只有一层且不应该作为展示时的过滤条件,
分类没有额外的数据,有多层且可以作为展示时的过滤条件。
例如服装类目包含规格"尺寸,颜色"和属性"品牌,年份",
这个类目下的商品可以关联分类"上装,下装,鞋子"等。

商品的销售属性(规格)和非销售属性(属性)有什么区别?

销售属性(规格)在购买商品时需要选择,并且可以参与匹配数据,例如颜色和尺寸等。
非销售属性(属性)是固定的值,只能在编辑商品时设置一个,例如品牌和年份等。

为什么使用商品匹配数据储存价格和库存?

传统储存商品价格会使用SKU,例如黑色大码是一个SKU,价格就和这个SKU绑定。
但如果后面添加了套餐这个规格,以前的SKU就需要复制n份,这样会导致数据关联困难,
同样的对于删除规格处理起来也比较麻烦。
这个商品插件使用了匹配规则代替SKU表格,匹配规则可以按部分规格来决定价格,例如大码不管什么颜色都是一个价格。
匹配规则还可以根据订购的数量来决定价格,如果数量超过指定的数量时可以使用一个更便宜的价格,但共用一个库存。
匹配规则从上到下匹配,如果中途遇到空值则继续向下匹配,例子如下

条件 价格 库存
大码 黑色 订购数量>50 88 继承
大码 订购数量>50 89 继承
大码 100 10000
默认 101 20000

商品类型和状态可以扩展吗?

商品类型可以通过继承IProductType进行扩展。
商品状态可以通过继承IProductState进行扩展。
如果需要控制商品类型是否实体商品可以继承IAmRealProduct
如果需要控制商品状态是否允许显示在列表页可以修改特征IAmVisibleToThePublic
扩展商品类型可以实现一些高级功能,例如把商品分为团购商品和普通商品,再对团购商品进行特殊的处理。

商品属于卖家是怎样处理的?

商品可以属于单个卖家,也可以属于系统。
这个插件没有提供给卖家使用的管理界面,也没有提供卖家的店铺页面,需要这些功能应该使用关联的其他插件。
商品属于卖家时会影响到创建订单的处理,详细请查看订单插件的文档。