Laravel – Xây dựng giỏ hàng đơn giản với bumbummen99

Tram Ho

Giới thiệu

Nếu bạn đang triển khai một dự án Thương mại điện tử (E-Commerce), việc xây dựng một giỏ hàng và quản lý nó là một điều rất quan trọng. Thông thường, nếu ta code chức năng này theo cách thủ công thường sẽ tốn kha khá thời gian. Để tiết kiệm effort, ta có thể sử dụng những packages có sẵn hộ trợ về ShoppingCart như Crinsane/LaravelShoppingcart, bumbummen99/shoppingcart, darryldecode/cart,…

Bài viết này, mình sẽ chia sẻ với mọi người package để xây dựng giỏ hàng mà mình đã sử dụng qua – bumbummen99/shoppingcart – về tính năng, cách sử dụng và những lợi ích của nó. Cho đến thời điểm viết bài, Package này tương thích với Laravel từ phiên bản 8+ trở xuống.

Cài đặt

Để cài đặt Package Bumbummen99 chúng ta chạy lệnh sau:

Để config lại Package Bumbummen chúng ta phải publish nó trong Vendor thông qua lệnh sau:

Điều này sẽ cung cấp cho chúng ta file cart.php trong folder config để có thể thực hiện các thay đổi với các thông số của nó.

Bây giờ package đã sẵn sàng để bắt đầu sử dụng xây dựng giỏ hàng cho project.

Sử dụng

Khai báo

Để sử dụng nó, trước tiên chúng ta cần gọi nó trong Controller mà ta viết logic cho giỏ hàng

Một số hàm quan trọng

Thêm sản phẩm vào giỏ hàng

Package cung cấp phương thức Cart::add() để thêm vào giỏ hàng

Trong đó:

  • id, name, qty, price, weight: là những thuộc tính cơ bản cần có của một ứng dụng Shopping Cart, và cũng là bắt buộc của Bumbummen. Nếu không sử dụng thuộc tính nào thì có thể cho giá trị bằng 0 và bỏ qua, tuy nhiên không được phép xóa.
  • options: các thuộc tính bổ sung cần dùng của riêng bạn nếu như chưa được khai báo ở trên.

Ví dụ, chẳng hạn một sản phẩm là cái áo, ta cần truyền vào phương thức những giá trị bắt buộc như id để lưu id của nó, name: tên của chiếc áo, qty: số lượng áo người dùng chọn, price: giá, weight: chiếc áo thì không cần khối lượng nên ta truyền giá trị bất kì và không cần quan tâm đến nó. Ngoài ra, để đặt một chiếc áo chúng ta cần có thêm size, màu, code,… ta sẽ thêm chúng vào mảng options.

Ta xây dựng function để thêm chiếc áo, đặt tên là addToCart.

Cùng phân tích một chút. Người dùng thêm chiếc áo, function addToCart được thực thi.

Trước tiên, sẽ find chiếc áo đó theo $id và lấy các trường như quantity, size từ view thông qua Request. Sau đó, sử dụng phương thức Cart::add() và truyền các thuộc tính như code ở trên để thêm được sản phẩm vào giỏ hàng.

Hiển thị sản phẩm trong giỏ hàng.

Ta dùng:

Trong đó:

  • Cart::content() trả về một mảng các sản phẩm trong giỏ hàng, mỗi sản phẩm sẽ được lưu trữ dưới dạng một đối tượng. Mình ví dụ thử dd(Cart::content()) để xem nó trả ra như nào:

image.png

Ngoài một số trường mình đã giới thiệu ở trên, trong ảnh còn một số trường khác như rowId,…

rowId sẽ được package tự động sinh ra sau khi chúng ta sử dụng phương thức add() để thêm sản phẩm vào giỏ hàng. rowId được sinh ra với mục đích để định danh sản phẩm đã được thêm vào giỏ hàng, nó được sử dụng cho một số hàm mình sẽ giới thiệu ở dưới đây.

