前一阵发了本系列的第一篇,这篇算是第二篇。不过写第一篇时没好好阅读官方的Wiki站:http://www.drupalcommerce.org/,所以决定后面的连载和官方的User Guide的大纲保持一致。如下:
- 安装DC(Installing Drupal Commerce)
- 产品管理(Products)
- 购物车和Checkout流程(Cart and Checkout Process)
- 用户档案(Customer Profiles)
- 支付(Processing Payments)
- 管理订单(Managing Orders)
- 从Ubercart迁移(Migrating from Ubercart Stores)
- 税金配置(Tax Configuration)
- 导入产品以及引用节点(Importing Products and Reference Nodes )
- 产品价格公式(Product Pricing Rules )
大纲按照这个,但里面小节的按排可能会有不同。我会根据自己的实际操作,配置一个简单的e-commerce网站,并记录下流程和所遇到的问题,而不是直接翻译帮助文档,因为我觉得这样对朋友们更有参考价值。由于本人知识所限,必然会有错误和漏洞,欢迎大家批评、指正和补充。
1. 安装DC
在上一篇中介绍了如何安装DC,一种是从头安装(install from scratch),一种是使用将所需模块打包好的Commerce Kickstart。
第一种需要自己先下载一些模块:
- Address Field
- Chaos tool suite (依赖Views 3)
- Entity API (依赖Rules 2)
- Rules 2
- Views 3 (可选)
最后安装DC模块即可。
第二种比较简单,比Drupal安装多了一步——选择是否安装示例数据。安装示例数据后,只是多了三个产品和产品展示的示例。
2. 产品管理
2.1 产品类型(Product Types)和产品展示(Product Display)
在系统中,每一个“可卖”的物品都是一个“产品(Product)”。在DC中,Product是一种Entity,默认有如下属性:
- SKU (产品的全局唯一标识:Stock Keeping Unit的缩写)
- Product Title (产品名称)
- Image (产品图像:默认只能上传一个)
- Price(产品价格:单位是USD)
- Status(产品状态:有Active和Disable两个状态)
不过,默认的属性显然有点少,我们可以通过Drupal 7的字段管理功能为其增加属性。如何增加会在“产品类型”部分介绍。
产品的分类不是产品的默认属性,即不由DC模块提供。可以使用Drupal的Taxonomy模块来实现。
2.1.1 基础概念
产品类型
产品类型用于存放拥有不同属性和展示形式的产品。比如CD光盘和衣服,属于两种不同的产品类型。CD光盘可能具有DVD/CD,、容量等属性;而衣服有size, color等属性。在DC中,需要为此创建两个不同的产品类型。简单的讲,在网站中要卖多少样东西,就要创建多少个产品类型。每个产品类型可拥有多个产品(Product)。
产品展示
“产品(Product)”创建好后,并没有页面可直接查看产品信息。需要通过“产品展示(Product Display)“功能来实现。产品展示实际上是一种内容类型。每个产品展示的节点可以展示一个或几个产品。我的理解是:产品展示是产品的容器,将产品包装后最终展示给网站访问者。产品展示也可以通过Manage Fields为其增加字段。
如果安装时没有选择创建示例数据,产品展示这个内容类型是不会被创建的,需要手动创建。创建时需要加入一个重要的字段- Product Reference Field (产品引用字段),其值是SKU,用于保存展示哪些产品。如果设置成多值(multi-value),可用逗号将sku分开。
由于产品展示是一种内容类型,所以创建一个产品展示和创建一个节点方法一样,我就不再介绍了。
2.1.2 创建产品类型
我认为,掌握DC的产品管理,最重要的就是要掌握产品类型的概念和用法。DC默认创建的是名为“product”的产品类型,但这个只是示例,实际的电商网站肯定会卖很多不同的产品,只一个“product“太笼统了,所以必然需要创建新的产品类型。接下来,我要创建两个内容类型: CD和Dress (衣服)来看看DC如何管理多种产品。先看看创建后的类型列表,如下图如示:
新创建的product type都会带有SKU, Title, Price, Status这四个属性,这是由系统定义的。之后,可以通过Manage Fields增加新的属性,下面是CD产品的属性:
- 容量:Capacity - Integer类型,单位:MB
- 刻录速度:Record speed - Integer类型,单位:x
- 重量:Weight (为了不和字段的权重名称重复,使用sweight (shipping weight) - Integer类型,单位:pound
- 品牌:Brand – Text类型
- 产品图像:Images – Image类型,最多可上传4张图片。创建时,可以设定一个默认的产品图片。
提示:
每次在创建一个需要设定长度的字段时,系统会提示:
These settings apply to the Brand field everywhere it is used. These settings impact the way that data is stored in the database and cannot be changed once data has been created.
大概意思就是:此字段的设置当表有数据后就不能更改,第一次创建时要小心。
但有一个问题:在随后的字段配置时,还是可以设定最大长度的。可能如果设定值超过创建字段时设定的字符最大长度,会被截断。
创建CD产品类型的过程比较简单,和为Drupal的内容类型创建字段的过程几乎一样,就不再详细说明。下面创建衣服产品类型的实验中,会用到一些高级点的技巧,重点介绍下。
- 衣服(Dress)的内容类型在原基础上新增属性如下:
- 型号(size): List (text),值为S, M, L, XL, XXL。由于每件衣服会有多个不同的型号供选择,因此本field设置为Multi-value。
- 颜色(color): List (text), 值为White, Black, Blue
- 产品图像(images):直接使用在创建CD时创建的field_images字段即可
需得注意的是,每个字段都有下面这个“ATTRIBUTE FIELD SETTINGS”(属性字段设置),如下图所示。
如果选中其中的复选框——“Enable this field to function as an attribute field on Add to Cart forms ”,则当使用一个Product Display显示一组Product时,将会把这几个产品的这个属性的值,以列表或radio button的形式列出来;而不像普通的产品那样,只列出产品名。这个功能对于像“衣服”这种有多种属性的产品比较有用,下面以示例来说明其用途。
比如,我现在要在网站上卖“bebe Gold Trim Drape Maxi Dress”这个衣服。此衣服共有三个型号,分别为:S, M, L。我想要实现:在一个产品浏览页面中,当用户选择不同的型号的产品时,显示相对应的衣服图片和价格。
根据这个需求,要创建三个产品(Product),每个产品有独立的SKU和Size:
- bebe Gold Trim Drape Maxi Dress - S (SKU: 176543, Size: S)
- bebe Gold Trim Drape Maxi Dress - M (SKU: 176544, Size: M)
- bebe Gold Trim Drape Maxi Dress - L (SKU: 176545, Size: L)
之后,创建一个Product Display, 名称为:“bebe Gold Trim Drape Maxi Dress”,在其“Product”属性中,将前面创建的三个Product的SKU加入:“176543, 176544, 176545“。保存后,查看这个Product Display,可看到如下图所示的页面:
这样,在选择Size的下拉框中的对应值后,下面的产品图片和价格都会更换为所对应的型号的Product的图片和价格。还可以选择以Radio Buttons的形式显示,如下图:
虽然比较ugly一些,不过可以通过模板的定制来美化。
当用户选择了某个型号后并添加至购物车,所对应的产品就添加进购物车中了。
不过,如果是多个选项会怎样呢?比如,除了Size外,还有Color的限制,那怎么处理?好,下面接着做实验。
我为S号的创建了两个产品:
- bebe Gold Trim Drape Maxi Dress-S-WHITE
- bebe Gold Trim Drape Maxi Dress-S-BLACK
然后M号的颜色为:Black, L号的颜色为:Blue。那么,预期效果是:当我选择S号时,可以看到有两个颜色选项;当选择其它两个号时,每个只能显示所对应的一个颜色。
实际测试后,确实到达预期。如图所示:
可见,对于一种产品有多个属性的情况,需要为每个属性创建一个Field,并将所有可能出现的值预先填入。在创建产品时,每种组合都要有独立的SKU。最后在为此种产品,创建一个产品展示,并引用所有同种产品。
(未完待续...)
下集预告:
在实际的工作中,当产品很少时,可以手动的一个一个的创建。但多数的情况下,产品数据是很多的,一般是由产品部门的人员做好全部产品的Excel,再统一导入系统中。那么,对于一个电商网站,产品导入功能也是非常重要的。下一篇主要介绍下如何往DC中导入数据。
Re: Drupal Commerce模块使用指南(二)
第一篇在这里:http://drupaltaiwan.org/forum/20110828/5458 本篇内容和这篇有部分重复,不过后面有和朋友们的讨论,可以简单看看。