从会话中的购物车中删除项目 |代码点火器
Removing item from Cart in Session | Codeigniter
我的购物车中有带有会话的商品,我想删除该商品,我的嵌套数组如下,
[cart_items] => Array
(
[0] => Array
(
[item_id] => 1
[item_name] => Neapolitan Pizza
[price] => 750.00
[toppings] => Array
(
[0] => Array
(
[id] => 3
[name] => Chilli
[price] => 100.00
)
[1] => Array
(
[id] => 4
[name] => Green chilli
[price] => 100.00
)
)
[quantity] => 1
[price_per_item] => 750
)
[1] => Array
(
[item_id] => 16
[item_name] => Cheesy Garlic Bread
[price] => 420.00
[quantity] => 1
[price_per_item] => 420
)
)
控制器代码:-
在我的控制器中,我为 remove each item
创建了以下函数。我在这里错过了什么?
/Cart/remove
public function remove($id){
$this->load->library('session');
$list = $this->session->userdata('cart_items');
if($list){
foreach ($list as $item=>$value){
if($id==$value['item_id']){
$this->session->unset_userdata($value);
}
}
}
redirect('Cart/index');
}
在我看来,这就是我在锚标记中传递项目 ID 的方式。
查看:-
<?php $list = $this->session->userdata('cart_items');
$grand_total=0;
if($list==Null) {
print_r("<div><li class='list-group-item d-flex justify-content-between lh-condensed'>There are no items in the your cart</li></div>");
$sub_total=0;
}else{
$sub_total=0;
foreach ($list as $item=>$value){
echo "<li class='list-group-item d-flex justify-content-between lh-condensed'>";
if($value['item_id']<16) {
print_r("<div>" . $value['item_id'] . "</div>");
print_r("<div>" . $value['item_name'] . "</div>");
print_r("<div>" . $value['price'] . "</div>");
// toppings array is empty
$toppings_price = 0;
if ($value['toppings'] == null) {
print_r("<div>No toppings selected</div>");
} else {
foreach ($value['toppings'] as $val) {
// printing topping names
print_r("");
print_r($val['name']);
print_r(",");
$toppings_price = $toppings_price + $val['price'];
}
}
}else{
print_r("<div>" . $value['item_id'] . "</div>");
print_r("<div>" . $value['item_name'] . "</div>");
print_r("<div>" . $value['price'] . "</div>");
}
print_r("<div>".$value['quantity']."</div>");
print_r("<div><a href='".base_url()."index.php/Cart/remove/".$value['item_id']."' class='btn btn-danger'>Remove</a></div>");
echo "</li>";
//sub total
if($value['item_id']<16){
$sub_total+=($value['price']*$value['quantity'])+$toppings_price;
}else{
$sub_total+=($value['price']*$value['quantity']);
}
}
}
$grand_total = $sub_total;
?>
当我点击“删除”按钮时,它加载到同一页面,但项目行没有被删除。
public function remove($id){
$this->load->library('session');
$list = $this->session->userdata('cart_items');
if($list){
foreach ($list as $item=>$value){
if($id==$value['item_id']){
$this->session->unset_userdata($value['item_id']);
}
}
}
redirect('Cart/index');
}
查看代码:-
<td>
<a href="<?= base_url().'user/remove/'.$value['item_id']; ?>">
<button>REMOVE</button>
</a>
</td>
销毁或取消设置会话的值?
$this->session->unset_userdata('some_name');
对于多个数据,您可以:-
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
并销毁会话:-
$this->session->sess_destroy();
注意:-有关 Codeigniter 中会话 Class 的更多信息,
那是因为您的用户数据不是值本身,而是包含它们的数组。您需要从数组中删除该项目,然后将数组保存为新的用户数据。尝试这样的事情:
public function remove($id){
$this->load->library('session');
$list = $this->session->userdata('cart_items');
if($list){
foreach ($list as $item=>$value){
if($id==$value['item_id']){
unset($list[$item]);
$list = array_values($list); // optional, reindex the array.
break;
}
}
$this->session->set_userdata('cart_items', $list);
}
redirect('Cart/index');
}
我的购物车中有带有会话的商品,我想删除该商品,我的嵌套数组如下,
[cart_items] => Array
(
[0] => Array
(
[item_id] => 1
[item_name] => Neapolitan Pizza
[price] => 750.00
[toppings] => Array
(
[0] => Array
(
[id] => 3
[name] => Chilli
[price] => 100.00
)
[1] => Array
(
[id] => 4
[name] => Green chilli
[price] => 100.00
)
)
[quantity] => 1
[price_per_item] => 750
)
[1] => Array
(
[item_id] => 16
[item_name] => Cheesy Garlic Bread
[price] => 420.00
[quantity] => 1
[price_per_item] => 420
)
)
控制器代码:-
在我的控制器中,我为 remove each item
创建了以下函数。我在这里错过了什么?
/Cart/remove
public function remove($id){
$this->load->library('session');
$list = $this->session->userdata('cart_items');
if($list){
foreach ($list as $item=>$value){
if($id==$value['item_id']){
$this->session->unset_userdata($value);
}
}
}
redirect('Cart/index');
}
在我看来,这就是我在锚标记中传递项目 ID 的方式。
查看:-
<?php $list = $this->session->userdata('cart_items');
$grand_total=0;
if($list==Null) {
print_r("<div><li class='list-group-item d-flex justify-content-between lh-condensed'>There are no items in the your cart</li></div>");
$sub_total=0;
}else{
$sub_total=0;
foreach ($list as $item=>$value){
echo "<li class='list-group-item d-flex justify-content-between lh-condensed'>";
if($value['item_id']<16) {
print_r("<div>" . $value['item_id'] . "</div>");
print_r("<div>" . $value['item_name'] . "</div>");
print_r("<div>" . $value['price'] . "</div>");
// toppings array is empty
$toppings_price = 0;
if ($value['toppings'] == null) {
print_r("<div>No toppings selected</div>");
} else {
foreach ($value['toppings'] as $val) {
// printing topping names
print_r("");
print_r($val['name']);
print_r(",");
$toppings_price = $toppings_price + $val['price'];
}
}
}else{
print_r("<div>" . $value['item_id'] . "</div>");
print_r("<div>" . $value['item_name'] . "</div>");
print_r("<div>" . $value['price'] . "</div>");
}
print_r("<div>".$value['quantity']."</div>");
print_r("<div><a href='".base_url()."index.php/Cart/remove/".$value['item_id']."' class='btn btn-danger'>Remove</a></div>");
echo "</li>";
//sub total
if($value['item_id']<16){
$sub_total+=($value['price']*$value['quantity'])+$toppings_price;
}else{
$sub_total+=($value['price']*$value['quantity']);
}
}
}
$grand_total = $sub_total;
?>
当我点击“删除”按钮时,它加载到同一页面,但项目行没有被删除。
public function remove($id){
$this->load->library('session');
$list = $this->session->userdata('cart_items');
if($list){
foreach ($list as $item=>$value){
if($id==$value['item_id']){
$this->session->unset_userdata($value['item_id']);
}
}
}
redirect('Cart/index');
}
查看代码:-
<td>
<a href="<?= base_url().'user/remove/'.$value['item_id']; ?>">
<button>REMOVE</button>
</a>
</td>
销毁或取消设置会话的值?
$this->session->unset_userdata('some_name');
对于多个数据,您可以:-
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
并销毁会话:-
$this->session->sess_destroy();
注意:-有关 Codeigniter 中会话 Class 的更多信息,
那是因为您的用户数据不是值本身,而是包含它们的数组。您需要从数组中删除该项目,然后将数组保存为新的用户数据。尝试这样的事情:
public function remove($id){
$this->load->library('session');
$list = $this->session->userdata('cart_items');
if($list){
foreach ($list as $item=>$value){
if($id==$value['item_id']){
unset($list[$item]);
$list = array_values($list); // optional, reindex the array.
break;
}
}
$this->session->set_userdata('cart_items', $list);
}
redirect('Cart/index');
}