Documentation You are here: start » v » 1.0 » templates
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


Previous revision
Next revision
v:1.0:templates [2012/08/14 08:36] – [Using Twig with FoxyCart] foxybrett
Line 1: Line 1:
 +====== Templates, Caching, and Template Customization with HTML + CSS ======
  
 +<WRAP tip round>
 +//**Customizing your template is easier than you might think.**//
 +If there's one takeaway from this page, it should be that FoxyCart's [[#automagicache|AutoMagiCache]] makes getting a customized template //easy//. Really, we promise. No template language to learn. Just your own HTML and CSS, securely cached. So don't be afraid, and //do// customize your template!
 +</WRAP>
 +
 +Setting up a customized checkout template in FoxyCart is about as easy as it can get, thanks to [[#automagicache|AutoMagiCache]]. But it's also radically different than you're probably expecting. Here's a quick guide to setting up your template to seamlessly integrate FoxyCart into your existing site design.
 +
 +The idea here is that you're going to create a page on your site with "placeholders" where the FoxyCart functionality will go. <wrap tip>You should know enough HTML and CSS to be comfortable editing code</wrap> in order to make this happen, though if you're still learning and are using a WYSIWYG like Dreamweaver the basic ideas still apply. Once this page is created and uploaded/published on your site, you'll enter that URL into your FoxyCart admin, and FoxyCart will grab your code, work some magic (seriously), you'll be good to go.
 +
 +
 +===== What Are Templates and Why Do You Care? =====
 +Nearly every piece of HTML that FoxyCart presents to your customers is configurable in a template for your store. There are individual templates for:
 +  * [[.:cart|The Cart]]
 +  * [[.:checkout|The Checkout]]
 +  * [[.:receipt|The Receipt]]
 +  * [[.:emails|Email Receipts]] in plain text and HTML, for the store-wide as well as category-specific varieties.
 +
 +While you can certainly use the [[#default_template_styles|default templates]], we will see just how easy it is to use your own site's design for your FoxyCart templates.
 +
 +===== Making It Easy: AutoMagiCache =====
 +==== See It In Action ====
 +If you don't want to bother with the technical details yet, take four and a half minutes to watch an explanation of AutoMagiCache in action. (Thanks to our good friend at [[http://www.my619.com/|My619.com]] for the screencast.)
 +
 +<flashplayer width=962 height=721>file=http://static.www.foxycart.com/video/screencasts/checkout_template_creation2.flv</flashplayer>
 +
 +==== A Quick Start Guide ====
 +  - Create a page on your site that has the following placeholders. These should be placed where you'd like your checkout and cart to go. If you'd like to use one of the "default" styles, you'll want to put the ''cart'' placeholder before the ''checkout'' placeholder, but you don't need to display the ''cart'' on your checkout page if you don't want to. (It's probably a good idea though.)
 +    * ''^^cart^^''
 +    * ''^^checkout^^''
 +  - If you'd like to use one of the default styles, add the following CSS calls right above your closing ''</head>'' tag:
 +    * For the "standard" red/black theme, as seen [[https://example.foxycart.com/cart?name=A%20Shippable%20Product&price=9.99|here]], use this code: <code css><link rel="stylesheet" href="https://^^store_domain^^/themes/standard/styles.css" type="text/css" media="screen" charset="utf-8" /></code>
 +    * For a stripped down, text only style (which is very useful as a starting point for customizing), use this: <code css><link rel="stylesheet" href="https://^^store_domain^^/themes/text/styles.css" type="text/css" media="screen" charset="utf-8" /></code>
 +  - Upload/publish that page to your server (at a publicly accessible URL).
 +  - Login to your [[https://www.foxycart.com/admin.php|FoxyCart admin]].
 +    - Enter that URL into your FoxyCart admin (on the Templates -> Checkout page).
 +    - Hit the "cache your url" button.
 +    - Hit the "update template" button at the bottom of the page //after// the page has reloaded and you've received the green success box. If you'd like, you can copy the cached code and review/modify it (though if you have to modify it, it's probably a bug that we'd love to fix if you [[http://www.foxycart.com/bug-report-because-bugs-happen.html|let us know]]).
 +  - Test your template. Try something like this to go directly to checkout: ''http://YOURDOMAIN.foxycart.com/cart?name=blah&price=10&cart=checkout''
 +
 +==== Advanced Customizations for Advanced Fun ====
 +What follows is a brief recommended approach to advanced template customizations, followed by a two part screencast series illustrating the technique.
 +
 +This tutorial requires:
 +  * [[http://www.getfirebug.com/|Firebug]]
 +  * [[https://addons.mozilla.org/en-US/firefox/addon/60|Firefox Web Developer Toolbar]] by [[http://chrispederick.com/work/web-developer/|Chris Pederick]]
 +
 +  - Follow the steps above just to get familiar with things.
 +  - Create a new CSS file to //override// the theme file described above. Make sure your new CSS file is included //after// the theme file. This is important, since any file on ''foxycart.com'' will automatically be updated when you change versions.
 +  - Use [[http://www.getfirebug.com/|Firebug]] and the [[http://chrispederick.com/work/web-developer/|Web Developer Toolbar]]'s live CSS editing to //override// the necessary styles. For example, if you want to change a background image, just include that line. Don't include any of the padding or anything, as it could make upgrading more difficult.
 +    * It might make sense not to cache your template while you develop, as it's a much slower process. Rather, just ignore the security warnings during development, but make sure you re-enable them once you're cached and ready for final testing.
 +  - Once everything is as it should be, recache your template and test again.
 +  - Have some friends test, just to be on the safe side.
 +
 +Watch the screencasts below to see this approach in action. Even if you're a CSS Ninja, you may pick up a trick or two. And if you have additional tips or tricks feel free to add a comment. (This is a publicly editable wiki because we value the feedback of our users.) Click the links below to load the video.
 +
 +  * [[flowplay>http://static.www.foxycart.com/video/screencasts/FoxyCart_Modifying_the_checkout_page_part1.flv|Customizing your checkout, part 1]]
 +  * [[flowplay>http://static.www.foxycart.com/video/screencasts/FoxyCart_Modifying_the_checkout_page_part2.flv|Customizing your checkout, part 2]]
 +
 +{{flowplay>http://static.www.foxycart.com/video/screencasts/FoxyCart_Modifying_the_checkout_page_part1.flv?997x764?noautoPlay}}
 +
 +
 +
 +
 +===== Caching Assets Manually =====
 +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:
 +<code html>
 +https://YOURDOMAIN.foxycart.com/cache.php?url=http://example.com/path/to/image.gif
 +</code>
 +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.
 +
 +
 +
 +
 +===== Getting Even More Advanced with Twig =====
 +
 +If you'd like to customize your templates beyond what you can do with HTML, CSS, and JavaScript, FoxyCart allows you to use the [[http://twig.sensiolabs.org/|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.
 +
 +==== Where Twig Is Used in FoxyCart ====
 +Twig is used in all FoxyCart templates:
 +  * The cart in all forms (HTML cart on the cart page, on the checkout and receipt, and on both HTML and plain text emails)
 +  * The checkout
 +  * The receipt
 +  * The email receipts (both HTML and plain text)
 +
 +==== Using Twig with FoxyCart ====
 +=== Understanding Twig ===
 +The first step is to review the [[http://twig.sensiolabs.org/doc/templates.html|Twig for Template Designers]] at the official Twig site.
 +
 +=== Twig + FoxyCart ===
 +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):
 +
 +<code html>
 +{% if error_codes|length > 0 %}
 +    {% include 'checkout_error_template.twig' %}
 +{% else %}
 +    {% if not is_updateinfo %}
 +    <div id="fc_checkout_cart">
 +        {% include 'cart_template.twig' %}
 +    </div>
 +    {% endif %}
 +    {% use 'checkout_template.twig' %}
 +    {% block checkout %}
 +    <div id="fc_checkout_container">{{ html_messages|raw }}
 +        <form id="fc_form_checkout" method="post" action="{{ post_url }}" onsubmit="return false;">
 +            {{ block('checkout_error') }}
 +            {{ block('required_hidden_fields') }}
 +            {{ block('continue_shopping') }}
 +            {{ block('noscript_warning') }}
 +            {{ block('login_register') }}
 +            {% if not is_subscription_cancel %}
 +                <div id="fc_data_entry_container">
 +                    <div id="fc_customer_info_container">
 +                        {{ block('customer_billing') }}
 +                        {% if not has_multiship %}
 +                            {{ block('customer_shipping') }}
 +                        {% else %}
 +                            {{ block('multiship_shipping') }}
 +                        {% endif %}
 +                    </div><!-- #fc_customer_info_container -->
 +{# etc... #}
 +</code>
 +That might look complicated, but the basic idea is that each of the ''%%{{ block('foo') }}%%'' tags loads a ''block'' from the ''checkout_template.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. These links will show you the Twig templates from which you can start from:
 +  * [[https://admin.foxycart.com/v/1.0.0/view/public/cart.inc.twig|Cart]]
 +  * [[https://admin.foxycart.com/v/1.0.0/view/public/cart.inc.txt.twig|Cart Text]] for Text Emails
 +  * [[https://admin.foxycart.com/v/1.0.0/view/public/checkout.inc.twig|Checkout]]
 +  * [[https://admin.foxycart.com/v/1.0.0/view/public/checkout_error.inc.twig|Checkout Errors]]
 +  * [[https://admin.foxycart.com/v/1.0.0/view/public/receipt.inc.twig|Receipt]]
 +  * [[https://admin.foxycart.com/v/1.0.0/view/public/email_order_details.inc.twig|Email (HTML)]]
 +  * [[https://admin.foxycart.com/v/1.0.0/view/public/email_order_details.inc.txt.twig|Email (Text)]]
 +
 +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).
 +
 +=== Customizing the Cart ===
 +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 "partial" 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 "include" cart. There's an extra checkbox on the "cart" template page in your FoxyCart admin now, and if you'd like to use that (in any of your other templates) you can access your customized cart via ''%%{{ custom_cart }}%%'' instead of the normal ''{% include 'cart_template.twig' %}'' syntax.
 +
 +This would allow you to use the default cart HTML in some situations, and your custom cart in others (like on a minimalist email receipt, or etc.).
 +
 +=== Allowed Twig Tags and Functionality ===
 +At present, the only allowed functionality for Twig is as follows:
 +  * Tags: ''if'', ''for'', ''include'', ''macro'', ''block''
 +  * Filters: ''escape'', ''raw'', ''length''
 +===== Default Template Styles =====
 +As of v1.0, there are two included themes.
 +
 +<WRAP column 300px>
 +**Standard**
 +{{:v:0.7.0:theme.standard.070.png?direct&300|The "standard" theme}}
 +The "standard" theme is designed to work in a variety of situations, but as such it is not well suited for advanced customizations.
 +</WRAP>
 +<WRAP column 300px>
 +**Text**
 +{{:v:0.7.0:theme.text.070.png?direct&300|The "text" theme}}
 +The "text" theme is built to be customized. If you're doing advanced customization we strongly recommend starting from this theme (and not the "standard").
 +</WRAP>
 +
 +
 +
 +
 +===== AutoMagiCache Technical Details =====
 +==== What It Does ====
 +  - Pulls in target URL.
 +  - Strips any <base> tags.
 +  - "Convenience replacements", currently converting "http" to "https" links for:
 +    * Google Analytics
 +  - Imports non-secure external CSS
 +    * Rewrites all image paths (''*.jpg'', ''*.jpeg'', ''*.png'', ''*.gif'') to use FoxyCart image caching.
 +    * Sticks it inline, inside CDATA comments.
 +  - Imports non-secure external JS
 +    * Replaces ''/ /'' with ''\/\/'' when not preceded by a space or line break.
 +    * Replaces all ''</'' with ''<\/''.
 +    * Sticks it inline, inside CDATA comments.
 +  - Rewrites all ''<img>'' paths to use FoxyCart image caching.
 +  - Rewrites all ''<a>'' paths to point to the correct locations.
 +  - Rewrites all ''<form>'' actions to point to correct locations.
 +
 +==== What Is Supported? ====
 +  * Most everything not listed below.
 +
 +==== Important Notes ====
 +  * **Preventing Hotlinking?** If you're running scripts to prevent hotlinking, that may interfere with the template caching. If images aren't showing up properly, turn off your hotlinking protection while you cache your templates.
 +  * **Attributes must be enclosed in single or double quotes** like ''src="foo/bar"'' or ''src='foo/bar'''.
 +  * **Your page must have a UTF-8 content type** so you may need to add this inside your document's head tag: ''<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>''.
 +  * **Flash will not be cached**. Because it's near-impossible to "see inside" of a ''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.
 +  * **"Upward relative paths"** (stuff like ''../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, [[http://forum.foxycart.com|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, [[http://forum.foxycart.com|let us know]].
 +  * **jQuery must be v1.1.2+** or it will conflict with internal FoxyCart functionality.
 +  * **HTC files**. These //may// work if you're using a custom subdomain, but likely will not work if you're using a default ''*.foxycart.com'' subdomain.
 +
 +=== Comments, Conditional Comments, and the Ampersand ("&") ===
 +For some reason, Firefox and Internet Explorer may have problems when you have the ampersand ("&") character inside of code comments:
 +<code html>
 +<!--
 +Some text & more
 +-->
 +</code>
 +This issue may be related to your doctype, so if you encounter this please [[http://forum.foxycart.com/|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:
 +<code html>
 +<!--[if IE 6]>
 +<style type="text/css>
 +/* IE specific css */
 +</style>
 +<![endif]-->
 +<style type="text/css>
 +/* Blank style */
 +</style>
 +</code>
 +==== Placeholders in your CSS or JS ====
 +The following placeholders will be replaced with "spaced" placeholders in cached CSS and JS, to prevent problems with parsing placeholders that shouldn't be parsed.
 +  * ''^^cart^^'' -> ''^^ cart ^^''
 +  * ''^^checkout^^'' -> ''^^ checkout ^^''
 +  * ''^^receipt^^'' -> ''^^ receipt ^^''
 +  * ''^^analytics_google^^'' -> ''^^ analytics_google ^^''
 +
 +
 +
 +{{page>v:1.0:cheat_sheet#placeholders}}

Site Tools