2012-12-08 34 views
0

我成功地用购物车创建了简单的网络应用程序。Codeigniter购物车:特价,关于购物车内容的自定义价格 - 如何处理?

现在我需要实施一些特别优惠。

示例1:如果客户添加了2件某件产品 - 第二件产品的成本要少30%。

示例2:如果客户添加product_1和product_2 - 那么我必须免费添加产品3。

实现业务逻辑本身没有问题。

问题是,我在Codeigniter购物车中没有产品详细信息。

有在项对象/阵列idnameqtypricesubtotaloptions和字段。

为了在每次购物车更改时不重新查询数据库而重新计算价格,我需要一些其他字段,例如组/类别,这些字段告诉我什么特别优惠适用于该产品。

此外 - 我需要在某处存储基准价格,因为当顾客从购物车中移除某些产品时 - 我需要将旧价格放在那里。

我应该在哪里提供这些附加信息?

options场已被使用......

我不想查询每车更新数据库(我希望我的web应用程序是非常快,我想最小的服务器负载)。

当我更换某些购物车的价格时,我是否应该预计这些rowid的某些问题?

我问了一下,因为购物车唯一的'rowid'是项目idoptions数组的md5校验和。我的应用程序将使用相同选项的相同产品的不同价格(例如,一件正常价格,另一个70%的价格)。

回答

1

Codeigniter购物车将帮助您开始,但对于任何类型的定制,我建议您做自己的购物车,将会容易得多。记住所有的购物车必须做的是存储产品ID和数量。而已。其他一切都是为了查看购物车和创建订单。订单总额与购物车是分开的,因为对于大多数订单,将会有其他费用,如运费/税。和/或可能会有促销活动改变最终价格。

因此,您可能会决定将产品名称包含在购物车中,以便于展示。并且存储船重是合理的。但即使将价格存储在购物车中也是危险的。如果在购物者购物时提高或降低价格会怎样?这些可能是边缘情况,但它会告诉你如何“陈旧”的购物车信息可以得到。

您引用的示例很棒,因为您很快就会看到 - 购物车的构建方式是一次跟踪一个订单项。对于任何类型的逻辑来说,如果你购买了其中的3种,你可以免费获得第三种 - 你可以在购物车中建立这种逻辑 - 但它会很快变成杂乱的意大利面条!

那该怎么办?购物车物品 - 购物车物品 - 并将其传递给促销模型。促销模式遍历购物车中的所有物品 - 然后进行调整 - 将其传递给您的订单方法。通过推广模式,我们保持促销的商业规则与购物车分开。最重要的是

我们没有改变购物车中的任何东西!

我们正在将促销应用于购物车中的物品。更加灵活,并且很容易向他们展示他们节省了多少钱,因为你没有试图重写原来的购物车定价。

+0

非常有用的提示,即有人在购物时更新价格。我从来没有考虑过这样的情况。谢谢。 – Kamil

0

我意识到,options可以是数组的数组,我可以在那里存储任何额外的数据。

我将使用该数组,我认为没有必要扩展标准的Cart库。

+0

这并不适合我,特别是当我试图更新购物车时。我想建立你自己是唯一更好的选择。或者只是延长购物车的类别 –