Kassasivu, jossa kaikki kassan vaiheet on esitetty yhdellä sivulla. Kassan eri osat päivitetään AJAX-pyyntöjen avulla.
Kuvaus
Yhden sivun kassan toteuttamiseksi tarvitset JavaScript-koodia, jonka avulla lähetät AJAX-pyyntöjä verkkokaupan palvelimelle ja päivität kassan osat asynkronisesti.
Sivupohjan on aina sisällettävä <form>
-elementti, joka lähetetään POST
-pyyntönä osoitteeseen /checkout/. Kassan lomaketagit sijoitetaan lomakkeen sisään.
Teemassa käytetään MyCashflow'n oletusteeman yhden sivun kassaa, jos teemasta puuttuu yhden sivun kassan sivupohja ja teeman asetuksissa on määritetty <SinglePage supported="true" />
.
Sivupohjan ominaisuudet
- Sivupohjan sijainti
- themes/shop/THEME/checkout/singlepage.html
- Sivupohjan URL
- /checkout/
- Asetettu näkyvyys
Toteutus oletusteemassa
{Doctype}
<html lang="{CurrentLanguageCode}">
<head>
{Helper(file: 'helpers/head')}
{Helper(file: 'checkout/helpers/styles')}
</head>
<body class="{BodyClass} CheckoutFirstPage">
{Extensions(for: 'body')}
{Helper(file: 'checkout/helpers/header')}
<main class="SiteBody Container">
<div class="ContainerMaxWidth">
<div class="CheckoutLayout">
<div class="CheckoutAside">
<div class="StickyAside">
<button class="ShowCartButton" data-toggle-cart>
<span>{%ShowShoppingCart}</span> <span class="ShowCartTotal" data-cart-total="{CartOpenTotal}"></span>
</button>
<div class="CheckoutCart">
<div class="LinkHeader">
<h2 class="Subtitle" data->{%ShoppingCart} ({CartTotalItems})</h3>
<a href="/cart">{%ShoppingCartEdit}</a>
</div>
{Helper(file: 'helpers/discount-codes-notification')}
{CampaignCode(
action: 'checkout',
before: '<div class="CampaignCodeForm CampaignCode-Checkout">',
after: '</div>'
)}
{Helper(
file: 'checkout/helpers/cart',
before: '<div class="MiniCart MiniCart-Checkout">',
after: '</div>'
)}
</div>
</div>
</div>
<div class="CheckoutMain">
{Notifications(
before: '<div class="Notifications">',
after: '</div>'
)}
<form id="CheckoutForm" action="/checkout/" method="post">
<div class="ContentSection">
<div class="LinkHeader">
<h2 id="CheckoutCustomer" class="Title">{%CheckoutCustomerInformation}</h2>
{Helper(
case: 'CustomerNotLogged',
file: '{{ <a href="/interface/Helper?file=helpers/modals/login" data-fancybox data-type="ajax">{%Login}</a> }}',
or: '<a href="/account/logout/">{%Logout}</a>'
)}
</div>
<p>{%CheckoutBillingAddressIntro}</p>
<fieldset id="CheckoutBillingAddress" data-checkout-part="BillingAddress">
{CheckoutBillingAddress(
mode: 'form',
ajax: 'true'
)}
</fieldset>
<div class="SubContentSection">
<h2 class="Subtitle">{%CheckoutShippingAddress}</h2>
{Notifications(name: 'CustomerShippingAddressError')}
<div class="FormItem CheckWrap">
<div class="Checks">
<label>
<input type="checkbox" data-checkout-toggle="#CheckoutShippingAddress" />
{%CheckoutShippingAddressToggle}
</label>
</div>
</div>
<div id="CheckoutShippingAddressWrap">
<fieldset id="CheckoutShippingAddress" data-checkout-part="ShippingAddress">
{CheckoutShippingAddress(
mode: 'form',
ajax: 'true'
)}
</fieldset>
</div>
</div>
</div>
<div class="ContentSection">
<h2 id="CheckoutShipping" class="Title">{%CheckoutChooseShippingMethod}</h2>
<p>{%CheckoutChooseShippingMethodIntro}</p>
<div id="CheckoutShippingMethods" data-checkout-part="ShippingMethods" data-hide-details>
{CheckoutShippingMethods(
mode: 'form',
ajax: 'true'
)}
</div>
</div>
<div class="ContentSection">
<h2 id="CheckoutPayment" class="Title">{%CheckoutChoosePaymentMethod}</h2>
<p>{%CheckoutChoosePaymentMethodIntro}</p>
<fieldset id="CheckoutPaymentMethods" data-checkout-part="PaymentMethods" data-hide-details>
{CheckoutPaymentMethods(
mode: 'form',
ajax: 'true'
)}
</fieldset>
</div>
<div class="ContentSection">
<h2 id="CheckoutPreview" class="Title">{%CheckoutSendOrder}</h2>
<p>{%CheckoutAcceptTermsIntro}</p>
{CurrencyNotification}
<fieldset id="CheckoutAcceptTerms">
{CheckoutAcceptTerms}
</fieldset>
</div>
</form>
</div>
</div>
</div>
</main>
{Helper(file: 'helpers/drawers')}
{Helper(file: 'helpers/scripts')}
{Helper(file: 'checkout/helpers/scripts')}
{Helper(file: 'helpers/scripts-ready')}
</body>
</html>