我正在开发一款轻量级的购物车,但我们已经厌倦了那些有选择权的产品,例如:一件多种尺码的T恤。
数据库设计我没有问题。我有shop_categories
和shop_products
表,以及适用于HABTM关系的产品选项表。
我的问题是:如何在购物车中存储多个产品实例(包含不同选项)?
目前,我的购物车已存储为$_SESSION
中的数组,其中包含产品详细信息并以产品ID为键。例如:
$cart = array(
32 => array(
'id' => 32,
'category' => 7,
'title' => 'Generic T-shirt',
'friendly_name' => 'generic-t-shirt',
'price' => '10.00',
'quantity' => 2
)
);
这很好但现在我坚持产品项目的介绍。例如,如果有人在购物车上添加了一件小T恤,然后在购物车上添加了一件大T恤,那么他们需要单独跟踪我会猜测吗?
我怎样才能克服这一点?我想我的第一个绊脚石就是将购物车内容存储在产品ID上,但这是我当前有人在购物车中添加或删除时增加/减少数量的方式。例如:
if (isset($_POST['add_to_cart'])) {
// $_POST['product_id'] and $_POST['quantity'] are validated here
// to check they're both integers and the product actually exists
if (array_key_exists($cart[$product_id])) {
// increment quantity by $quantity
}
else {
// add product to cart and set to quantity to $quantity
}
}
很抱歉,如果我絮絮叨叨,但我认为应该充分了解我的申请和我面临的问题。我期待着看到你的答案。
答案 0 :(得分:2)
如果我不重写您的整个代码,我建议您将购物车重新格式化为类似的内容......
$cart = array(
32 => array(
'id' => 32,
'category' => 7,
'title' => 'Generic T-shirt',
'friendly_name' => 'generic-t-shirt',
'price' => '10.00',
'itemCount' => 2,
'items' => array(
array(
'quantity' => 1,
'size' => 'L'
),
array(
'quantity' => 1,
'size' => 'M'
)
),
38 => array(
'id' => 38,
'category' => 17,
'title' => 'Stack Overflow T-shirt',
'friendly_name' => 'stack-overflow-t-shirt',
'price' => '15.00',
'itemCount' => 3,
'items' => array(
array(
'quantity' => 2,
'size' => 'L'
),
array(
'quantity' => 1,
'size' => 'M'
)
)
)