2023.11.06
記事の内容は画像の通りです。本当はカスタマイズするつもりなんてなかった人間向けの記事です。
やっていることは簡単なことですが、見た目よりはカロリーが高いので記事にしました。
バージョンは4系でも4.2系でも確認しましたので大丈夫だと思います。
まず、以下を「App\Customize\Controller\CartController.php」(なかったら追加してください)に貼り付けます。
ほぼほぼ元からあるものを再利用しているので現在の数量と変えたい数量から差分を求めて…というやり方になっています。
本当は「現在の数量」だけあれば良さそうなのですが、そこを改造しようとしたら過酷そうな道が見えたので、
あんまり触らない方がいいと思いました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /** * カートの中の商品の個数を変更する * @Route( * path="/cart/quantity_change/{productClassId}/{quantity}/{current_quantity}", * name="cart_change_quantity", * methods={"GET"} * ) */ public function changeQuantityCartItem($productClassId, $quantity, $current_quantity) { log_info('カート明細操作開始', ['operation' => 'change', 'product_class_id' => $productClassId]); /** @var ProductClass $ProductClass */ $ProductClass = $this->productClassRepository->find($productClassId); if (is_null($ProductClass)) { log_info('商品が存在しないため、カート画面へredirect', ['operation' => 'change', 'product_class_id' => $productClassId]); return $this->redirectToRoute('cart'); } //現在の個数と変更したい個数の差を求める $diff = $quantity - $current_quantity; $this->cartService->addProduct($ProductClass, $diff); // カートを取得して明細の正規化を実行 $Carts = $this->cartService->getCarts(); $this->execPurchaseFlow($Carts); log_info('カート演算処理終了', ['operation' => 'change', 'product_class_id' => $productClassId]); //元いたページに戻す return $this->redirect($_SERVER['HTTP_REFERER']); } |
1 2 3 4 5 6 7 8 9 | <li class="ec-cartRow__amountColumn"> <div class="ec-cartRow__amountUpDown"> <select class="quantity_change w-50" data-current-quantity="{{ CartItem.quantity|number_format }}" data-productclass-id="{{ ProductClass.id }}"> {% for i in 1..10 %} <option value="{{ i }}" {% if i == CartItem.quantity %}selected{% endif %}>{{ i }}</option> {% endfor %} </select> </div> </li> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <script> //ダミーの数字が入っている const url = "{{ url('cart_change_quantity', {productClassId : 'dummy_class_id', quantity : 'dummy_quantity', current_quantity: 'dummy_current_quantity'} ) }}"; $('.quantity_change').change(function(){ //urlを正しい値に置換する var new_url = url.replace('dummy_class_id', $(this).attr('data-productclass-id')); new_url = new_url.replace('dummy_quantity', $(this).val()); new_url = new_url.replace('dummy_current_quantity', $(this).attr('data-current-quantity')); location.href = new_url; }); </script> |
以上です!これだけでプルダウンから数量を変更すると数量が変わっているやつになっていると思います。
プルダウンの部分をテキストボックスと変更ボタンにすれば、任意の数字を入れて数量を変更できるようになります。