Mục đích chính của phương thức này là lấy ra những sản phẩm trong giỏ hàng mà người dùng đã addToCart và để xây dựng chi tiết giỏ hàng để hiển thị cho người dùng chẳng hạn.

Lấy ra một sản phẩm trong giỏ hàng

Nếu bạn muốn lấy một mặt hàng từ giỏ hàng bằng cách sử dụng rowId của nó, bạn chỉ cần gọi phương thức get() trên giỏ hàng và chuyển cho nó rowId.

Tính tổng tiền trong giỏ hàng

Tổng trước thuế

Tổng sau thuế

Code:

Trong đó:

  • Chiết khấu thuế được tính theo %, và mặc định là 21% được khai báo tại file config config/cart.php.
  • Ta có thể config lại bằng cách thay đổi giá trị của trường 'tax' => 21 thành 'tax' => 8 theo thuế GTGT tại Việt Nam
    image.png

Cập nhật giỏ hàng

Để cập nhật giỏ hàng, ta có thể sử dụng phương thức sau

Trong đó:

  • $rowId: chuỗi ký tự ngẫu nhiên được sinh một cách tự động để quản lý mỗi sản phảm trong giỏ hàng mỗi khi thêm mới một sản phẩm vào giỏ.
  • $qty: số lượng mới cần cập nhật

Nếu bạn muốn cập nhật các tùy chọn trong options của một mặt hàng trong giỏ hàng, có thể dùng

Xóa giỏ hàng

Xóa 1 sản phẩm

Để xóa một mặt hàng khỏi giỏ hàng, bạn sẽ cần lại rowId. RowId này bạn chỉ cần chuyển đến phương thức remove() và nó sẽ xóa mặt hàng khỏi giỏ hàng.

Xóa toàn bộ giỏ hàng

Nếu bạn muốn xóa hoàn toàn nội dung của giỏ hàng, bạn có thể gọi phương thức destroy(). Thao tác này sẽ xóa tất cả CartItems khỏi giỏ hàng đối với phiên giỏ hàng hiện tại.

Phương thức này sẽ giúp ích cho chúng ta trong trường hợp người dùng đặt hàng thành công tất cả sản phẩm trong giỏ hàng và nó sẽ xóa toàn bộ giỏ hàng đi.

Một số phương thức khác

Cart::weight()

  • để lấy tổng trọng lượng của tất cả các mặt hàng trong giỏ hàng, dựa trên trọng lượng và số lượng của chúng

Cart::tax()

  • lấy ra tổng số tiền thuế đã tính cho tất cả các mặt hàng trong giỏ hàng, dựa trên giá và số lượng

Cart::count()

  • Nếu bạn muốn biết có bao nhiêu mặt hàng trong giỏ hàng của mình, bạn có thể sử dụng phương thức count(). Phương thức này sẽ trả về tổng số mặt hàng trong giỏ hàng. Vì vậy, nếu bạn đã thêm 2 cuốn sách và 1 áo sơ mi, nó sẽ trả về 3 mục.

Cart::search()

  • Tìm kiếm sản phẩm trong giỏ hàng theo thuộc tính của nó

Ví dụ, nếu bạn muốn tìm tất cả các mục có id là 1
Ví dụ

Một số hàm để set giá trị cho Tax, Discount,…

Bạn có thể tìm hiểu thêm một số hàm hoặc hiểu rõ hơn các hàm tại

https://packagist.org/packages/bumbummen99/shoppingcart

Tổng kết

Bài viết trên mình đã tổng hợp lại các hàm và cách sử dụng của package bumbummen99. Mình thấy đây là một package khá là có ích và dễ dàng sử dụng. Mong rằng sẽ giúp ích cho quá trình code của các bạn. Nếu có thiếu xót ở đâu mong nhận được những góp ý của mọi người

Hẹn gặp lại các bạn ở những bài viết sau.
Thân ái!

Tài liệu tham khảo: https://packagist.org/packages/bumbummen99/shoppingcart

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo