客户在将商品添加到购物车时可以选择出口。即使一个产品可能与多个出口关联,该产品也只有1个ID。如果用户要向购物车添加相同的产品,但选择3个单独的分支,则购物车中的行数仅为3,数量为3。这不是应该的工作方式,因此我将ID与出口ID串联在一起因此,即使是同一产品,在购物车中也会出现3个单独的项目。效果很好,但是当没有足够的库存时,我的问题就来了。
比方说库存中只有1件。如果我将其添加到购物车并选择特定的插座,则它将添加到购物车。如果再次执行此操作并选择另一个分支,则该分支不应添加到购物车,因为只有一个分支。但是,让我为每个选择的不同分支添加1。无论我尝试选择多少个不同的网点,它都只能让我加1。
$key = "{$prod_id}.{$outlet_id}";
if (empty($_SESSION['cart_array'][$key])) {
$_SESSION['cart_array'][$key] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft']) {
$response['success'] = false;
$response['message'] = 'Insufficient stock. Cannot add to cart.';
} else {
$_SESSION['cart_array'][$key]['quantity'] += $quantity;
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
也许这是需要更改的行?
elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft']) {
更新:
我尝试过这种方法,但是由于某些原因,如果我从2个不同的商店添加相同的产品,则$ _SESSION ['cart_array_products]的数量会回到1
$key = "{$prod_id}.{$outlet_id}";
$keytwo = $prod_id;
if (empty($_SESSION['cart_array'][$key])) {
$_SESSION['cart_array'][$key] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
$_SESSION['cart_array_products'][$keytwo] = array(
'prod_id' => $prod_id,
'quantity2' => $quantity
);
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
elseif($_SESSION['cart_array'][$key]['quantity'] >= $data['numVouchersLeft'] || $_SESSION['cart_array_products'][$keytwo]['quantity2'] >= $data['numVouchersLeft']) {
$response['success'] = false;
$response['message'] = 'Insufficient stock. Cannot add to cart.';
} else {
$_SESSION['cart_array'][$key]['quantity'] += $quantity;
$_SESSION['cart_array_products'][$keytwo]['quantity2'] += $quantity;
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
答案 0 :(得分:0)
我设法解决了这个问题,但是如果有人有更好或更优雅的方式,请告诉我
return "shop/index";
答案 1 :(得分:0)
从解决方案的代码开始,我只是对其进行了简化,因此它只检查一次$ keytwo数量是否> = $data['numVouchersLeft']
。
if(empty($_SESSION['cart_array'][$key])) {
$_SESSION['cart_array'][$key] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
} else {
$_SESSION['cart_array'][$key]['quantity'] += $quantity;
}
if (empty($_SESSION['cart_array_products'][$keytwo])){
$_SESSION['cart_array_products'][$keytwo] = array(
'prod_id' => $prod_id,
'quantity' => $quantity
);
} else {
$_SESSION['cart_array_products'][$keytwo]['quantity'] += $quantity;
}
if($_SESSION['cart_array_products'][$keytwo]['quantity'] >= $data['numVouchersLeft']) {
$response['success'] = false;
$response['message'] = 'Not enough stock to add item to cart.';
} else {
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
可能值得将$keytwo
重命名为更直观的名称:$simpleKey
或$productKey
?但是,也许也值得研究一下我们可以称为$key
的东西。
希望这会有所帮助!
答案 2 :(得分:0)
我相信if ( empty( $_SESSION['cart_array'][ $key ] ) )
内的代码应更改为此:
if ( empty( $_SESSION['cart_array'][ $key ] ) ) {
$array_column = array_column( $_SESSION['cart_array'], 'quantity', 'prod_id' );
if ( array_key_exists( $prod_id, $array_column ) ) {
// product is already inside the cart so check quantity
if ( $array_column[ $prod_id ] >= $data['numVouchersLeft'] ) {
// Insufficient stock
$response['success'] = false;
$response['message'] = 'Insufficient stock. Cannot add to cart.';
} else {
// product has some stock so add it
$_SESSION['cart_array'][ $key ] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
} else {
// product is not in the cart so add it
$_SESSION['cart_array'][ $key ] = array(
'prod_id' => $prod_id,
'outlet_id' => $outlet_id,
'quantity' => $quantity,
'prod_name' => $data['prod_name'],
'sale_price' => $data['sale_price'],
'sp_name' => $data['sp_name'],
'outlet_name' => $data['outlet_name']
);
$response['success'] = true;
$response['message'] = 'Product added to cart.';
}
}
我相信,当您添加一个项目并检查关系键时,即使该项目存在,最终也会在if语句if ( empty( $_SESSION['cart_array'][ $key ] ) )
内。那是您要保留的功能,因此您要做的就是检查该特定点的库存。首先,我检查购物车内是否有商品产品。如果没有,您只需继续并添加项目。但是,如果需要,则需要检查库存。此时,$array_column
应该看起来像这样:
Array
(
[{product id}] => { quantity }
[{product id}] => { quantity }
[{product id}] => { quantity }
etc.
)
通过使用这些数据,您可以检查$array_column[ $prod_id ]
(由于我们之前的检查,我们知道 $pro_id
在此$array_column
内是密钥)< / p>
最后,如果返回true,则表示“库存不足。无法添加到购物车。”
我认为应该是有关我的思考过程的足够信息。应该没有理由更改其他任何东西。
注意:我是看您共享的第一个代码,而不是更新的代码。