This episode is for members only

Sign up to access "Build an E-Commerce Platform" right now.

Get started
Already a member? Sign in to continue
Playing
10. Faking adding the final variation

Episodes

0%
Your progress
  • Total: 8h 42m
  • Played: 0m
  • Remaining: 8h 42m
Join or sign in to track your progress
01. Introduction and demo
9m 42s
0%
02. Installing Laravel, Breeze and Livewire
4m 47s
0%
03. Creating categories
9m 4s
0%
04. Recursively displaying categories
8m 21s
0%
05. Product model and migration
2m 50s
0%
06. Showing a product
7m 50s
0%
07. Product variation setup
10m 26s
0%
08. Creating the product selector
10m 34s
0%
09. Loading child variation dropdowns
4m 28s
0%
10. Faking adding the final variation
9m 33s
0%
11. Setting up product stock
4m 34s
0%
12. Calculating variation stock levels
9m 1s
0%
13. Adding product images with MediaLibrary
8m 50s
0%
14. Creating the product gallery
7m 28s
0%
15. Providing a fallback image
2m 56s
0%
16. Adding media to product variations
3m 37s
0%
17. Creating the cart model
3m 37s
0%
18. Registering the cart service
6m 34s
0%
19. Creating a cart session
11m 4s
0%
20. Showing the cart in the navigation
9m 19s
0%
21. Caching the cart instance
3m 2s
0%
22. Adding items to the cart
14m 1s
0%
23. Creating the notification component
8m 5s
0%
24. Showing the user's cart
6m 50s
0%
25. Outputting cart items
4m 50s
0%
26. Showing variation specifics
8m 8s
0%
27. Updating item quantity
8m 2s
0%
28. Removing an item from the cart
6m 1s
0%
29. Calculating the cart summary
8m 7s
0%
30. Showing the category products page
5m 1s
0%
31. Indexing products in Meilisearch
8m 32s
0%
32. Hooking up products to categories
4m 15s
0%
33. Building the product browser
13m 32s
0%
34. Showing child categories
1m 51s
0%
35. Indexing product variations for filtering
8m
0%
36. Outputting variations for filtering
12m 52s
0%
37. Hooking up product filters with Livewire
7m 48s
0%
38. Filtering products
12m 24s
0%
39. Filtering by price
9m 50s
0%
40. Adding global navigation search
7m 50s
0%
41. Handling products that are not live
3m 22s
0%
42. Price range category fix
1m 18s
0%
43. Scaffolding the checkout page
8m 6s
0%
44. Listing shipping options
9m 3s
0%
45. Calculating the cart totals
2m 52s
0%
46. Validating the account form
9m 10s
0%
47. Validating the shipping form
5m 47s
0%
48. Saving the shipping address
8m 4s
0%
49. Selecting a saved shipping address
6m 39s
0%
50. Fix shipping address error for non authenticated users
1m 7s
0%
51. Redirecting if the cart is empty
2m 42s
0%
52. Checking for quantity changes
7m 11s
0%
53. Syncing if quantities have changed
11m 59s
0%
54. Flashing a message when quantities have changed
5m 48s
0%
55. Setting up for orders
5m 17s
0%
56. Creating an order
13m 24s
0%
57. Attaching variations to order
6m 13s
0%
58. Reducing stock after ordering
2m 56s
0%
59. Meilisearch filter query fix
1m 33s
0%
60. Showing the order confirmation page
7m 39s
0%
61. Attaching orders for registering guest users
5m 17s
0%
62. Scaffolding the orders page
5m 30s
0%
63. Filling in order variation details
5m 24s
0%
64. Returning the order status
4m 39s
0%
65. Detecting order status changes
10m 49s
0%
66. Sending the order status change email
5m 12s
0%
67. Sending an order confirmation email
2m 47s
0%
68. Handling deleted cart records
4m 44s
0%
69. Transferring the guest cart
2m 44s
0%
70. Creating a presenter for the order status
4m 31s
0%
71. Setting up Stripe
3m 43s
0%
72. Creating and updating a PaymentIntent
16m 21s
0%
73. The Stripe card form
3m 35s
0%
74. Validating before payment
5m 34s
0%
75. Submitting a payment
6m 40s
0%
76. Checking for a successful payment
5m 47s
0%
77. Handling Stripe client errors
3m 11s
0%
78. Entangling Stripe customer data
2m 18s
0%

Transcript

00:00
So we are very nearly there with our drop downs. Effectively what we want to do now is when we get down to the last item, we want to emit this if it has an SKU up to our overall product selector and then show that add to cart button.
00:14
And really importantly, when we click that add to cart button, we want to make sure that we have the information that we need to use to add to our cart. So if we head back over to our product drop down, this is at the point where we want to check if we have an SKU.
00:31
So let's do a really quick check in here just to test this out. And we're going to say this selected variation model. So we don't need the full method name in there. So let's get rid of all of that.
00:42
And we're going to go and, of course, do a check on the SKU to see if that exists. Let's just die dump and say SKU found just so we know what we're doing. So if I go ahead and choose black, of course, that's not going to die dump. But when I choose 8, we found the SKU.
00:57
So we found the final variation in the list that we want to emit. So we're going to go ahead and emit this. But we're specifically going to emit this to a component. If we were to just emit it, that would fire off to all LiveWire components, which isn't ideal.
01:12
So we're going to go ahead and emit that specifically to the product selector. And we're going to emit this event name as SKU variant. If I can spell that as selected, I think that will do for now. And the value that we want to pass through is the selected variation, which is just the ID.
01:31
That's pretty much all we need because that's the only thing we need to add that to the cart. So now that we've got this, let's go ahead and pick up on this event over on our product selector. So let's come over to our product selector.
01:44
And for this, we're just going to go ahead and implement a really simple event handle. So we could do this with properties, or you could use a method for this. But let's just say listeners. And what are we listening for?
01:55
Let's just head back over here. SKU variant selected. And that's going to go ahead and invoke a method called SKU variant selected. So let's create this out here.
02:05
That's going to receive the variant ID into it. Because if we head over to our product dropdown, that is what we're passing along. And again, let's just die dump on that variant ID just to make sure that is being triggered. So again, let's choose black size 8.
02:23
And there we go. There is our variant ID ready to be sort of assigned to that add to cart button. So we can go ahead and look this up again in the database. But we need somewhere to sort of hold this.
02:34
So let's create a SKU variant variable just up here. And then what we can do is when we get this, we can assign SKU variant to variation. And find variation ID or variant ID in this case. Let's just make sure we pull variation in properly as well.
02:59
And we may as well just add a really quick check here as well, just to say if there is no variant ID, e.g. at this point, that's going to be if the user goes from, say, size 8, to choose an option within that dropdown.
03:15
And we'll handle that a little bit better in a minute. Well, in this case, we probably just want to clear out the SKU variant and set it back to null and then return. Because we don't want to look up something that doesn't exist.
03:26
OK, so let's just test this out. Let's go down here and die dump this SKU variant. And let's just see what we get. So again, black size 8.
03:36
And that should give us the final SKU variant. Which, of course, when we click our Add to Cart button, we can push that model to our cart. So let's get rid of that die dump.
03:49
And let's handle what happens when we sort of go back on ourselves. Now, if I click Choose an Option here, you can see that that all handles nicely for us. Because Choose an Option isn't a variant. So it doesn't have any children.
04:02
But if we were to click size 8 and then choose Choose an Option again, what we'll actually end up with is probably something completely wrong. Or it just won't reset itself. So let's go over to our Product Selector.
04:16
And let's just dump out here the SKU variant just to see what happens. So if we click black and size 8, that's what we want to add to our cart. But if I click Choose an Option, you can see that kind of hangs around. Which doesn't make sense.
04:32
Because effectively, that means our Add to Cart button is still going to be on the page. So how are we going to handle this? Well, we want to just kind of reset it. So if we come over to our Product Selector and we come to our Product Dropdown.
04:48
And we come up to where we are updating this. Effectively, we just want to emit every single time up to the Product Selector that this is set back to null. So that's just going to sort of reset it every single time.
05:03
So what this means now is when we choose black and 8, that shows it. But then when we click Choose an Option, that's going to reset it back. And of course, the next time around not look the model up. So effectively, that will get rid of our Add to Cart button.
05:17
Because at this point, we can't add anything to our cart. So there we go. We have now got a final variant that we can add to our cart. Let's go and add our button so we can click on it.
05:31
And of course, at the moment, we can't add it to our cart because we don't have any cart functionality. But we will get there. So over in our Product Selector, let's go over to the actual view.
05:40
Let's do a check for this SKU variant. So let's say if SKU variant and end that if statement. And then in here, we want to implement a button. So let's go ahead and use the button that comes with Laravel Breeze.
05:53
That's just the X button component. And we'll say Add to Cart. And let's just leave it at that for now and just see how this looks. There we go.
06:02
So we've got that Add to Cart button. And in here, let's just add a little bit of styling because at the moment, that's a little bit squashed. So let's wrap this in a div.
06:11
Because we also want to show the final price here as well. Really, really important. Remember, each variant can have their own price because some might be a little bit more expensive.
06:20
And let's just add a space Y6 to this. And down here, we'll go ahead and create out the price. And that should be everything that we need. And we could actually add an overall space Y6 to this
06:34
just to space things out a bit. Let's try this out. And there we go. That's going to be the price.
06:40
And then we can hit Add to Cart. And we'll play around in a minute with the different prices for different variants just to see how this works. Now for the price itself, if we just head over to the variant,
06:51
we don't actually have any pricing methods in here to format the price. But we could very easily just grab that from our product model. So let's grab this formatted price method. And let's go ahead and pop that over here.
07:03
We could even add this to some sort of trait. But we'll leave it for now. Okay, so over in our product selector, let's go ahead and say SKU variant formatted price.
07:15
And let's take a look at this. While we're here, we'll just make this semi-bold maybe. And let's set the text to large. Okay, so let's come over.
07:26
Black, size 8. There we go. We know the price. And we can hit Add to Cart.
07:31
Let's demonstrate quickly what happens if, for example, size 8 was a completely different price. So let's set this to $120,000. And let's go over and check this out.
07:42
So black and size 9, for example, is $90,000. And size 8 is now $1,200 for whatever reason. But when we add that to our cart, that will be the price that gets added,
07:56
not the overall price for the product. So we can change our variation prices around really nicely. Okay, I'm going to go ahead and set that back to a sensible default. And you will have noticed here we've got a slight weird ordering.
08:11
Now that we've changed that around, so we've got 9 and 8. And I think that's just because of the ordering that we have inside of here. So we've got 1 and 2.
08:19
Let's set that to 1, 2. And let's come back over. Choose black, 8 and 9. Let's switch the price around for 8 again to $1,200 or $120,000.
08:35
And we should see 8 and 9 in the correct order. Great. So let's switch that back to $90 again. And there we go.
08:44
So let's finally just click on add to cart and do something. It doesn't have to do anything at the moment, but at least we've got a kind of hook in there ready to go. So for this, we're going to use wire click.
08:57
And we're going to prevent the default behavior. And we're going to say add to cart. And that will exist over on our product selector. And let's create that method out here.
09:12
And let's go ahead and die dump on this SKU variant, which we are going to add to our cart eventually. So we've now got the entire flow through choosing each of these, hitting add to cart, and then eventually adding that to our cart.
78 episodes8 hrs 42 mins

Overview

Build a robust e-commerce platform with a Laravel and Livewire. Features products with unlimited and flexible variations, a product browser with filters and price range slider, global product search, guest checkout, shipping and payment implementation, order status tracking and more.

Alex Garrett-Smith
Alex Garrett-Smith
Hey, I'm the founder of Codecourse!

Comments

No comments, yet. Be the first to leave a comment.