2014-12-20 6 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 카트를 업데이트하지 않는,
또한 귀하의 코드 그것 (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

글쎄, 당신이 볼 수 있듯이 나는 ** 새로운 **을 추가했기 때문에 만약 그 아이디가 없다면 분명히 ** 새로운 **이 추가되었다. 나는 코드를 해치는 이유가 아니라고 생각한다. 발견 된 것 이상은 함수 블록에서 선언되므로 범위는 업데이트 값이있는 함수 전체에 적용됩니다. 동일한 항목이 추가 될 때마다 수량을 2로 반복 할 때마다 3 또는 4로 이동하지 않았습니다. –

+0

음! $는 아직 범위에 포함되어 있으므로 GLOBAL과 아무런 관련이 없습니다. – anwerj

관련 문제