Multiple Cart User Experience

Created on 2 February 2018, almost 7 years ago
Updated 18 March 2024, 9 months ago

Summary

Having multiple carts for a single store is confusing for the customer. Either we need to add features so the cart selection has an understandable user interface or we need to allow a restriction of a single cart per customer. This may be the genesis of a new Commerce module called "Commerce Single Cart."

Detailed issue

The Cart page is a view that renders each cart. This is primarily because the architecture of Commerce 2 allows multiple active carts and because each cart could represent different stores. A majority use case of Drupal Commerce is a single store. And having multiple carts is rather confusing for the customer and the clients for which we build web stores.

Example of how to get more than one cart with one store: Login and create your first cart. Log out, create a new cart and then login again. You now have two carts, one store.

If you restrict the cart page to one cart (using Views for now, but you could do that with Twig), we need a better user experience.

Initial problem: More than one cart disrupts a typical ecommerce experience.

Small nitpick: Multiple carts on a small cart block is also confusing/challenging for the customer (even if the site is multi-store).

Bigger UX problem: When restricting the cart page to a single cart and the customer removes two things from their cart, a new one will immediately replace the old, now deleted cart.

Similar UX problem (also happened in Commerce 1): If a person has two carts but is only shown one, when they complete checkout, the old cart will mysteriously reappear. Things get extra complicated if the older cart has the same or similar products. The customer might think checkout didn't complete and try to purchase everything again.

Possible Solution

Perhaps list the cart, give the customer a user experience where they can create a new cart or load old carts. Or perhaps we use Amazon as a "best practice" and instead of saving old carts, we treat the cart like there is only one and provide a "Save for later" experience.

Open to this being a contrib module.

โœจ Feature request
Status

Active

Version

2.0

Component

Cart

Created by

