Giỏ hàng
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
Ý 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
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 ạ
@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
Ý 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 ?
đúng rồi ạ. mặc định sẽ là 1 và nếu thêm ( + ) 1 nữa thì sẽ giữ số lượng = 2 ạ
@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
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 ạ
@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
})
dạ e cảm ơn,để e tìm hiểu và làm ạ
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
cái mình cần giải quyết là update đó bạn, vẫn chưa update đc
@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
đâ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 ạ
@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
hi,mình cảm ơn.để mình làm thử xem dc ko ajax mình khá yếu
@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