You can set your store logo in the Settings tab of your FoxyCart Store's Admin. There, you can add the url for your store's logo to the “logo url” field. We'll cache your logo to ensure it's served securely, so don't worry about your own SSL.
If you don't already have a copy of your logo someplace online, an alternate option is to add the logo to a Dropbox folder and use the share link to paste into the FoxyCart admin. That's an easy and free way to get your logo hosted someplace that we can pull from.
FoxyCart supports many common template customizations from the Template Configuration page in the admin. You can configure:
Using the custom code template setting, it's now possible to add CSS and javascript to your templates without needing to modify the templates themselves. If you just want to change the background, some colors or styling, or anything else you accomplish with CSS only, we strongly recommend taking this approach. If you want to really customize, read on!
Nearly every piece of HTML that FoxyCart presents to your customers is configurable in a template for your store. There are individual templates for:
While you can certainly use the default templates, we will see just how easy it is to use your own site's design for your FoxyCart templates.
We recommend sticking with the default templates unless you really want to make significant changes. In the future, we plan on rolling out improvements to increase the conversion rate automatically to users on the default templates (which we'll notify about in advance, in case you're worried). Also, unlike in v1.1 and prior, you can now make many common changes to the templates without any customization.
This section is for people with intermediate to advanced CSS, HTML, and JS abilities. We're happy to help you if you get stuck, but if it's your first rodeo, this stuff might be a bit head-spinning :)
We'll go into detail below, but it's useful to understand the high-level approach we've taken to templating.
FC.json
object. You'll see references to variables in the template files. That's where they live, but there are helper methods to work with that data.@extend
functionality so you won't see any Bootstrap classnames.Additionally, in previous versions of FoxyCart there was no clear separations of concerns between content (HTML), presentation (CSS), and dynamic behavior (Javascript). With v2.0 we're doing our best to help each aspect be a separate concern, so that you can override or customize the specific aspects your customers need without worrying about breaking things.
Below, you'll find our best attempt at explaining each aspect of our templates and how you can override, hook into, or remove the aspects that you're interested in. If you have questions, post on our forum and let us know what is confusing, or email support if you have a suggestion on how this documentation can be more helpful.
If you've used a template language before, you can probably skip this section. If you haven't, it's probably useful to go through this section to understand how and why templating works the way it does.
FoxyCart 2.0 takes advantage of Twig javascript templates to allow you the freedom to customize all aspects of the eCommerce experience. Templates allow you to quickly and fairly easily add dynamic aspects to your HTML pages. Here's a quick example of how templates will make your life easier. With a simple HTML page, you'd have this:
<h1 class="product-title">Product 1</h1> <p class="description">Description about Product 1</p> <p class="cost">Cost: $25</p> <a href="#" class="add-link">Add to Cart</a>
The classes make it really easy to style the presentation of the different elements with CSS, but CSS and HTML alone do not allow you to change dynamically update the contents of the HTML. That's why web developers use Javascript, to add interactivity to the sites they design. Commonly this is done with jQuery, so let's examine how that might work. Perhaps you want a product that has two options, and the second option adds 10% to the cost. First, you'd start with your HTML:
<h1 class="product-title">Product 1</h1> <p class="description">Description about Product 1</p> <ul class="options"> <li class="option1"><input type="radio" value="default">Default</input></li> <li class="option2"><input type="radio" value="premium">Premium</input></li> </ul> <p class="cost">Cost: $<span class="number">25</span></p> <a href="#" class="add-link">Add to Cart</a>
Then you'd add the javascript to watch the radio buttons:
$( document ).ready( function () { $('.options').click( function () { var option2 = $('.option2:checked').length; if (option2 > 0) { $('.number').text('35'); } else { $('.number').text('25'); }); });
That's potentially ok for one or two products, but it doesn't scale well. That's why smarter engineers than us have created worked on building Javascript templates that help abstract some of this work. The basic concept is you take some JSON data, insert it into a Javascript template, and then insert the combined output into the client document. It works like this. First, you create a template. In this example we're using Twig syntax:
<h1 class="product-title">{{ title }}</h1> <p class="description">{{ description }}</p> <ul class="options"> {% for option in options %} <li><input type="radio" value="{{ name }}">{{ name }}</input></li> {% endfor %} </ul> <p class="cost">Cost: ${{ cost }}</p> <a href="#" class="add-link">Add to Cart</a>
Now, we can just render the template by providing some JSON data that matches the variables:
var templateData = { title: "A product", description: "This is a product description", options: {[ option1: { cost: 25, name: "Default" }, option2: { cost: 35, name: "Premium } ]} }
No longer do we need to write custom Javascript for each product option. Now we can just let the template rendering engine handle it. The default HTML output of this code looks like this:
<h1 class="product-title">A product</h1> <p class="description">This is a product description</p> <ul class="options"> <li><input type="radio" value="default">default</input></li> <li><input type="radio" value="premium">premium</input></li> </ul> <p class="cost">Cost: $25</p> <a href="#" class="add-link">Add to Cart</a>
Now all we have to do is listen for a click, and then rerender the template with the current context. This makes it much easier to scale our code - now we can have as many options as we need. We could also pass in products as data and add new products easily, which it turns out is exactly what happens in FoxyCart templates.
.fc-*
classes are for styling purposes only. They aren't required for functionality. (See more in the BEM section immediately below.)#fc-*
IDs are for styling purposes. #fc-
IDs are used sparingly, and mostly for namespacing CSS. (See more in the BEM section immediately below.) Our recommendation is to not use these IDs for javascript selectors. Use the data-fc-*
attribute(s) instead and stick with our conventions.data-fc-*
attributes are for functional purposes and template rendering.input
elements (and select
and other form elements) have some caveats:name
attributes have underscores. These can't be changed without breaking serverside functionality, so don't change them in template customizations.label
elements operate based on the id
attribute of the related input. For ease of implementation and because name
and id
values almost always match in most HTML, the id
values for form inputs also have underscores, and are not prefixed with fc-
.name
and value
(if necessary) selectors, not the id
attribute. Yes, theoretically IDs would be faster, but selector speed isn't really a concern at this point with modern browsers.To help make the base FoxyCart theme easily modifiable, we've adopted the BEM methodology for element naming. BEM stands for Block, Element, Modifier and it introduces a funky identifier scheme that we've tried to apply consistently in our templates.
This article will give you an extensive background on the BEM philosophy we used. Basically, Blocks are defined as distinct elements of a template, Elements are the individual HTML elements that make up the Block, and modifiers are variations of the Elements. They are represented like so:
block--element__modifier
And they can be strung together:
block--block--element__modifier
FoxyCart templates now have as much separation of concerns as possible, which means all classes are only used for presentation styling and have no impact on actual functionality. The goal with BEM styling is that all elements can be custom styled with a the #fc
namespace selector plus at most two class names. Custom CSS can be added to the Admin, or you can hook into the BEM naming to easily apply your own styles.
TODO: Create class name skeleton lists for reference.
#fc
: This is used to namespace CSS for default themes. For the main default theme to function properly but not to interact with a user's own CSS, this keeps the default FoxyCart CSS separate. It may be on the html
element (for the fullpage cart, checkout, and receipt templates) or on a div
container when rendered on client sites.data-fc-container=“cart”
: The cart will be rendered (via Twig.js) inside of this element.data-fc-container-for=“…”
:data-fc-messaging-for=“…”
:data-fc-error-for=“…”
:data-fc-id=“…”
: For tagging specific DOM elements you want to access via code.data-fc-container-id=“…”
: When a data-fc-id
element takes an action on the DOM (for example, when a coupon code is removed, quantity is changed, or an item is removed from the cart), the corresponding element will be acted upon.
FoxyCart 2.0 has an underlying foundation of Bootstrap - but you can't tell by looking at the HTML. Our Bootstrap CSS is custom compiled with an #fc
namespace and then applied to the DOM via Sass's @extend
functionality. CSS Tricks covers the basics of Extending in this article. In the FoxyCart Sass, we provide a partial called _fc-to-bootstrap.scss
that maps Bootstrap classes on to the correlating FoxyCart classes. If you are building off of the default responsive theme for your customization, it would behoove you to look in that file to see grid classes applied to elements for responsiveness.
This dependency should not be considered permanent. Future updates to FoxyCart may remove Bootstrap for lighter CSS, thus the reason it is not exposed in templates.
A big part of an online checkout is error handling. We have some conventions and helper functions if you'd like to customize error handling.
Required fields will generate an error if a user tabs off of them. Our goal in FoxyCart 2.0 has been to create a default client-side validation system that unobtrusively alerts users to problems with the form, while also giving you as much room to customize as possible. With that in mind inline errors now have three parts:
Each of these parts are designed to be independent so you can utilize just one or both in whichever way works best for you. Below you'll find in depth explorations of each step.
The specific field will be highlighted by adding a class to the element, which allows CSS styling to highlight the field. FoxyCart gives you flexibility in customizing both the error class applied, and which element it is applied to through the use of data attributes. The error class is defined with the data-fc-error-class
attribute.
If you are adding the error class to an element other than the input (such as a parent element), then you need to include a data-fc-error-for
attribute on that element, with the value being the name
of the input. So for the shipping first name field, the parent
has both attributes, looking like this:: data-fc-error-class=“invalid”
data-fc-error-for=“shipping-last-name”
. In case of an error on the field, the class invalid
will be added to the
, and once the error is resolved, the class will be removed.
data-fc-error-class
is required if you wish to utilize the FoxyCart inline-error functionality. If no class is found, a fallback method of rerendering the block will be triggered. For the default templates, the fallback method will evaluate the twig context, find the error, and apply the styling to the field. This rerendering is expensive from a browser perspective, so we attempt to avoid it whenever possible.
The data-fc-error-for
is not required on the input itself - you can just add the data-fc-error-class
attribute alone and FoxyCart will apply it to the input when an error occurs.
Error classes are cleared in the same way they are added: FoxyCart checks the input to see if it has a data-fc-error-class
attribute and removes the defined class from the input, if present, and then checks for a data-fc-error-for=“FIELD_NAME”
and if one is found, removes the data-fc-error-class
defined on the element, if present.
The data-fc-error-class
typically just takes a single class name as a string, but an additional “success” class can be added after a comma, like this:
<div class="alert alert-danger" data-fc-error-for="cc_cvv2" data-fc-error-class="show,hidden"></div>
This will not only add the show
class on error, but it will also remove the hidden
class as well. When the error is cleared, it will toggle show
off and toggle hidden
on.
Once the field markup has been updated, FoxyCart updates the notifier bar at the top of the page to alert the user that a field has an error on it. This only occurs if the notifier bar is present. The markup for the bar is very simple, here's what it looks like in the default checkout template:
<section data-fc-error-notifier> <h3 data-fc-notifier-text></h3> </section>
The data-fc-error-notifier
attribute needs no value. Adding it to an element tells FoxyCart that all error messages should be added to this element. The data-fc-notifier-text
attribute is optional, by default the message will be appended as a <p>
element, if you wish to use a different text element, use the data-fc-notifier-text
attribute.
When a message is sent to the notifier bar, it checks the length of FC.JSON.messages.errors, and if there are errors present, the bar updates the count and adds the classes “alert alert-danger.” All appearance and animations are handled with CSS and can be defined/overridden in your custom style sheets.
Class that is appended to be active user-definable.
The last step in error handling is firing a jQuery event that you can listen for to add your own customizations. notificationUpdate
is fired on the <body>
tag every time a message is sent or removed from FC.JSON.messages.errors. Listening for this event allows you to design custom ways of alerting the user that there are errors on the form, such as jGrowl or something custom.
Hard errors more info coming soon
All our templates are available (and automatically kept up-to-date) at GitHub: https://github.com/FoxyCart/2.0-templates You'll notice some conventions in those templates, and you'll need to be aware of those as you do your own customization.
checkout
, and the endblock
tag must also include the name. So {% block checkout %} {# stuff goes here #} {% endblock checkout %}
If you haven't done any customizations inside the checkout
block (like if you're using {{ block("checkout") }}
), this is already present. Unless you're doing major customizations, you won't have to worry about this.
partial.context.inc.twig
, like address.checkout.inc.twig
. The context
piece is optional.TODO: add detailed walkthrough for 2.0 customization path.
If for some reason you don't want to use AutoMagiCache to do things automatically, you can securely cache your http
images on our server (https
) by calling them like this:
https://YOURDOMAIN.foxycart.com/cache.php?url=http://example.com/path/to/image.gif
Please note that this will only work on your cart, checkout, and receipt pages. Again, this is done automatically if you cache your template using AutoMagiCache, so you only need to do this if you're not caching your template.
If you'd like to customize your templates beyond what you can do with HTML, CSS, and JavaScript, FoxyCart allows you to use the Twig template language as well. Twig is flexible template language that's either near identical or relatively similar to a variety of other template languages. This functionality is very advanced, and most users should be able to achieve very very seamless visual integrations without this. If you have super specific needs, however, you can dig into Twig.
Twig is used in all FoxyCart templates:
The first step is to review the Twig for Template Designers at the official Twig site.
By default, you won't see any Twig syntax if you select the normal templates to start from. If you'd like to see the details of what's going on you can select the “Twig” templates (with the radio buttons) for the template you're modifying. That will show you a bit more of Twig, like this (for the checkout):
{% include 'svg.inc.twig' %} {% import "utils.inc.twig" as utils %} {% use 'checkout.inc.twig' %} {{ block('checkout') }} {# etc... #}
That might look complicated, but the basic idea is that each of the {{ block('foo') }}
tags loads a block
from the checkout.inc.twig
template, which is loaded via the use
command. This view gives you the ability to move elements around pretty easily without needing to get super involved with giant chunks of HTML. It also allows you to override just specific portions of the HTML without needing to edit the entire massive template. (It's also really helpful for understanding the different elements and logic, even if you do end up using one of the full templates below.)
If, however, you do want more control, you don't have to use the block
and use
method, and you can instead just start with the underlying default template and customize from there. You can fork the Github repo here: https://github.com/FoxyCart/2.0-templates and include them directly in your website application. This will allow you to easily merge in any changes we make into your customizations, especially as you upgrade from one version to another.
If you use any of the above linked files as a starting point, you can insert that raw Twig+HTML directly into your FoxyCart template (either directly in the admin or in your own templates for use with AutoMagiCache).
It's important to understand that there are two “cart” templates. There's the “full” cart template, which is what displays if you pull up your_store.foxycart.com/cart
, used for full-page cart displays as well as the iframe in the default Colorbox cart. But there's also the cart that's displayed on the checkout, the receipt, and the email receipts. The “full” cart uses the “cart include” cart, just as the other templates do. So if you want to make a change to the cart system-wide (across the full cart, checkout, receipt, and email templates), you can edit the “cart include.”
At present, the only allowed functionality for Twig is as follows:
if
, for
, include
, macro
, block
, set
, import
abs
, number_format
, escape
, raw
, length
, date_modify
, replace
, upper
, lower
, title
, trim
, date
, url_encode
, keys
block
, date
, template_from_string
As of v2.0, We've included a full responsive default theme which works on desktops, mobile devices and tables. We recommend using this team for the best customer checkout experience possible.
*.jpg
, *.jpeg
, *.png
, *.gif
) to use FoxyCart image caching./ /
with \/\/
when not preceded by a space or line break.</
with <\/
.<img>
paths to use FoxyCart image caching.<a>
paths to point to the correct locations.<form>
actions to point to correct locations.rel
attribute is after the href
attribute. This one is weird, and shouldn't be a problem (the regex is perfect), but if you have <link>
elements that aren't being cached, switch the order of the attributes and put the rel=“stylesheet”
before the href
attribute.src=“foo/bar”
or src='foo/bar
'.<meta http-equiv=“Content-Type” content=“text/html; charset=utf-8”/>
.swf
file, there's no good way to ensure that additional necessary files (like xml
, flv
, etc.) are cached along with the swf
file itself.../foo/bar.ext
) more than one level deep are not supported. ../foo/bar.ext
will work, but ../../foo/bar.ext
will not. If you have a legitimate need for more than one level deep, let us know.@IMPORT
rules more than one level deep are not supported. An import will work just fine, but an import inside an import won't be cached. If you have a legitimate need for more than one level deep, let us know.*.foxycart.com
subdomain.Google fonts work great because they can be referenced via https. The cacher doesn't download font files, though, so if you really need a custom font, it will have to be embedded manually in the page. FontSquirrel can help with this. (ref)
Twig has a hard time with some Javascript files (Modernizr in particular) because of some characters inside the parsed JS file that Twig reads as actual twig comments. To fix this, you can either put
{% raw %}
and
{% endraw %}
around your javascript includes or you can simply edit the file in particular to change
{#
to
{ #
and
{{
to
{ {
For some reason, Firefox and Internet Explorer may have problems when you have the ampersand (“&”) character inside of code comments:
<!-- Some text & more -->
This issue may be related to your doctype, so if you encounter this please let us know.
If you utilise conditional style blocks to target just a particular browser (like Internet Explorer), AutoMagiCache will currently trip over if that is the last style tag included in your <head>
section. Simply including a style tag after it will correct this issue:
<!--[if IE 6]> <style type="text/css> /* IE specific css */ </style> <![endif]--> <style type="text/css> /* Blank style */ </style>
FoxyCart uses twig and twig.js as a template language so you can completely customize everything about your checkout experience. Listed below is all the data which is exposed to the templates and also available in JavaScript in the FC.json variable.
When outputting in the template, you would utilise Twig, like {{ variablename }}
. Note that if you're looking to access data that is within arrays (such as items, or item options), then you need to access those within a for
loop in the Twig, like:
{% for item in items %} {{ item.name }} {% endfor %}
Note that the data is broken into different sections by the page scope it's available on. The cart is available on all pages (as it is present on all pages), but there are some strings that are specific to just other pages like the checkout and receipt.
cart_cancel_and_continue_link
cart_config_hash
cart_is_fullpage
true
or false
depending if the cart is the full page cart or notcontext
cart
, checkout
or receipt
. Used for configuring various display and functionality concerns. cart
represents both Sidecart and full page cart versions.coupons
coupons.{coupon_code}
coupons.{coupon_code}.amount
coupons.{coupon_code}.id
coupons.{coupon_code}.is_applied
coupons.{coupon_code}.is_taxable
coupons.{coupon_code}.name
{coupon_code}
is the code value used by the customer to add the coupon.{coupon_code}
still as the key. The attributes within each array item will still be the same amount
, id
, is_applied
, is_taxable
and name
."coupons": { "code1a": { "amount": -1, "id": "4704984", "is_applied": true, "is_taxable": false, "name": "Coupon 2" }, "code2a": [ { "amount": -1, "id": "4704985", "is_applied": true, "is_taxable": false, "name": "Coupon 1" }, { "amount": -1, "id": "4704988", "is_applied": true, "is_taxable": false, "name": "Coupon 2" } ] }
custom_fields
custom_fields.{name}
custom_fields.{name}.is_hidden
custom_fields.{name}.value
{name}
is the value of the name assigned to this custom field.expires_in
future_coupons
future_coupons.{coupon_code}
future_coupons.{coupon_code}.amount
future_coupons.{coupon_code}.id
future_coupons.{coupon_code}.is_applied
future_coupons.{coupon_code}.name
future_subscription_totals_by_date
future_subscription_totals_by_date.total
future_subscription_totals_by_date.total_item_price
future_subscription_totals_by_date.total_shipping
future_subscription_totals_by_date.total_tax
future_subscription_totals_by_date.total_weight
gift_cards
gift_cards.{gift_card_code}
gift_cards.{gift_card_code}.amount
gift_cards.{gift_card_code}.id
gift_cards.{gift_card_code}.code_id
gift_cards.{gift_card_code}.is_applied
gift_cards.{gift_card_code}.name
gift_cards.{gift_card_code}.current_balance
{gift_card_code}
is the code value used by the customer to add the gift card.current_balance
attribute will not factor in the discount that could apply from the cart or checkout. On the web receipt, current_balance
will take into account the discount from that transaction, and any other uses of the gift card since then (if the receipt is being revisited). The email receipt will be the current balance of the gift card at the time the transaction was completed.has_eligible_coupons
has_future_products
has_future_shipping
has_live_rate_shippable_products
has_location_dependant_taxes
has_multiship
has_product_images
has_shippable_products
has_subscriptions
has_taxes
is_future_shipping_only
is_new_subscription
is_subscription_cancel
is_subscription_modification
is_updateinfo
item_count
items[]
items[].alt_name
items[].base_price
items[].category
items[].code
items[].parent_code
items[].delivery_type
items[].downloadable_id
items[].expires
items[].height
items[].id
items[].image
items[].is_parent
items[].item_number
items[].length
items[].multiship
items[].name
items[].options[]
items[].options[].class
items[].options[].name
items[].options[].value
items[].price
items[].price_each
items[].quantity
items[].quantity_max
items[].quantity_min
items[].shipto
items[].sub_enddate
items[].sub_frequency
items[].sub_nextdate
items[].sub_startdate
items[].url
items[].weight
items[].weight_each
items[].width
language
english
, french
, german
etc). Can be blank if using the default template set.language_iso_code
en
, fr
, de
etc). Can be blank if using the default template set.loading_coupons
loading_quantity
loading_shipping_results
loading_taxes
locale_code
en_US
locale_info
messages
messages.errors[]
messages.errors[].context
messages.errors[].message
messages.info[]
messages.info[].context
messages.info[].message
messages.warnings[]
messages.warnings[].context
messages.warnings[].message
multiship_data
payment_info_required
session_id
session_name
shipping_address
shipping_address.address1
shipping_address.address2
shipping_address.address_name
shipping_address.city
shipping_address.city_option_selected
shipping_address.city_options
shipping_address.city_options.city
shipping_address.city_options.region
shipping_address.company
shipping_address.country
shipping_address.country_name
shipping_address.first_name
shipping_address.last_name
shipping_address.phone
shipping_address.postal_code
shipping_address.prefix
shipping_address.region
shipping_address.region_label
shipping_address.region_name
shipping_address.shipping_results[]
shipping_address.shipping_results[].method
shipping_address.shipping_results[].price
shipping_address.shipping_results[].service_id
shipping_address.shipping_results[].service_name
shipping_address.shipping_service_description
shipping_address.shipping_service_id
shipping_address.taxes[]
shipping_address.taxes[].amount
shipping_address.taxes[].applies_to_handling
shipping_address.taxes[].applies_to_shipping
shipping_address.taxes[].default_amount
shipping_address.taxes[].is_error
shipping_address.taxes[].is_live
shipping_address.taxes[].name
shipping_address.taxes[].rate
shipping_address.taxes[].tax_id
shipping_address.total_future_shipping
shipping_address.total_shipping
shipping_address.total_tax
shipping_address.type
shipping_and_handling_label
show_address_entry
show_amazon_fps_payment_option
show_coupon_input_button
show_multiship_details
show_paypal_express_payment_option
show_shipping_tbd
store_id
template_set
total_discount
total_future_item_price
total_future_shipping
total_future_weight_shippable
total_item_price
total_order
total_shipping
total_tax
total_weight
total_weight_shippable
transaction_id
cache_path
cart_config_hash
cdn_base_path
cdn_static_path
css_file
currency_format
lang
lang.{code}
lang.{code}…
locations
locations.{country_code}
locations.{country_code}…
locations.{country_code}.active
locations.{country_code}.alt
locations.{country_code}.boost
locations.{country_code}.cc2
locations.{country_code}.cc3
locations.{country_code}.ccnum
locations.{country_code}.cn
locations.{country_code}.pc
locations.{country_code}.pc.int
locations.{country_code}.pc.lang
locations.{country_code}.pc.regex
locations.{country_code}.pc.req
locations.{country_code}.pc.search
locations.{country_code}.r
locations.{country_code}.r.lang
locations.{country_code}.r.options.{region code}
locations.{country_code}.r.options.{region code}.active
locations.{country_code}.r.options.{region code}.alt
locations.{country_code}.r.options.{region code}.boost
locations.{country_code}.r.options.{region code}.c
locations.{country_code}.r.options.{region code}.n
locations.{country_code}.r.options.{region code}.req
locations_billing
locations
)locations_shipping
locations
)paypal_checkout_button_url
post_url
store_domain
store_logo_url
store_name
store_url
template_config
template_config.analytics_config
template_config.analytics_config.google_analytics
template_config.analytics_config.google_analytics.account_id
template_config.analytics_config.google_analytics.account_key
template_config.analytics_config.google_analytics.usage
template_config.analytics_config.segment_io
template_config.analytics_config.segment_io.account_key
template_config.analytics_config.segment_io.usage
template_config.analytics_config.usage
template_config.cart_display_config
template_config.cart_display_config.show_product_category
template_config.cart_display_config.show_product_code
template_config.cart_display_config.show_product_options
template_config.cart_display_config.show_product_weight
template_config.cart_display_config.usage
template_config.checkout_type
template_config.colors
template_config.colors.primary
colors.secondary
colors.tertiary
template_config.colors.usage
template_config.csc_requirements
template_config.custom_checkout_field_requirements
template_config.custom_checkout_field_requirements.billing_address1
template_config.custom_checkout_field_requirements.billing_address2
template_config.custom_checkout_field_requirements.billing_city
template_config.custom_checkout_field_requirements.billing_company
template_config.custom_checkout_field_requirements.billing_country
template_config.custom_checkout_field_requirements.billing_first_name
template_config.custom_checkout_field_requirements.billing_last_name
template_config.custom_checkout_field_requirements.billing_phone
template_config.custom_checkout_field_requirements.billing_postal_code
template_config.custom_checkout_field_requirements.billing_region
template_config.custom_checkout_field_requirements.cart_controls
template_config.custom_checkout_field_requirements.coupon_entry
template_config.custom_config
template_config.custom_script_values
template_config.custom_script_values.footer
template_config.custom_script_values.header
template_config.custom_script_values.checkout_fields
template_config.debug
template_config.debug.usage
template_config.foxycomplete
template_config.foxycomplete.combobox_close
template_config.foxycomplete.combobox_open
template_config.foxycomplete.show_combobox
template_config.foxycomplete.show_flags
template_config.foxycomplete.usage
template_config.newsletter_subscribe
template_config.newsletter_subscribe.usage
template_config.ssl_receipt
template_config.supported_payment_cards
template_config.tos_checkbox_settings
template_config.tos_checkbox_settings.initial_state
template_config.tos_checkbox_settings.url
template_config.tos_checkbox_settings.usage
template_config.use_checkout_confirmation_window
template_config.use_checkout_confirmation_window.usage
weight_uom
with_controls
The checkout view data in FC.json includes everything in the cart including the following values:
anonymous_checkout_selected
auth_token_is_valid
authentication_is_in_progress
authentication_is_not_successful
authentication_is_successful
billing_address
shipping_address
)cc_cvv2
cc_cvv2_saved
cc_exp_month
cc_exp_year
cc_number
cc_number_masked
cc_type
change_password
checkout_date
checkout_type
continue_url
create_account
customer_email
customer_id_encoded
customer_is_authenticated
customer_password
email_is_checking
email_is_found
email_is_valid
fc_auth_token
fc_customer_id
first_receipt_display
force_password_reset
force_saved_account
geoip
has_discounts
has_downloadables
has_saved_cc
has_visible_custom_fields
hosted_payment_gateways
hosted_payment_gateways.lang_pay_with
hosted_payment_gateways.lang_payment_method
hosted_payment_gateways.supports_subscriptions
hosted_payment_gateways.type
html_downloadable_links
ip_address
is_anonymous
is_uoe
loading_submit
multiship_data
shipping_address
)multiship_data.address_name
multiship_data.checkout_total_tax
multiship_data.custom_fields
multiship_data.has_live_rate_shippable_products
multiship_data.has_shipping_or_handling_cost
multiship_data.has_visible_custom_fields
multiship_data.number
multiship_data.total_future_shipping
multiship_data.total_item_price
multiship_data.total_price
multiship_data.total_shipping
multiship_data.total_tax
new_customer_password
order_id
password_expired
payer_id
payment_is_pending
payment_method_type
payment_type
processor_response
purchase_order
receipt_url
required_fields
shipping_and_handling_label
show_message_for_testing
status
subscriptions
subscriptions.description
subscriptions.sub_token_url
subscriptions.html_links
subscriptions.text_links
temporary_password_sent
text_downloadable_links
timestamp
token
tos_agreement
use_alternate_shipping_address
use_different_addresses
utils
utils.get_error_string
utils.get_info_string
utils.shipping_results
utils.use_different_addresses
The checkout config view data in FC.json.config includes everything in the cart including the following values:
alert_test_gateway
base_directory
cc_expiration_months
cc_expiration_years
has_multiple_payment_options
lang
lang
as well as additional strings for checkout, email and receipt contexts.supports_pay_with_plastic
supports_purchase_order
The email view data in FC.json.config includes everything in the cart and checkout including the following values:
days_since_first_failed_transaction
is_order
is_expiring_payment_reminder
is_subscription_dunning_cancellation
is_subscription_dunning_reminder