2.6 Commerce Checkout 模块:灵活配置的可扩展结账流程系统
不同的产品类型,可以有完全不同的结账流程。
是 Drupal Commerce
的一个重要理念。
订单结账流程系统
的架构设计
- 在订单实体添加了两个字段
checkout_flow
和checkout_step
。 前者用于标记订单所使用的结账流程配置,后者标记订单当前的结账状态,比如进行到哪一步。 - 提供了一个
@CommerceCheckoutFlow
插件类型,用来定制结账流程
。 - 提供了一个
@CommerceCheckoutPane
插件类型,用来定制可被结账流程调用来与用户进行交互的表单。
Commerce Payment 模块
和 Commerce Promotion模块
都是在本模块的基础上提供订单支付和订单优惠 相关的功能界面的。
commerce_checkout_flow
配置实体
该实体用来保存结账流程配置
,比如 实物商品结账流程
、软件商品结账流程
。
每个结账流程配置
,都包含一个字段,指定了所使用的 @CommerceCheckoutFlow
插件, @CommerceCheckoutFlow
插件才是真正提供业务逻辑的地方。 除此之外,结账流程配置
还保存了配置 @CommerceCheckoutFlow
插件行为的数据。
Commerce Checkout 模块
自带的唯一一个@CommerceCheckoutFlow
插件实现是 multistep_default
, 一般来说已经完全够用,很难再找到另外再开发一个 checkout_flow
插件的理由。 所以当使用此插件时,结账流程配置
里的checkout_flow
插件配置数据的内容是, 记录了每一个结账步骤所执行的业务逻辑,这些业务逻辑是以 @CommerceCheckoutPane
来组织的。
@CommerceCheckoutPane 插件
在 multistep_default
插件中,订单结账流程被分为多个步骤,而这些步骤具体是什么,是可以自定义的。 而每一个步骤可以包含多个交互表单,我们在这里把这些交互表单称作结账面板
.
结账面板
是通过插件的方式定义的,它的插件类型是 @CommerceCheckoutPane
。
@CommerceCheckoutPane
看起来好像是只能用在 multistep_default
这个 @CommerceCheckoutFlow
插件中, 但事实上它是独立的一个插件,只是系统中只实了multistep_default
这一个@CommerceCheckoutFlow
。
本书假设读者已经懂得 Drupal8 插件开发
的相关知识,所以在这里不再教大家如何去写插件,只要稍看一下 Commerce Checkout 模块
的代码,就能够轻松看明白。
特别值得提一下的是,模块中自带的一系列 @CommerceCheckoutPane
插件实现,它们非常有用:
-
login
如果当前用户没有登录,显示登录表单让用户登录,用户也可以选择不登录,以匿名的方式进行购物。
-
billing_information
显示一个表单,让用户输入当前订单的必要信息,插件使用了一个名为
customer
的profile
,它默认是让用户填写一个国际地址, 开发者可以修改该profile的字段,从而达到自定义填写内容的目的。 -
contact_information
让用户输入一个 Email 地址,这个地址会保存到订单实体的
email
字段。 对不怎么使用Email来联系的中国用户来说,这个没什么用。 -
order_summary
从字面上就能理解,用来显示订单的摘要信息。
multistep_default
有一个特殊的步骤,_sidebar
设置在这个步骤的结账面板会在结账的全过程一直显示在页面的右侧,order_summary
这个面板就是显示在这个特殊的步骤中的。 -
review
这个面板的作用是显示订单的最终数据,让用户看看有没有信息错误,如果有,可以返回之前的步骤修改。 起到确认订单信息是否正确的作用。
-
completion_message
简单地显示一个信息,提示用户订单结账流程已经顺利完成。
-
completion_register
在订单结账完成后,如果用户是以匿名的方式进行购物,那么让用户注册一个账户, 并把当前结账的订单关联到这个账户,以便用户后续可以登录跟踪订单状态。
commerce_checkout_progress
区块
此区块用于显示订单的结账进度信息,一般来讲,只能显示在结账页。