在购物车中跟踪产品的多个实例(具有不同选项)的最佳方式?

时间:2011-10-11 10:58:49

标签: php e-commerce

我正在开发一款轻量级的购物车,但我们已经厌倦了那些有选择权的产品,例如:一件多种尺码的T恤。

数据库设计我没有问题。我有shop_categoriesshop_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
    }
}

很抱歉,如果我絮絮叨叨,但我认为应该充分了解我的申请和我面临的问题。我期待着看到你的答案。

1 个答案:

答案 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'
            )
        )

    )