Невозможно обновить количество товаров в модуле корзины в Yii

Я реализую модуль корзины в Yii, я могу сохранить все в массиве сеансов, но каждый раз, когда добавляется один и тот же продукт, количество увеличивается, но снова устанавливается на 1.

вот мой фрагмент кода функции

public function actionAddToCart($id) {
$found = 0;
$cart = array();
$cart_item = $this->loadModel($id)->name;
$cart_price = $this->loadModel($id)->price;

$newItem = Yii::app()->session['cart'];

foreach ($newItem as $item) {
    if($id == $item['id']) {
        echo "quantity" . $item['quantity'];
        $item['quantity'] += 1;
        $found = 1;
        $newItem[$id] = array('name'=>$cart_item,'price'=>$cart_price, 'quantity'=>$item['quantity'], 'id'=>$id ) ;
        echo "Element Found=" . $found . 'Now quantity is '.$item['quantity'];
    }

}
if($found != 1) {
    $newItem[$id] = array('name'=>$cart_item,'price'=>$cart_price, 'quantity'=>1, 'id'=>$id ) ;
    Yii::app()->session['cart'] = $newItem ;
    echo "New added" ;
}
//array_push($cart, Yii::app()->session['cart'][$id] ) ;         //array('name'=>$cart_item,'price'=>$cart_price)) ;

echo json_encode(array("items"=>$newItem));
Yii::app()->end();

}

Заранее благодарю за помощь.


person Harshit Chaudhary    schedule 20.12.2014    source источник
comment
вы используете какое-либо расширение для реализации функций корзины?   -  person Saani    schedule 07.12.2015


Ответы (2)


Вы не обновляете СЕССИОННУЮ КОРЗИНУ там, где она есть,
Также ваш код немного беспорядок (в смысле оптимизации).

попробуй это.

 public function actionAddToCart($id) {

        $newItem = Yii::app()->session['cart'];

        if(isset($newItem[$id])){
            $newItem[$id]['quantity']++;
            echo "Element Found= 1 Now quantity is ".$newItem[$id]['quantity'];
        }
        else{
            $cartItem= $this->loadModel($id)
            $newItem[$id] = array('name'=>$cartItem->name,'price'=>$cartItem->price, 'quantity'=>1, 'id'=>$id ) ;            
        }

        Yii::app()->session['cart'] = $newItem ;
        //array_push($cart, Yii::app()->session['cart'][$id] ) ;   
        //array('name'=>$cart_item,'price'=>$cart_price)) ;

        echo json_encode(array("items"=>$newItem));
        Yii::app()->end();

    }
person anwerj    schedule 20.12.2014
comment
Да, я получил это за несколько минут до этого. Спасибо, это исправило мой код. - person Harshit Chaudhary; 20.12.2014

У вас нет доступа к глобальной переменной $found.

Вот модифицированный код:

    public function actionAddToCart($id) {
        $found = 0;
        $cart = array();
        $cart_item = $this->loadModel($id)->name;
        $cart_price = $this->loadModel($id)->price;

        $newItem = Yii::app()->session['cart'];

        foreach ($newItem as $item) {
            if($id == $item['id']) {
                echo "quantity" . $item['quantity'];
                $item['quantity'] += 1;
                $GLOBALS['found'] = 1;
                $newItem[$id] = array('name'=>$cart_item,'price'=>$cart_price, 'quantity'=>$item['quantity'], 'id'=>$id ) ;
                echo "Element Found=" . $found . 'Now quantity is '.$item['quantity'];
            }

        }
        if($found == 0) {
            $newItem[$id] = array('name'=>$cart_item,'price'=>$cart_price, 'quantity'=>1, 'id'=>$id ) ;
            Yii::app()->session['cart'] = $newItem ;
            echo "New added" ;
        }
        //array_push($cart, Yii::app()->session['cart'][$id] ) ;         //array('name'=>$cart_item,'price'=>$cart_price)) ;

        echo json_encode(array("items"=>$newItem));
        Yii::app()->end();

        }
person Pavan Jiwnani    schedule 20.12.2014
comment
Как вы можете видеть, я печатаю новое добавленное, поэтому, если этот идентификатор отсутствует, четко укажите новое добавление. Думаю, что найденный - это не причина испортить код. Более того, найденное объявлено в функциональных блоках, поэтому его область действия распространяется на функцию со значением обновления. Каждый раз, когда добавляется один и тот же элемент, количество равно 2, оно не доходило до 3 или 4, независимо от того, сколько раз я повторяю это. - person Harshit Chaudhary; 20.12.2014
comment
хорошо! он не имеет ничего общего с GLOBAL, поскольку $ found все еще находится в области видимости. - person anwerj; 20.12.2014