2015-05-04 54 views
3

所以我有一個購物車。我可以添加,刪除和查看購物車中的產品。現在的問題是增加和減少數量。例如,如果用戶想要購買多於一個相同的產品。Symfony2需要一些清晰和指導與購物車(關於數量)

背景:

有兩種方式你如何能提高你的數量:

您可以在每次從它的詳細信息頁面添加一個產品的時候增加了。這部分作品和IM這樣喜歡這裏:

if(isset($cart[$id])) { 

      $qtyAvailable = $product->getStock(); 

       if ($qtyAvailable > $cart[ $id ]) { 
        $cart[ $id ] = $cart[ $id ] + 1; 
       } else { 

       return $this->redirect($this->generateUrl('cart')); 
      } 


     } else { 
      // if it doesnt make it 1 
      $cart = $session->get('cart', array()); 
      $cart[$id] = 1; 
     } 

什麼是$車在這裏?

正如你所看到的,我正在檢查產品的ID是否已經存在於購物車中。如果它確實增加了它的價值。我的數組Cart只有一個關鍵字,它是產品的id,我每次添加相同的產品時都會增加ids值。

另一種方法是使用按鈕+, - 增加購物車本身的數量。我被困在這部分。

我猜測有兩種方法可以在這裏增加數量,無論是通過使用JavaScript或寫在頂部(我更喜歡這一個)類似的功能。因爲我不習慣的javascript的唯一途徑,我認爲我可以做到這一點是通過編寫此:

<div class="input-append"><input class="span1" style="max-width:34px" placeholder="{{ key }}" id="appendedInputButtons" size="16" type="text"> 
<button class="btn" type="button" name="add" onclick='javascript: document.getElementById("appendedInputButtons").value++;'><i class="icon-minus"></i></button> 
<button class="btn" type="button" name='subtract' onclick='javascript: document.getElementById("appendedInputButtons").value--;'><i class="icon-plus"></i></button> 

然而,這只是改變屏幕上的數字,它不增加或陣列本身降低。也許有一種方法,你可以用javascript來改變數組值?

UPDATE

好了,所以我想了解該代碼的StackOverflow的用戶之一已經提供了,但我得到了一些問題。

所以在我的樹枝我有此:

<div class="input-append"><input class="span1" style="max-width:34px" name="quantity" placeholder="{{ key }}" id="appendedInputButtons" size="16" type="text" data-id="12"> 
        <button class="btn" type="submit" value="increase"><a href="javascript:void(0)" class="plus"><i class="icon-minus"></i></button> 
        <button class="btn" type="button"><i class="icon-plus"></i></button> 

然後在我控制我的例子一樣做:

/** 
* @Route("/cart/update", name="cart_update") 
*/ 
public function cartUpdateAction(Request $request) 
    { 
     $response = new JsonResponse(); 
    $requestData = $request->request->all(); 
    $productid  = $requestData['product'];/** first put all validations not empty/ is numeric and exists in your db etc*/ 
    $quantity = $requestData['quantity'];/** first put all validations not empty/ is numeric etc */ 
    /** if all is good then put your logic*/ 
    $product = $em->getRepository('MpShopBundle:Product')->find($productid); 
    $qtyAvailable = $product->getStock(); 
    $session = $this->getRequest()->getSession(); 
    $cart = $session->get('cart', array()); 

    if ($qtyAvailable > $cart[ $productid ]) { 
     $cart[ $productid ] = $cart[ $productid ] + 1; 
     $response->setData(array('success'=>true,'message'=>'Qunatity increased')); 
    } else { 
     $response->setData(array('success'=>false,'message'=>'Out of stock')); 
    } 
    return $response; 
} 

對我有地方現在我有問題寫javascript代碼?我讀到,你必須創建一個新的.js文件,並添加資產,所以我這樣做:

我已經添加了jquery庫和我的ajax腳本文件資產在我的base.twig.html文件像這樣:

{% block javascripts %} 

      {# Le Javascript #}   
       {% javascripts 


        'bundles/mpFrontend/assets/js/jquery-1.11.2.min.js'   
        'Mp/ShopBundle/Resources/js/scripts.js' 
        %}  
        <script src="{{ asset_url }}"></script>  
       {% endjavascripts %} 

然後我擴展我想要使用ajax的樹枝base.html.twig。 但按下按鈕時沒有任何反應。所以ajax代碼可能會添加錯誤?

+0

要更新整個車我建議你建立一個表格,並提供用戶一個提交按鈕,一旦用戶設置項的數量,那麼他/她應該提交服務器端代碼的形式驗證每個項目並相應地更新其數量 –

+0

聽起來好多了,但如果我有特定的模板,我需要按照我在文章中描述的方式來增加數量? – Dominykas55

+0

如果您需要更改用戶操作上的數量,例如加號點擊,則每次用戶按+/-時都需要進行ajax調用,並且此ajax請求會將項目ID和數量發佈到服務器端的服務器上,使用您的登錄或重新使用您現有的代碼 –

回答

0

您可以使用jQueryAjax挑選值並將值發佈到服務器,您必須首先包含該庫才能使用。

樣品標記將每個項目都有其自己的容器一個輸入文本或隱藏,如果你使用任何的js效果來增加數量,確保此輸入被更新由用戶在每次進行遞增或遞減動作

<div class="item"> 
    <input type="text" data-id="product id here" /> 
    <a href="javascript:void(0)" class="plus">+</a> 
    <a href="javascript:void(0)">-</a> 
</div> 
<div class="item">...</div> 
<div class="item">...</div> 
使用類加,這樣就可以提交值到服務器錨

初始化點擊處理程序來更新您的購物車陣

$('.plus').on('click', function (e) { 
    $this = $(this); 
    $.ajax({ 
     type: 'POST', 
     url: 'server side action url here',// /cart/update 
     async: false, 
     dataType: 'JSON', 
     data: {product: $this.parent('.item').find('input').data('id'),quantity: $this.parent('.item').find('input').val()}, 
     success: function (data) { 
      if(data.success == false){ 
      alert('error') 
      } 
     } 
    }); 
}); 

在您的服務器端操作只是一個示例代碼爲遞增量,如果你的想法,你可以implem耳鼻喉科同爲遞減的情況

use Symfony\Component\HttpFoundation\JsonResponse; 
use Symfony\Component\HttpFoundation\Request; /** At the top of your controller*/ 
/** 
* @Route("/cart/update", name="cart_update") 
*/ 
public function cartUpdateAction(Request $request) { 
    $response = new JsonResponse(); 
    $requestData = $request->request->all(); 
    $productid  = $requestData['product'];/** first put all validations not empty/ is numeric and exists in your db etc*/ 
    $quantity = $requestData['quantity'];/** first put all validations not empty/ is numeric etc */ 
    /** if all is good then put your logic*/ 
    $product = $em->getRepository('MpShopBundle:Product')->find($productid); 
    $qtyAvailable = $product->getStock(); 
    $session = $this->getRequest()->getSession(); 
    $cart = $session->get('cart', array()); 
    if ($qtyAvailable > $cart[ $productid ]) { 
     $cart[ $productid ] = $cart[ $productid ] + 1; 
     $response->setData(array('success'=>true,'message'=>'Qunatity increased')); 
    } else { 
     $response->setData(array('success'=>false,'message'=>'Out of stock')); 
    } 
    return $response; 
} 
+0

你能檢查我更新的帖子嗎? – Dominykas55