๐Ÿ‡บ๐Ÿ‡ธUnited States joshmiller Indianapolis, Indiana, USA

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

  • ๐Ÿ‡ฉ๐Ÿ‡ชGermany Anybody Porta Westfalica
  • ๐Ÿ‡ฉ๐Ÿ‡ชGermany Anybody Porta Westfalica
  • ๐Ÿ‡ฎ๐Ÿ‡ฑIsrael jsacksick

    @Anybody: I don't really see the problem of keeping this functionality in a contrib module... Basic calculation shows that Commerce combine carts is used by ~4% of the Commerce installs (I just divided the reported usage of both modules).
    Could probably be a 3.x target? I personally don't think this is a critical feature to have in core.

  • ๐Ÿ‡ฉ๐Ÿ‡ชGermany Anybody Porta Westfalica

    @jsacksick: Thanks for the quick response! :)

    The reason why I came here is, that when testing a clients Drupal Commerce store with only one store, we ran into situations, where a user had more than one cart (which is unwanted and unexpected user experience).
    That's why I think if such situations can exist, Commerce Core should be able to merge these carts.

    The issue summary says in the first sentence:

    Having multiple carts for a single store is confusing for the customer.

    and I totally agree that I'd be super surprised by an online shop showing me two carts (at /cart)

    In result, I think that should not happen and it should not need a contrib module to fix this?
    If someone needs these multiple carts, for example because of >1 store defined, it's surely a nice feature to opt into.

    I hope I could make my point clearer?

    Still, I'm not totally sure if these multiple carts are expected also for a single store or if this should be seen as bug in general?

    I'll also try to provide steps to reproduce this, if you'd see this as a bug. It seems to happen, for example, when a user has entered a certain checkout step and then adds further products to cart then, before order completion. Maybe it's also related to address changes in checkout, which lead to complex tax situations.
    We don't have a large or complicated shop setup, so it doesn't seem to be that untypical?

  • ๐Ÿ‡ฎ๐Ÿ‡ฑIsrael jsacksick

    It can happen quite easily... For example, let's say you've started a cart as an anonymous then login... The cart is going to be assigned to the user that just logged in.
    If you repeat the same operatio a second time, you then end up with 2 carts.

  • ๐Ÿ‡ฉ๐Ÿ‡ชGermany Anybody Porta Westfalica

    @jsacksick thanks for the quick reply once again.

    What do you and the others from the Centarro team think about that situation? Would you agree that it's confusing from the client side, as it's something you don't see in other Shop systems?
    Would you further agree there's no benefit, but confusion from this, if only using one store?

    So would you finally agree (or discuss if) it might make sense to solve this in Commere Core instead of needing that contrib module for this (from my perspective) expected functionality?

    I know that other Shop Systems like Shopware or JTL Shop also have such an option enabled by default to merge carts or alternatively to ask the user how to proceed with that cart.

    Thank you :)

  • ๐Ÿ‡ต๐Ÿ‡ชPeru krystalcode

    Still, I'm not totally sure if these multiple carts are expected also for a single store or if this should be seen as bug in general?

    This is not a bug. There are cases where multiple carts is desired for a single store. Common use case is for B2B where a business customer prepares multiple orders separately. Commerce is meant to be a flexible solution and accommodate different use cases.

    Having multiple carts for a single store is confusing for the customer.

    I agree that this is confusing for 90% of the B2C use cases. I don't see a problem with this being addressed in contrib, but if this were to be added to core e.g. functionality for automatically merging carts, it should be done very carefully and it should be configurable and disabled by default. Otherwise it could break many sites when such functionality is introduced.

  • ๐Ÿ‡ฉ๐Ÿ‡ชGermany Anybody Porta Westfalica

    Thank you very much for your feedback @krystalcode, I totally agree in all points. And I never said it's not a helpful feature, but I think for the vast majority of shops it's an unexpected default.

    Of course, providing the expected merge functionality in Commerce Core for this majority should not be a BC! From my perspective it should be the default for new setups, but existing shops should be able to opt-into this feature, as it might otherwise break expected functionality indeed.

  • ๐Ÿ‡จ๐Ÿ‡ฆCanada trevorkjorlien

    Iโ€™ll give what I think is a completely normal use case that requires the customer to do something totally abnormal:

    I have two products. One is a an event signup and the other is a physical print.

    Each of these products use a different Item Order Type. One needs some attendee info and the other needs some shipping. The way Commerce is currently set up, if the customer adds both of these products, it creates two separate carts.

    This means, you need to tell the customer to check out 2 times (!!) in order to sell them an event ticket and a shippable product.

    Thatโ€™sโ€ฆ nuts. This seems very user hostile and not what any customer should be expected to do.

    This is outlined here in better detail: https://drupal.stackexchange.com/a/298996/109556

  • ๐Ÿ‡ฎ๐Ÿ‡ฑIsrael jsacksick

    @trevorkjorlien: What you're describing sounds like a misconfiguration? If you want the 2 products to be on the same order, they need to share the same order type?

  • ๐Ÿ‡จ๐Ÿ‡ฆCanada trevorkjorlien

    @jsacksick: OK, I have re-configured my products so that they use just one Order Type. Now event and physical products can be in the same cart.

    I don't want to hijack this issue, but I'll bring it up here: the Commerce documentation makes it sound as if you should make different Order Types for different product types (https://docs.drupalcommerce.org/v2/developer-guide/orders/getting-starte...):

    Orders have a specific workflow that defines what states and transitions the order can move in. Each order type can have its own workflow.

    This means your default order type, which has shippable products, can use the Fulfillment workflow. Meanwhile, your digital goods order type can have the more simplistic Default workflow.

    and:

    You can use a different checkout flow for each order type. In this case you would have a physical order use a multiple step checkout flow that requires shipping information. A digital order could have a more simplified checkout flow that has one step (i.e.: payment.)

    This makes it sound like if I have a physical product, I should have one Order Type. And if I have a digital product, I should make a separate Order Type. Here's another example of somebody also being confused: https://www.drupal.org/project/commerce_combine_carts/issues/3023601#com... ๐Ÿ› Is there something extra I need to do combine carts? Active

    I think the documentation should make it more clear that if you have multiple Order Types, this will create two carts/orders. I'll be honest: this was super opaque, confusing, and frustrating.

  • ๐Ÿ‡ฎ๐Ÿ‡ฑIsrael jsacksick

    Regarding:

    This means your default order type, which has shippable products, can use the Fulfillment workflow. Meanwhile, your digital goods order type can have the more simplistic Default workflow.

    I believe this just describes a use case, that you don't HAVE to follow, this is just an example? For a digital workflow, you probably don't need to collect a shipping address for example?

    Agreed that we could make it clearer that multiple orders are created, contributions to the documentation are more than welcome... If you find it confusing, indeed it might confuse others, so feel free to make a contribution to improve this :).

    Anyway, this feature request has been opened years ago and there is nothing really actionable here. On top of that there are contrib modules that are there to alter the core behavior if needed, so closing this.
    The documentation improvement can be addressed separately.

Production build 0.71.5 2024