Hi Fillip,
Looks good - I have been going over a lot of the UI/X in the last week or so as my order completion ratio was abysmal (1 in 10).
I think you have touched on basically everything I found, but yes I did the following:
On the overlay - changed the checkout text to Buy Now. I think I also swapped the icons around.
Then did as you have, put the product options just below the item list, then the purchase options below that.
I then removed the scroll of text for the terms and conditions and changed it to a modal, with just the checkbox:
Finally I moved the save button to below that and next to the payment button, renaming it to "Update cart"
I think your solution with multiple save buttons should work, I will probably change the phrases though.
However the biggest change that I made was backend. The current system works well if you are registered, but if not, the flow is terrible and many customers are lost at this point as when they fill in their registration forms, they are either:
1) If no email validation required, they are taken to the default XF page that just says thanks for signing up.
2) If email validation is required, as soon as they click the link, like above, they are just taken to a default XF page.
At which point, non-technical minded people have no idea what to do.
To get around this, I extended the following controllers:
Register
PHP:
public function actionComplete()
{
$reply = parent::actionComplete();
// If the user has something in their cart, we will assume they are just signing up for a purchase, in which case redirect directly to the shopping cart
$visitor = \XF::visitor();
if ($visitor->user_state == 'valid'
&& $visitor->canViewDbtechEcommerceProducts()
&& $visitor->canPurchaseDbtechEcommerceProducts()
&& $visitor->getDbtechEcommerceCartItems())
{
return $this->redirect($this->buildLink('dbtech-ecommerce/checkout'));
}
return $reply;
}
AccountConfirmation
PHP:
public function actionEmail(ParameterBag $params)
{
$reply = parent::actionEmail($params);
$visitor = \XF::visitor();
// If $view is a typeof view AND something in the cart, then it was a successful login, so redirect to checkout
if ($reply instanceof \XF\Mvc\Reply\View
&& $visitor->user_state == 'valid'
&& $visitor->canViewDbtechEcommerceProducts()
&& $visitor->canPurchaseDbtechEcommerceProducts()
&& $visitor->getDbtechEcommerceCartItems())
{
return $this->redirect($this->buildLink('dbtech-ecommerce/checkout'));
}
return $reply;
}
Since making all these changes, the failure rate has dropped considerably and at this point I think it's just down to people backing out, rather than an issue with the cart flow