如果产品已存在于购物车中,如何更新商品数量?
这是我的添加到购物车功能:
public function add() {
$product= $this->products_model->listProduct($this->input->post('id_product'));
$data = array(
'id' => $this->input->post('id_product'),
'qty' => $this->input->post('qty'),
'price' => $product->price,
'name' => $product->title );
$this->cart->insert($data);
redirect('product/'.$product->id.'/'.url_title($product->title, 'dash', TRUE));
}
使用此功能,如果产品存在于购物车中,假设数量为8,如果我添加数量为1的相同产品,则它将为1而不是9。
提前致谢。
答案 0 :(得分:1)
@AFRC 你可以尝试
public function add() {
$flag = TRUE;
$dataTmp = $this->cart->contents();
foreach ($dataTmp as $item) {
if ($item['id'] == 'sku_123ABC') {
echo "Found Id so updatig quantity";
$qtyn = $item['qty'] + 1;
$this->update($item['rowid'], $qtyn);
$flag = FALSE;
break;
}
}
if ($flag) {
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
);
$this->cart->insert($data);
echo "Inserting as not found in the cart";
}
echo "Add1 called";
}
答案 1 :(得分:0)
我没有看到$produto
定义在哪里,不应该分别是$product->price
和$product->title
?
根据docs:
重要:前四个阵列 上面的索引(id,qty,price和 名称)是必需的。如果省略任何 他们将数据保存到 车。
请务必检查它们是否被正确设置(可能会查找拼写错误,例如,我在黑暗中拍摄,'qtd'而不是'qty',或类似的东西)。
此外,如果您想要更新已有的产品,则需要使用$this->cart->update()
代替$ this->cart->insert()
答案 2 :(得分:0)
如果你有选项
,请检查一下$rowid == md5($items['id'].implode('', $items['options']));
如果不是
$rowid == md5($items['id']);
答案 3 :(得分:0)
使用此代码添加到购物车
if (count($this->cart->contents())>0){
foreach ($this->cart->contents() as $item){
if ($item['id']==$product->id){
$data = array('rowid'=>$item['rowid'],'qty'=>++$item['qty']);
$this->cart->update($data);
}else{
$data = array('id'=>$product->id,'qty'=>1,'price'=>$product->price,'name'=>$product->id,'options'=>array('image'=>$product->thumb,'product_name'=>$product->title));
$this->cart->insert($data);
}
}
答案 4 :(得分:0)
我使用AFRC的答案来创建下面的代码,它可能会有所帮助。谢谢你的回复它真的帮助了我!如果您的购物车更新中存在匹配的ID,您可以调用下面的购物车功能,否则将插入。它还会显示购物车视图,无论是插入,更新还是仅显示。请注意我有一个单独的函数get_specific_craft,用于获取slug项目数据(如价格和名称)。
public function cart($slug = "")
{
if($slug != "")
{
$craft = $this->crafts_model->get_specific_craft($slug);
$flag = TRUE;
foreach ($this->cart->contents() as $item)
{
if ($item['id'] == $slug)
{
$qtyn = $item['qty'] + 1;
$dat = array(
'rowid' => $item['rowid'],
'qty' => $qtyn
);
$this->cart->update($dat);
$flag = FALSE;
break;
}
}
if ($flag)
{
$crt = array(
'id' => $craft['id'],
'qty' => 1,
'price' => $craft['price'],
'name' => $craft['name']
//'options' => array('Size' => 'L', 'Color' => 'Red')
);
$this->cart->insert($crt);
}
}
$this->load->view('cart' , $this->data);
}