Yêu cầu thg 11 27, 2019 2:32 SA 377 0 3
  • 377 0 3
0

Giỏ hàng

Chia sẻ
  • 377 0 3

hi,chào mn.mn cho e hỏi khi ta thay đổi số lượng 1 mặt hàng trong giỏ hàng thì làm sao giữ lại đc số lương t đã thay đổi ,(không trả về số lượng mặc định ban đầu).Em biết là phải dùng id của mặt hàng đó nhưng chưa biết cách lấy số lượng đã thay đổi.Em code laravel nhưng không dùng shoppingcart ạ

3 CÂU TRẢ LỜI


Đã trả lời thg 11 27, 2019 2:37 SA
Đã được chấp nhận
+1

Ý tưởng: đã nói đến giỏ hàng tức là em sẽ phải dùng session để lưu các mặt hàng được chọn đúng không? Em hãy lưu 1 mảng ví dụ như này:

$session = [
    "mat hang 1" => [
        "ten" => "Kem danh rang",
        "soluong=> 3
    ]
]

Mỗi khi người dùng click thêm 1 mặt hàng mới, em update lại session theo key: $session['mat hang 1']['soluong'] = 4, rồi gán lại vào session() là được

Chia sẻ
Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 2:42 SA

mình đã lưu đc các mặt hàng trong session rồi a, vấn đề ở đây là lưu số lượng trong session ta đã thay đổi ạ

thg 11 27, 2019 2:47 SA

@PhanNhuHuyen thì như trên đó bạn, khi người ta click update 1 mặt hàng, bạn cần lấy ID của mặt hàng đó, tìm trong mảng session, tìm được rồi thì bạn cộng số lượng theo như key ở trên lên 1, rồi gán lại vào function session() còn tổng số mặt hàng đang có trong giỏi thì bạn cũng làm tương tự, lấy toàn bộ session giỏ hàng ra, dùng vòng foreach cộng tất cả số lượng lại

Đã trả lời thg 11 27, 2019 2:34 SA
+1

Ý là bạn muốn hiển thị được số lượng bạn vừa thêm vào hoặc bớt đi và cả tổng số lượng đang có đúng không bạn ?

Chia sẻ
Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 2:35 SA

đúng rồi ạ. mặc định sẽ là 1 và nếu thêm ( + ) 1 nữa thì sẽ giữ số lượng = 2 ạ

thg 11 27, 2019 2:43 SA

@PhanNhuHuyen vậy thì bạn chỉ cần tạo 1 cái session có dạng như này mỗi khi người ta thêm mới một sản phẩm vào giỏ hàng:

session()->put("cart.product-$productId" , [
    'name' => 'Product 1',
    'image' => 'Product Image Url',
   'quantity' => 1,
   'price' => 2000
]);

Trong trường hợp update giỏ hàng thì bạn chỉ cần cập nhật lại là:

session()->put("cart.product-$productId.quantity", 
  session()->get("cart.product-$productId.quantity") + 1, // bạn có thể thay 1 bằng số lượng công thêm mong muốn
);

Với $productId sẽ là ID tương ứng của product của bạn

Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 3:15 SA
Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 3:30 SA

sss.png giohang.png Trên là session và giỏ hàng (2 sp) của mình.giờ mình muốn thây đổi số lượng sp (1 trong 2 sp hoặc cả 2 sp),thì làm sao mình lấy đc id sp mà mình thay đổi số lượng và update số lượng đã thay đổi ntn ạ

thg 11 27, 2019 3:38 SA

@PhanNhuHuyen thông thường phần cập nhật số lượng sản phẩm này sẽ gửi qua ajax và bạn cần viết code bên javascript để xử lý việc lấy ra id và số lượng sản phẩm muốn cập nhật. về Id thì khi trả về giao diện bạn có thể gán nó vào cái button cộng kia luôn như sau:

<button class="cart__add_quantity" data-pid={$product->id}>+</button>

Sau đó bên javascript giả sử bạn dùng jquery thì có thể viết:

$('.cart__add_quantity').on('click', function() {
     const productId = this.data('pid'); // Lấy id của sản phẩm
})
Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 3:47 SA

dạ e cảm ơn,để e tìm hiểu và làm ạ

Đã trả lời thg 11 27, 2019 2:36 SA
+1

Bạn có thể lưu lại trong cache hoặc session. Giỏ hàng tự custom thì mình hay dùng vậy. Lưu lại id của sản phẩm và những thông tin cần hiển thị. Khi mà bạn tăng số lượng hay xóa đi thì bạn update cache hoặc session là được

Chia sẻ
Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 2:43 SA

cái mình cần giải quyết là update đó bạn, vẫn chưa update đc

Avatar Dương Mạnh Hoàng @duong.manh.hoang
thg 11 27, 2019 2:59 SA

@PhanNhuHuyen Giờ bạn lấy session đó về. Rồi dùng mấy hàm xử lý mảng update những thứ cần thiết rồi bạn lại update cái data mới kia vào session kia. Còn bạn có thể nói rõ là bạn đang vướng mắc ở đoạn nào không. Ví dụ như là không biết làm thế nào để sửa dữ liệu trong mảng chẳng hạn

Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 3:09 SA

sss.png đây là session giỏ hang của mình (có 2 sp).giờ mình thây đổi số lượng (1 trong 2 sp) trong giỏ hàng thì làm sao lấy đc id sp mình đã thay đổi ạ giohang.png

Avatar Dương Mạnh Hoàng @duong.manh.hoang
thg 11 27, 2019 3:17 SA

@PhanNhuHuyen Bạn có thể dùng ajax. Đầu tiên bạn đặt 1 attribute cho thẻ của bạn. Chẳng hạn như thẻ <tr productId='id san pham o day'>. Sau đó bạn get attribute để lấy được id đó. Mỗi lần click + hoặc - kia bạn đồng thời gửi request lên, và gửi kèm theo cái id bạn lấy được. Còn tất cả dữ liệu của bạn chỉ được lưu khi bạn click vào nút cập nhập giỏ hàng hay gì đó thì mỗi lần update chắc bạn sẽ phải ghi đè lại toàn bộ dữ liệu

Avatar HuyềnNhư @PhanNhuHuyen
thg 11 27, 2019 3:19 SA

hi,mình cảm ơn.để mình làm thử xem dc ko ajax mình khá yếu

Avatar Dương Mạnh Hoàng @duong.manh.hoang
thg 11 27, 2019 3:20 SA

@PhanNhuHuyen ok bạn. Có gì không hiểu bạn cứ hỏi. Mọi người trên này sẽ giúp đỡ bạn 😃

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí