2014-12-20 25 views
0

我正在Yii中實施購物車模塊,我可以保存會話數組中的所有物品,但每次添加相同的產品時數量增加,但又重新設置爲1.無法更新Yii中的購物車模塊中的物品數量

這裏是我的功能代碼片斷

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

} 

提前尋求幫助的感謝。

+0

您是否使用任何擴展來實現購物車功能? – Saani

回答

1

你沒有更新那裏找到了SESSION CART
也是你的代碼,它只是有點亂(在optamization的意義上)。

試試這個。

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

    } 
+0

是的,我在幾分鐘之前就明白了。感謝這使我的代碼正確。 –

0

您未訪問全局變量$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(); 

     } 
+0

那麼,你可以看到我打印**新增**,所以如果該ID不存在,它清楚地說**新增加**。我猜測發現不是損害代碼的原因。 在功能塊中聲明瞭更多的結果,因此它的範圍遍及具有更新值的函數。 每次添加相同的項目數量是2它不會去3或4,無論我重複多少次。 –

+0

好!它與GLOBAL沒有任何關係,因爲$ found仍在範圍之內。 – anwerj

相關問題