【问题标题】:Does not allow same product more than a one-time CodeIgniter shopping cart不允许同一产品超过一次性 CodeIgniter 购物车
【发布时间】:2019-01-03 13:51:14
【问题描述】:

我正在使用 CodeIgniter 购物车,下面是在浏览器上显示我的所有详细信息的代码。

(只分享逻辑部分)

<?php
   foreach ($post as $row) {?>
  <tr>
    <td><?php echo $i++;?></td>
    <td><?php echo $row->name;?></td>
    <td><?php echo $row->price;?></td>
    <td>
      <?php if($row->is_approved==1){?><button type="button" name="renew" class="btn btn-success add_cart">Add to cart</button>
      <?php }else{?>
      <div class="activity_status">Not Approved</div>
      <?php };?>
    </td>
  </tr>

  <div id="primarycart_details"></div>
  <?php}?>

我正在浏览器上获取输出

    Id | Name   | price  | Action
    1  | poimjh | 10     | Add to cart
    2  | asdasd | 100    | Add to cart
    3  | dgfdfw | 50     | Add to cart
    4  | qwewqe | 100    | Not Approved
   // and so on

现在我的问题是,当我点击添加到购物车时,它会将产品详细信息添加到购物车中,并且我正在将按钮状态从 Add to cart 更改为 Remove。现在,当我刷新页面时,我的按钮再次从 Remove 更改为 Add to cart。我不想多次添加相同的产品。

Ajax

    $(document).ready(function(){
  $(document).on('click', '.add_cart', function() {
  var product_name = $(this).closest('tr').find('.productname').text();
  var product_id = $(this).closest('tr').find('.productid').val();
  var product_price = $(this).closest('tr').find('.calActivitylPrice').text();
      var quantity =1;
       $.ajax({
        url:"<?php echo base_url(); ?>Member_controller/addToCart",
        method:"POST",
        data:{product_id:product_id, product_name:product_name, product_price:product_price,quantity:quantity},
        success:function(data)
        {
            var obj = JSON.parse(data);
          //alert(data);
         $('#changeToRemove').html('<button type="button" name="remove" class="btn btn-danger btn-xs remove_inventory" id="'+obj.removebtn+'">Remove</button>')
         $('#primarycart_details').html(obj.subtotal);
        }
       });
     });
    });

删除代码

$(document).on('click', '.remove_inventory', function(){
  var row_id = $(this).attr("id");
  //alert(row_id);
  if(confirm("Are you sure you want to remove this?"))
  {
   $.ajax({
    url:"<?php echo base_url(); ?>Member_controller/Removecart",
    method:"POST",
    data:{row_id:row_id},
    success:function(data)
    {
     alert("Product removed from Cart");
    }
   });
  }
  else
  {
   return false;
  }
 });

在控制器中从购物车中删除

public function Removecart(){
 $row_id = $_POST["row_id"];
 //echo $row_id;
  $data = array(
   'rowid'  => $row_id,
   'qty'  => 0
  );
  //print_r($data);
  $this->cart->update($data);
  echo $this->viewCart();

}

在控制器中添加到购物车代码

public function addToCart(){
  $data = array(
   "id"  => $_POST["product_id"],
   "name"  => $_POST["product_name"],
    "qty"  => $_POST["quantity"],
   "price"  => $_POST["product_price"]
  );
  //print_r($data);
  $this->cart->insert($data); //return rowid 
  //echo $this->viewCart();
}

谁能帮我解决这个问题?

【问题讨论】:

    标签: php jquery html codeigniter-3 shopping-cart


    【解决方案1】:

    您可以像这样在产品循环中创建条件:

    <?php
    foreach ($post as $row) {?>
    <tr>
        <td><?php echo $i++;?></td>
        <td><?php echo $row->name;?></td>
        <td><?php echo $row->price;?></td>
        <td>
        <?php if($row->is_approved==1){
            if (in_array($row->id, array_column($this->cart->contents(), 'id'))) {
                $rowid = 0;
                foreach ($this->cart->contents() as $product) {if ($product['id'] === $row->id) { $rowid = $product['rowid']; break;}}
                ?>
            <button type="button" name="remove" class="btn btn-danger btn-xs remove_inventory" id="<?php echo $rowid; ?>">Remove</button>
            <?php } else { ?>
            <button type="button" name="renew" class="btn btn-success add_cart" data-productname="<?php echo $row->name; ?>" data-price="<?php echo $row->price;?>" data-productid="<?php echo $row->name_id; ?>" />Add to cart</button>
            <?php } ?>
        <?php }else{?>
        <div class="activity_status">Not Approved</div>
        <?php };?>
        </td>
    </tr>
    
    <div id="primarycart_details"></div>
    <?php
    }
    

    首先array_column($this-&gt;cart-&gt;contents(), 'id')用于获取产品id的数组列表,然后在其上应用in_array()以检查当前购物车项目是否存在于产品列表中。

    这一行:foreach ($this-&gt;cart-&gt;contents() as $product) {if ($product['id'] === $row-&gt;id) { $rowid = $product['rowid']; break;}} 用于查找每个产品的 rowid 值。

    【讨论】:

    • 给我一些时间检查
    • 是的,您的代码正在运行,但从购物车中移除现在无法运行。
    • 您没有分享删除购物车代码,所以我不知道它应该如何工作,我只是分享示例
    • 我刚刚更新了我的删除代码。使用您的代码发送 id 但要清除购物车中的记录,它需要 rowid 。
    • 您的 javascript 删除代码似乎没有删除 html 代码,它只是显示警报
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多