Codeigniter更新购物车(如果产品存在)


Codeigniter update cart if product exists

如果商品已经存在于购物车中,如何更新商品数量?

这是我添加到购物车的功能:

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。

提前谢谢。

@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";
    }

我不知道$produto是在哪里定义的,不是应该分别是$product->price$product->title吗?

根据文件:

重要提示:前四个阵列以上索引(id、数量、价格和name)。如果您忽略了则数据将不会保存到运货马车

一定要检查它们是否正确设置(也许可以查找拼写错误,比如,我在黑暗中拍摄,用"qtd"代替"qty",或者类似的东西)。此外,如果您想更新已经存在的产品,您需要使用$this->cart->update()而不是$this->cart->insert()

如果你有选项,只需检查一下

$rowid == md5($items['id'].implode('', $items['options']));

如果不是

$rowid == md5($items['id']);

使用此代码添加到购物车

 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);
                        }
                    }

我使用了AFRC的答案来创建下面的代码,这可能会有所帮助。谢谢你的回复,它真的帮助了我!如果您的购物车中有匹配的id,您可以调用下面的购物车函数。更新将发生,否则将插入。它还将无需插入、更新或仅显示购物车视图。请注意,我有一个单独的函数get_specific_craft,用于获取段塞项目数据(如价格和名称)。

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);
}