在线商店的一个重要组成部分是购物车。它也可能是为电子商务网站创建的最难的组件之一。客户可以选择商品、评估他们的选择、编辑它们、在必要时添加更多商品,然后使用购物车购买商品。在结帐期间,该程序通常会生成一个订单总额,其中会考虑邮费、包装费、手续费以及税费(如果适用)。
对于 nopCommerce,购物车和愿望清单是内置的。如果在管理区域启用,每个产品都可以放入购物车或愿望清单。可以禁用 nopCommerce 购物车和愿望清单,可以使用访问控制列表页面对其进行配置。只需查找所需客户资料的“启用购物车”和“启用愿望清单”权限,然后取消选中它们。
要了解有关购物车功能的更多信息,以及 nopCommerce 的其他组件如何工作,我们建议采取
首先,打开并查看购物车页面。首先,它有一个订单摘要视图,其中包含选定的结帐属性、价格、数量(可以调整)、每个添加项目的总计和一个删除按钮。
接下来,客户可以添加预计运费、选择结账属性、输入折扣代码和礼品卡。最后,订单被计算出来并被提供到结账处,客户在结账处输入账单和运输信息并付款。
顺带一提,购物车相关的action方法都放在了Nop.Web的ShoppingCartController中。这些方法允许客户与所有页面组件进行交互。
让我们分解 nopCommerce 购物车功能的所有主要组件。它由结帐属性、折扣和礼品卡盒、总计步骤和结帐流程组成。考虑数据库结构也很重要。
从结帐属性开始,它们显示在购物车页面上,并提供在下订单前向客户提供更多服务(如礼品包装)的机会。
Checkout 属性在 Nop.Services.Orders 文件夹中有自己的服务类,并以 XML 格式存储在 Order 表的 CheckoutAttributesXml 列中。它们都具有与产品属性几乎相同的功能。
CheckoutAttributeService 类
CheckoutAttributesXml 列
购物车的下一个功能是折扣框。它允许客户输入优惠券代码以对订单总额或运费应用折扣。折扣功能有自己的文件夹,位于 Nop.Services 部分。可以在那里调整折扣实施过程的任何规则和逻辑。
谈到数据库,折扣本身存储在 Discount 表中。还有一些映射表存储折扣如何映射到产品、制造商和类别。 DiscountRequirement 表存储确定在何种情况下应应用折扣的折扣要求。最后一个表是 DiscountUsageHistory 表,它存储有关应用于订单的折扣的信息。
另一个购物车组件是礼品卡盒。客户应在此处输入代码以申请礼品卡。礼品卡是一种特殊类型的产品。您可以在产品详情页面将产品标记为礼品卡,并销售客户可以通过这种方式使用的礼品卡。客户使用礼品卡产品完成购买后,您可以在此处搜索并查看所有已购买礼品卡的列表。
如果您需要配置礼品卡功能,您可以使用位于 Nop.Service.Orders 文件夹中的 GiftCardService 类。
考虑到数据库,将手动创建或作为产品购买的礼品卡存储在 GiftCard 表中。一旦在订单中使用了礼品卡,相应的记录就会插入到数据库的 GiftCardUsageHistory 表中。
客户可以在购物车页面上申请折扣和礼品卡。
购物车页面上最后一个有趣的块是购物车总数。它们是根据购物车项目、应用的折扣和税费、选择的运输和付款方式计算的。总数由几行组成:
订单总计在 Nop.Services.Orders 的 OrderTotalCalculationService 中计算。可以看到,它包含了GetShoppingCartShippingTotal、GetTaxTotal等方法,以及与奖励积分、折扣等相关的方法。反过来,付款方式的附加费用在 Nop.Services.Payments 的付款服务中计算。
为了更清楚地了解整个购买体验,重要的是要考虑结帐流程。当客户离开购物车以继续付款和运输时结帐开始。
nopCommerce 提供两种类型的结帐流程设计。它们是单页结帐(默认设置)和多页结帐。单页结帐允许客户使用单个页面完成整个结帐过程。您可以在“订单设置”页面上进行设置。顺便说一句,如果需要,您可以在同一结帐部分暂时禁用客户结帐。
客户在结帐过程中完成以下步骤:
还有更多条件会影响结帐步骤的数量。它们可以在订单设置中进行调整。
所有与结帐流程相关的操作方法都放在 CheckoutController 中。如您所见,该控制器具有不同的区域:用于多步结帐和单页结帐。多步结帐方法返回视图,而单页结帐方法返回 JSON 作为结果。没有单独的服务来管理结帐流程。所有的工作都在控制器中完成。
在 nopCommerce 中,购物车和愿望清单都具有相同的结构。为了更深入的了解,还是看数据库比较好。在 ShoppingCartItem 表中,购物车和心愿单项目存储在一起。但是,它们是通过 ShoppingCartTypeId 来区分的。
此外,查看“Domain – Orders”文件夹,可以看到提供两种类型的 ShoppingCartType 枚举:ShoppingCart 和 Wishlist,具有适当的数值。这些是存储在数据库的 ShoppingCartTypeId 列中的值。这是数据库术语中购物车和愿望清单之间的唯一区别。
其他字段将客户标识符表示为外键。它是已将此商品添加到购物车的客户的 ID。此外,还有一个 ProductId 标识哪个产品已添加到购物车,其后是 StoreId 表示该产品的商店。此外,我们已经讨论过的 ShoppingCartTypeId 确定客户是否已将该商品添加到购物车或愿望清单。
然后是 AttributesXml 列。此列存储添加到购物车的产品配置以及客户选择的所有属性。下面是这个 XML 的工作过程:
这是所选产品属性的存储方式。为了解析此类 XML,在 Nop.Services Catalog 文件夹中有一个名为 ProductAttributeParser 的特殊类。此类处理产品属性 XML。例如,使用 ParseProductAttributes 方法,它会在客户将产品添加到购物车时基于所选属性创建 XML。
如您所见,此方法接受来自产品详细信息页面的表单。它还用于在产品详细信息页面上更改属性值时重新计算产品价格(GetUnitPriceAsync 方法)。因此,在此类中,您可以找到使用产品属性 XML 记录进行操作的方法。它还操纵产品属性组合、租赁日期和礼品卡属性。
另一个重要的列是 CustomerEnteredPrice。当“客户输入价格”选项可用于特定产品时使用。数量列是非常自我描述的,因为它显示了产品的选定数量。当产品类型为租赁时,使用 RentalStartDate 和 RentalEndDate 列。最后,CreatedOn 和 UpdatedOn 日期是不言自明的。
nopCommerce 购物车是一个结构化且灵活的组件。根据本文中的信息,您可以使用 nopCommerce 平台有效地创建和配置带有高级购物车和心愿单的网站。
无需从头开始构建所有内容,因此您可以只关注电子商务业务的特定需求。原因之一是 nopCommerce 购物车具有最常用的功能,例如运费估算、结帐属性以及礼品卡和折扣实施。
最后,数据库结构使您能够更新需要存储和管理的购物车数据类型。您还可以在我们的文档中找到这些详细信息