我用推车成功创建了简单的网络应用程序。
现在我需要实施一些特别优惠。
示例1:如果客户添加了2件产品 - 第二件应该减少30%。
示例2:如果客户添加product_1和product_2 - 那么我必须免费添加产品3。
实现业务逻辑本身没有问题。
问题是,我在Codeigniter购物车中没有产品详细信息。
项目对象/数组中有id
,name
,qty
,price
,subtotal
和options
字段。
要重新计算价格而不在每次购物车更改时查询数据库,我需要一些额外的字段,例如组/类别,它们告诉我哪种特殊优惠适用于该产品。
此外 - 我需要在某个地方存储基本价格,因为当客户从购物车中删除某些产品时 - 我需要在那里放置旧价格。
我应该在哪里添加其他信息?
options
字段已被使用...
我不想在每次购物车更新时查询数据库(我希望我的网络应用程序非常快,我希望最小的服务器负载)。
当我更改某个购物车项目的价格时,我预计这些rowid
会出现一些问题吗?
我问这个问题,因为购物车唯一的'rowid'是商品id
和options
数组的md5校验和。我的应用程序将使用相同选项的同一产品的不同价格(例如,一件正常价格,另一件价格为70%)。
答案 0 :(得分:1)
因此,您可能决定在购物车中加入产品名称,以便更容易展示。并且存储船的重量是合理的。但即使将价格存入购物车也是危险的。如果在购物者购物时提高或降低价格怎么办?这些可能是边缘情况,但它会向您显示购物车中的信息是如何“陈旧”的。
您引用的示例很棒,因为您很快就会看到 - 购物车是为了一次跟踪一个订单项而构建的。对于任何类型的逻辑 - 如果你购买其中的3个,你可以免费获得第三个 - 你可以将这种逻辑构建到购物车中 - 但它会很快变成混乱的意大利面!
那该怎么办?获取购物车对象 - 使用您的购物车商品 - 并将其传递给促销模型。促销模型遍历购物车中的所有商品 - 然后进行调整 - 这些调整将传递给您的订单方法。通过推广模式,我们将促销的业务规则与购物车分开。最重要的是
我们没有更改购物车中的任何内容!
我们将促销应用于购物车中的商品。更加灵活,并且很容易向人们展示他们节省了多少钱,因为你还没有尝试重写原车定价。
答案 1 :(得分:0)
我意识到,options
可以是数组数组,我可以在那里存储任何其他数据。
我将使用该数组,我认为没有必要扩展标准的Cart库。