Yêu cầu thg 5 10, 2018 2:09 SA 696 0 1
  • 696 0 1
+1

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

Chia sẻ
  • 696 0 1

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


Đã trả lời thg 5 10, 2018 2:14 SA
+2

Đâ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.

Chia sẻ
Avatar Võ Trường Phúc @truongphuc1999
thg 5 10, 2018 2:18 SA

Ý 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ứ.

Avatar Truong Dang @xdangminhtruongx
thg 5 10, 2018 2:24 SA

@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 á...

Avatar Võ Trường Phúc @truongphuc1999
thg 5 10, 2018 2:27 SA

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

Avatar Tran Duc Thang @thangtd90
thg 5 10, 2018 3:16 SA

@truongphuc1999

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)?

thg 5 10, 2018 3:38 SA

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ì.

Avatar Võ Trường Phúc @truongphuc1999
thg 5 10, 2018 3:41 SA

@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: Capture.PNG
  • 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)? " @@
Avatar Tran Duc Thang @thangtd90
thg 5 10, 2018 4:02 SA

@truongphuc1999

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ụ:

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 ...)

Avatar Võ Trường Phúc @truongphuc1999
thg 5 10, 2018 4:04 SA

@thangtd90 Ok mình cảm ơn b nhiều 😄.

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í