所以我有一個購物車。我可以添加,刪除和查看購物車中的產品。現在的問題是增加和減少數量。例如,如果用戶想要購買多於一個相同的產品。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代碼可能會添加錯誤?
要更新整個車我建議你建立一個表格,並提供用戶一個提交按鈕,一旦用戶設置項的數量,那麼他/她應該提交服務器端代碼的形式驗證每個項目並相應地更新其數量 –
聽起來好多了,但如果我有特定的模板,我需要按照我在文章中描述的方式來增加數量? – Dominykas55
如果您需要更改用戶操作上的數量,例如加號點擊,則每次用戶按+/-時都需要進行ajax調用,並且此ajax請求會將項目ID和數量發佈到服務器端的服務器上,使用您的登錄或重新使用您現有的代碼 –