Thay đổi thông tin sản phẩm đã thêm trong giỏ hàng khi cập nhật thông tin sản phẩm
Mình đang làm chức năng giỏ hàng bằng Package Crinsane Shopping Cart. Và mình nhìn thấy một vấn đề là khi người quản trị cập nhật lại giá của sản phẩm thì khi người dùng vào giỏ hàng thì giá vẫn chưa được cập nhật theo. Mình không biết hướng bắt đầu để giải quyết vấn đề này như thế nào. \
Mong nhận được cách giải quyết vấn đề này của mọi người.
1 CÂU TRẢ LỜI
Đây là tính năng bạn ơi, giá được tính tại thời điểm mua hàng chứ không phải là giá theo sự thay đổi của Admin. Vì lúc người dùng đặt hàng giá là x, sau đó bạn sửa giá là y thì giá người dùng mua vẫn là x chứ ko được là y, tránh dẫn đến tình trạng số tiền phải trả cao hơn lúc đặt hàng. Mình nghĩ bạn không cần phải thay đổi lại Logic này đâu.
Ý mình là người dùng mới thêm sản phẩm vào giỏ hàng thôi, chứ chưa có tiến hành đặt hàng, nên khi sản phẩm đã hết hàng hay là giá được thay đổi thì giá của sản phẩm trong giỏ hàng mình nghĩ cũng phải được thay đổi chứ.
@truongphuc1999 Cái Crinsane Shopping Cart khi bạn thêm sản phẩm vào giỏ hàng thì thông tin của sản phẩm tại thời điểm thêm nó lưu vào sesion bạn ạ... Nên admin sửa thông tin trên database n chả ảnh hưởng gì đến thông tin giỏ hàng hết á...
Cái đó mình hiểu. Vậy giờ mình muốn làm theo ý trên thì phải làm sao #TruongDang
Và mình nhìn thấy một vấn đề là khi người quản trị cập nhật lại giá của sản phẩm thì khi người dùng vào giỏ hàng thì giá vẫn chưa được cập nhật theo.
Nếu khi bạn lưu vào giỏ hàng, bạn chỉ lưu id
của sản phẩm, mà không lưu cả giá lúc đó, thì khi người dùng vào xem giỏ hàng, người ta sẽ luôn thấy giá mới nhất trong database chứ nhỉ Bởi lúc đó phần server mới query vào databse lấy thông tin sản phẩm (trong đó có giá) để hiển thị ra mà?
Hay ý bạn là user đang mở trang giỏ hàng, và admin thay đổi giá thì giá đó cần được update ngay ở phía trình duyệt của user (mà không cần user phải reload lại trình duyệt)?
Theo mình cái shoping cart này bạn tự viết cho dễ control chứ không phải dùng package ngoài làm gì.
@thangtd90 mình lưu id, name, price, quantity vào luôn. Để Shopping Cart nó lấy được tổng giá trong giỏ hàng (total). Nên là mình không có query id để lấy thông tin sản phẩm.
- Vấn đề của mình mình đã giải quyết bằng cách: khi người dùng vào giỏ hàng thì lấy từng id của sản phẩm ra sau đó query vào DB lấy thông tin sản phẩm mới nhất rồi update vào giỏ hàng. Với cách đó mình giải quyết luôn được vấn đề Người quản trị xóa sản phẩm trong DB thì sản phẩm trong giỏ hàng cũng bị xóa luôn. Đây là code:
- Sẵn cho mình hỏi luôn là làm sao để làm được cái này " Hay ý bạn là user đang mở trang giỏ hàng, và admin thay đổi giá thì giá đó cần được update ngay ở phía trình duyệt của user (mà không cần user phải reload lại trình duyệt)? " @@
Vấn đề của mình mình đã giải quyết bằng cách: khi người dùng vào giỏ hàng thì lấy từng id của sản phẩm ra sau đó query vào DB lấy thông tin sản phẩm mới nhất rồi update vào giỏ hàng. Với cách đó mình giải quyết luôn được vấn đề Người quản trị xóa sản phẩm trong DB thì sản phẩm trong giỏ hàng cũng bị xóa luôn.
Đúng rồi, bạn nên query vào DB để lấy dữ liệu, như vậy có thể khắc phục được vấn đề dữ liệu được Admin update
Sẵn cho mình hỏi luôn là làm sao để làm được cái này " Hay ý bạn là user đang mở trang giỏ hàng, và admin thay đổi giá thì giá đó cần được update ngay ở phía trình duyệt của user (mà không cần user phải reload lại trình duyệt)? " @@
Để làm được chức năng real-time như vậy thì bạn cần sử dụng một công nghệ gọi là web socket, trong Laravel có sẵn một công cụ hỗ trợ bạn sử dụng web socket là Laravel Echo đấy
Trên Viblo cũng có khá nhiều bài viết về Laravel Echo, bạn có thể tham khảo thêm, ví dụ:
- https://viblo.asia/p/tong-quan-ve-laravel-echo-3KbvZqK4GmWB
- https://viblo.asia/p/laravel-echo-E375zb9J5GW
Nhìn chung tư tưởng của nó là phía client và server luôn có kết nối với nhau, khi có sự thay đổi ở phía server (ở đây là giá sản phẩm), bạn gửi thông báo về sự thay đổi, kèm theo nội dung thay đổi đó cho client (phía server chủ động gửi, chứ không phải client chủ động request lên). Client, ở đây là browser, nhận thông báo về sự thay đổi, và thực hiện hành động tương ứng với sự thay đổi đó (update giá, update tổng tiền ...)
@thangtd90 Ok mình cảm ơn b nhiều .