2011-06-16 58 views
0

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

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

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

我看不出$produto是在哪里定义的,应该不是,而是分别为$product->price$product->title

按照docs

重要:前四个阵列 索引上述(ID,数量,价格,和 名)是必需的。如果您省略了 中的任何一个,则数据将不会保存到 购物车。

一定要检查他们是否已经设置好了(也许看看拼写错误,比如我在黑暗中拍摄'qtd'而不是'qty'等)。 此外,如果要更新产品已经存在,你需要使用$this->cart->update()而不是$ this->cart->insert()

+0

嗨达米安皮尔西,感谢您的答复。这实际上是一个错字。我粘贴了这些代码,并更改了一些变量名称,以便在英语中更有意义,因为它们是用其他语言编写的。看起来有些保持不变。但功能实际上起作用。我需要知道的是如何检查产品是否存在于购物车中。如果没有,我运行'$ this-> cart-> insert()'如果它运行'$ this-> cart-> update()'。但是我想把所有的东西放在函数add()中,这样当产品被添加到购物车时,我总是运行相同的函数。谢谢。 – AFRC 2011-06-17 08:02:01

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

只是这个检查,如果你有选择

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

如果不是

$rowid == md5($items['id']); 
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); 
         } 
        } 
0

我用AFRC的回答下面创建的代码,它可能会有所帮助。感谢您的回复,它真的帮助了我!如果您的购物车更新中会出现与您的购物车相匹配的ID,您可以在下面调用购物车功能,否则请插入。它还会显示购物车视图,不管是插入,更新还是仅显示。请注意,我有一个单独的函数get_specific_craft用于获取slu items物品数据(例如价格和名称)。

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

} 
相关问题