【问题标题】:Codeigniter update cart if product exists如果产品存在,Codeigniter 更新购物车
【发布时间】:2011-06-16 23:02:13
【问题描述】:

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

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

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。

提前致谢。

【问题讨论】:

    标签: php codeigniter shopping-cart


    【解决方案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";
        }
    

    【讨论】:

      【解决方案2】:

      我看不到 $produto 的定义位置,不应该分别是 $product->price$product->title 吗?

      根据docs

      重要:前四个数组 上面的索引(id、数量、价格和 名称)是必需的。如果你省略任何一个 他们的数据不会被保存到 购物车。

      一定要检查它们是否正确设置(可能会寻找拼写错误,例如,我在黑暗中拍摄,'qtd' 而不是 'qty',或类似的东西)。 此外,如果你想更新一个已经存在的产品,你需要使用$this->cart->update()而不是$this->cart->insert()

      【讨论】:

      • 您好 Damien Pirsy,感谢您的回复。这实际上是一个错字。我粘贴了代码并更改了一些变量名称以使其在英语中更有意义,因为它们是用其他语言编写的。似乎有些保持不变。但该功能确实有效。我需要知道的是如何检查购物车中是否存在产品。如果没有,我运行$this->cart->insert() 如果是,我运行$this->cart->update()。但我想将所有内容都保留在函数add() 中,这样我在将产品添加到购物车时总是运行相同的函数。谢谢。
      【解决方案3】:

      如果您有选择,只需检查一下

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

      如果没有

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

      【讨论】:

        【解决方案4】:

        使用此代码添加到购物车

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

        【讨论】:

          【解决方案5】:

          我使用 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);
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-24
            • 2015-07-21
            • 1970-01-01
            • 1970-01-01
            • 2014-05-08
            • 1970-01-01
            • 1970-01-01
            • 2021-08-23
            相关资源
            最近更新 更多