#php #codeigniter #session #model-view-controller #multidimensional-array
#php #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/удалить
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');
}
На мой взгляд, именно так я передаю идентификатор товара в теге привязки.
Вид:-
<?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;
?>
Когда я нажал на кнопку «удалить», он загружается на ту же страницу, но строка элемента не удаляется.
Комментарии:
1. Где именно находится ваша
remove item
функция??2.
print_r("<div><a href='".base_url()."index.php/Cart/remove/".$value['item_id']."' class='btn btn-danger'>Remove</a></div>");
Вот моя кнопка удаления в представлении, а функция удаления товара находится в контроллере корзины.3. Вам нужно добавить код
/Cart/remove
функции к вашему вопросу, чтобы мы могли видеть, что происходит4. добавлен код @BurhanKashour /Cart/remove
5. @Natasha Bharathi ваша проблема решена?
Ответ №1:
Это потому, что ваши пользовательские данные — это не сами значения, а массив, содержащий их. Вам нужно удалить товар из массива, а затем сохранить массив как новые пользовательские данные. Попробуйте что-то вроде этого:
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');
}
Ответ №2:
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,
Комментарии:
1. Я здесь не использую библиотеку корзины, и все мои товары находятся в массиве сеансов, как показано выше, как я могу удалить каждый элемент из сеанса?