Shop checkout process and forms.
This package is part of the bda.plone.shop
stack. Please refer to
bda.plone.shop for
installation instructions.
To customize the checkout form you'll typically start off with your own
form having a custom provider_registry
.
You'll use the FieldsProvider
objects that you're happy with and replace
those that need an adaption.
In this example, we'll add an additional field uid
to the PersonalData
provider an re-use the others:
from zope.i18nmessageid import MessageFactory
from bda.plone.checkout.browser import form as coform
_ = MessageFactory('my.package')
my_provider_registry = coform.ProviderRegistry()
class MyPersonalData(coform.PersonalData):
fields_template = 'my.package.shop:forms/personal_data.yaml'
message_factory = _
my_provider_registry.add(coform.CartSummary)
my_provider_registry.add(MyPersonalData)
my_provider_registry.add(coform.BillingAddress)
my_provider_registry.add(coform.DeliveryAddress)
my_provider_registry.add(coform.ShippingSelection)
my_provider_registry.add(coform.PaymentSelection)
my_provider_registry.add(coform.OrderComment)
my_provider_registry.add(coform.AcceptTermsAndConditions)
class MyCheckoutForm(coform.CheckoutForm):
"""Customized checkout form to add UID field for company.
"""
provider_registry = my_provider_registry
Copy bda/plone/checkout/browser/forms/personal_data.yaml
to
my/package/shop/forms/personal_data.yaml
and make your changes.
This package uses Yet Another FOrm WIdget Library (YAFOWIL) for rendering the checkout form.
We'll append a new field uid at the end of the personal data
section:
- company:
factory: "#field:text"
value: context.get_value
props:
label: i18n:label_company:Company
display_proxy: True
mode: expr:context.mode
- uid:
factory: "#field:text"
value: context.get_value
props:
label: i18n:label_companyuid:UID Number
display_proxy: True
mode: expr:context.mode
(NOTE: it's not possible to mix i18n domains within a yaml file so
you're better off to add you translations to a separtate
bda.plone.checkout.po
file in your package's locales)
Now register your customized form by overriding the browser page for your browserlayer or skinlayer:
<browser:page
for="*"
name="checkoutform"
class=".checkout.MyCheckoutForm"
permission="zope2.View"
layer=".browser.interfaces.IThemeSpecific" />
Note
Your new field will automatically be included in the order data.
However, by default, it will not show up in order emails, the order export
(@@exportorders
) or the order summary (@@orders
).
See bda.plone.orders for instructions how to add them there.
This permission controls whether a user can actually perform the checkout process. Checkout related views are bound to this permission, thus, a visitor without this permission granted gets redirected to the login / registration form.
By default, this permission is set for roles:
- Manager
- Site Administrator
- Customer
In order to enable non-customers or anonymous users to perform the checkout,
edit rolemap.xml
in your integration package as needed.
$ cd src/bda/plone/checkout/ $ ./i18n.sh
- Robert Niederreiter (Author)
- Peter Holzer
- Harald Friessnegger