Business Catalyst Blog

BC.NEXT - New Module/Tag Syntax, Liquid Templating and Improved Rendering Performance

Cristinel Anastasoaie Tuesday, June 17, 2014

With the upcoming release of the new BC rendering engine, we are launching some very exciting features that will allow partners unprecedented control over the module layouts and templates along with great readability of BC code.

Module syntax improvements

The first  improvement is the way we render modules to enable usage of modules in modules. We've also re-vamped how <head> elements are being collected and included in the final page - and while the new solution is more elegant, you should be careful in how you test existing sites as the behaviour might be changed.

In the same light, we always knew that the current module syntax is cryptic. There are IDs everywhere. Commas ",,,," everywhere. Conventions everywhere instead of a simple to read named parameters approach.

We have received positive feedback in the past when we changed the menus syntax with a more readable one, so we have decided to make the BC markup a really easy to read syntax. We are now introducing named parameters to all modules. This will allow you to read way easier how a page is constructed.


{{module_news,r,,true,ajax,_blank,,,,,date reverse}

Now - note that most parameters are optional and you don't have to use a list of commas and respect the parameter order:

{{module_news filter="random" notemplate="true" effect="ajax" target="blank" sortType="date reverse"}

We have also improved the module in modules extensibility - several new modules are now supported. {module_pagename }, {module_isloggedin } and {module_pagetitle } can be used in other modules.

{{module_news filter="random" template="{{module_isloggedin}.tpl"}

We're also continuing to collect your feedback on new tags and tag improvements. More to come on this track as we see this new rendering engine in good shape.The module reference will also be updated with the upcoming release to include the new module parameters along with the old ones.

Announcing Liquid templating engine support

In order to get the best flexibility and ease of use, we chose the Liquid markup language ( to enable great control of the layout and templates along with great ease-of-use.

We aimed at creating an engine that is backwards compatible, so do you don't have to change your existing sites (if you don't want to) to take advantage of new liquid features. In the same spirit, we want to make it easy to adopt - you will be able to add a liquid "if statement" in an existing template and it will work without having to change the rest of your module layout. And in terms of approach, we are implementing it in a surgical way, using the new BC rendering engine and current tags as a data collection mechanism, collecting all the data, and then exposing it to the Liquid engine. 

Liquid will give you a lot of power to build sites on BC. Here are several things you will be able to do, but we are sure you'll be able to do so much more:

  1. Use the new readable tags with string formatting capabilities
  2. Access {{globals}} and {{user.globals}} - variables to allow complex conditions
  3. Conditionals in pages or email campaigns to generate dynamic content depending on the user
  4. Take over any BC generated markup and replace it with your own markup to free you from our generated code limitations
  5. Enable looping over data collections to allow you to display data in your own format.
  6. New readable tags with string formatting capabilities

In all the module layouts, you are now able to use both the old tags and new liquid-data tags. For example, in the {{module_news} list layout you can use both { tag_announcementid } and its liquid equivalent {{id}}. The same goes for {{url}}, {{subject}}, etc.

You can benefit in this way of both full-backwards compatibility and the advantages that liquid brings (string formatting, conditionals, etc) like in this example: {{body | upcase}} which outputs with the body in upcase.

More information about liquid filters you can find here:

Globals and User globals

A series of global variables are now available in the Liquid rendering. Some of these are:

  • global.user - If a user is logged in, this global variable will contain information on the customer that is logged in your site: {{globals.user.fullname}}, {{global.user.firstname}}, {{global.user.lastname}}, {{}}
  • - can access site information such as: {{}}, {{}}, {{}}, {{}}, {{}}
  • global.visitor - can access information on the user-agent such as: {{global.visitor.deviceClass}}, {{global.visitor.ip}}, {{}}, {{global.visitor.userAgent}}
  • global.get - you will be able to access GET parameters in your liquid markup like this: {{global.get.mygetparam}}
  • global.cookies - you will be able to access cookies in your liquid markup like this {{global.cookies.mycookie}}

Conditionals in pages or email campaigns

With access to data and Liquid you will be able to add your own logic in pages.

For example in a page you will be able to check if a GET parameter was passed to the page and do your own logic accordingly:

{% if globals.get.mygetparam %}
     A GET.mygetparam parameter was passed to the page and it has the value: {{globals.get.mygetparam}}
{% endif%}

Or take over any BC generated markup and replace it with your own markup and looping over data collections.

The new rendering engine allows to capture the output of basically every module and use the data of that module in any way you want. Here's an example of how to do that:

{{module_announcement filter="all" template="" collection="announcementCollection"}
<p>module name: {{announcementCollection.moduleName}}</p>
    {% for news in announcementCollection.items%}
    <li>{{}} - <a href="{{news.url}}">{{news.subject}}</a></li>
    {% endfor %}

Notice that the "template" parameter of the module is left blank and that a new parameter called "collection" is added.

The empty "template" parameter tells the module to suppress any output and the "collection" parameter indicates that instead of outputting the data it should gather it in a collection.

This way all data of the module is accessible in the "announcementCollection". Modules have various data added there. In our case the collection will contain a "moduleName" and a list of announcements put nicely in a collection that you can loop through: "items".

You can loop through items and access all the properties of every item using the same names as you would have used them in the actual module layout (id, url, subject, etc).

Some modules even contain properties that include the navigation information when it exists in the module (such as properties called prevUrl, nextUrl which contain links to the previous or next page).

Suppressing the BC injected JS/CSS files (modulestylesheets.css, etc)

Every time BC outputs a page, it also adds into the HEAD various stylesheets and JS files needed for the various modules and BC functionality to work or render nicely. For example if I create a simple page that would only contain {{module_pagename} and even set that it would not use any template, the page would automatically have inserted the following lines:

<link href=" /StyleSheets/ModuleStyleSheets.css" type="text/css" rel="StyleSheet" />
<script type="text/javascript">var jslang='EN';</script>

Same thing happens with more complex modules like shopping cart, etc., where more dependent files are added to the page. Partners asked us to be able to fully control all the CSS/JS from a page and allow suppressing this automatic output and let them add their own links in the page template.

For this, we have added a new property to the Page Templates, which can suppress any JS/CSS inserted either by merging the page with the template or by any other modules added to the page.

So for the example above, the only thing that the rendered page would contain would be just the page name.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns=" ">
<!-- BC_OBNW -->
<title>My Page with noCssJS</title>
        My Page

This would allow you to control even the JS/CSS in the e-commerce, blogs, and any other sections of the site that use that site-wide-template - of course this means you will need to to manually re-insert any required JS files as otherwise the functionality might break (add to cart, etc).

Improved rendering performance

Another area where we looked at the rendering engine was around page loading performance and Google PageSpeed score results for BC - also making sure that Liquid pages continue to render very fast. In this direction, we're making several improvements.

For dynamic page content, the output of all pages rendered (any page with modules in it) will be cached in memory for faster serving, with the cache being invalidated when a change is made to the site. This more than doubles the page generation speed for most use cases, while protecting our servers to large loads (better handling of traffic spikes when featured on TV or during attacks). We are also giving you the option of disabling page caching in custom cases using a special module.

For static page content, we have received complaints in the past that we're not sending the correct headers, having Google PageSpeed complain about this and giving BC SEO warnings. We're fixing this with the introduction of a new way to enable better headers for most static assets that we can intercept at rendering. For example, a static asset will be always appended a unique version number that is linked with the static asset content, to make sure everywhere a static asset is changed (either by you developing or by your customer when uploading a new product image), we always serve it again and the browser knows that the asset has changed.


<img src="/logo.jpg"/> Cache-Control: private, no max-age


<img src="/logo.jpg?bc_t=5kokdQz9hN1S0v26vVI5DQ"/> Cache-Control: public, max-age=2592000

Finally, we are upgrading our infrastructure to the latest Amazon machines, the latest OS versions and application server version to benefit from the advancements in the field.

We are very eager to get these in your hands soon to see what amazing things you can create,

The Adobe Business Catalyst Team.

BC.NEXT - Access All BC Data: JSON Output Everywhere, More REST APIs

Cristinel Anastasoaie Tuesday, June 17, 2014

The new BC rendering engine we are going to launch will allow us to give more access to the BC data as never before. We will be giving you access to all of the BC rendered data in JSON format in a very flexible and intuitive way.

Today we're announcing some big JSON related features scheduled to come in the next version of BC:

Dynamic .json pages that output module data

BC Partners often asked us to be able to create a JSON page and use existing modules in it, to be able to load data in JS and manipulate it in different ways.

We have implemented now a feature to enable you to create pages that output .JSON, and when rendering that page the following things happen:

  1. The page will not have any template (you cannot set a page-template on those pages)
  2. The modules are being rendered, but all of the values are correctly escaped to be JSON compatible (so you can put them directly in a JSON format)
  3. When the page is outputted, the appropriate JSON content-type is sent
  4. In order to differentiate those dynamic JSON pages from standard HTML pages, we have chosen to have those files on disk as sample.json.html

Suppose we want to output the items of a webapp called testimonials (that has 2 fields: name, content) and we want to list them in a JSON.

We would start by creating a page named testimonials.json.html and use the following code for its content:

    "testimonials" : [
            {module_webapps,testimonials,a template=”/testimonials.tpl"}

In the testimonials.tpl file we would have:

"name": "{tag_name_nolink}",
"content" : "{tag_description}"

Then when accessing the /testimonials.json.html URL we would get a nice-looking JSON file, containing all information from the page:

"testimonials": [
"name" : "First Testimonial",
"content”: “This is the content of the first testimonial"
"name" : "Second Testimonial",
"content”: “This is the content of the second testimonial"
"name" : "Third Testimonial",
"content”: “This is the content of the third testimonial"

With this method you will be able to use existing parameters of the modules (for filtering, sorting) and create your own custom JSON outputs from them, as your application needs it. Also, we automatically detect the trailing comma and remove it.

module_json - a new module to support SEO rendering of JSON files

This module was added for a maximum flexibility in terms of data and layout. The module syntax is:

{module_json json="/module_json/data.json" template="/module_json/template.tpl"}

The module reads the data form the json and renders it using the template with Liquid syntax for rendering (

Let’s take for example a data.json file that contains:

    "description": "List of a collection of Doughnuts",
                "id": "5001", "type": "Plain", "price": 0 }
                "id": "5002", "type": "Glazed", "price": 1 }
                "id": "5005", "type": "Sugar", "price": 1 }
                "id": "5007", "type": "Powdered Sugar", "price": 1.25 }
                "id": "5006", "type": "Chocolate with Sprinkles", "price": 1.5 }
                "id": "5003", "type": "Chocolate", "price": 2 }
                "id": "5004", "type": "Maple Syrup", "price": 2.25 }

And a template.tpl that contains:

    {% for doughnut in this.doughnuts %}
        id={{}} type={{doughnut.type}}
        {% if doughnut.price == 0 %}
        {% else %}
            Price: ${{doughnut.price}}
        {% endif %}
    {% endfor %}

Rendering the page containing the module will result in:

<!DOCTYPE html>
<html xmlns=" ">
    <!-- BC_OBNW -->
        <title>Untitled page</title>
        <meta name="description" />
        <div>List of a collection of Doughnuts</div>
            <li>id=5001 type=Plain Free!</li>
            <li>id=5002 type=Glazed Price: $1</li>
            <li>id=5005 type=Sugar Price: $1</li>
            <li>id=5007 type=Powdered Sugar Price: $1.25</li>
            <li>id=5006 type=Chocolate with Sprinkles Price: $1.5</li>
            <li>id=5003 type=Chocolate Price: $2</li>
            <li>id=5004 type=Maple Syrup Price: $2.25</li>

As you can see you can have any structure of JSON and use liquid in its full (conditionals, sort, etc). The data is exposed in the same structure as the one in the data file and exposed to liquid under the {{this}} variable.

This allows you to be as creative as you can with the layouts and use this new model of JSON data very flexibly with the new OpenAdmin.

Viewing the modules and the data used to render a page as JSON 

With the evolution of our rendering engine, we are now automatically capturing all the modules and tags rendered in a page in a data tree. We think it will be useful to expose this tree to you, in order to allow you to easily access any data used in a page.

For example, let’s say we have a page named jsonSerialization.html that contains:

<!DOCTYPE html>
        <title>Untitled page</title>
        <meta name="description" content="" />
        <div>{module_contentholder name="render_contentholder"}</div>

And that the content of the “render_contentholder”  contains just another module:

<div>{module_faq filter="item" itemId="29318"}</div>

The result of calling the will be:

      "content":"<div>{module_faq filter="item" itemId="29318"}</div>",
               "body":"No you cannot combine two lead-in products together. You will need to upgrade to one of the All-in-One plans.<br><br>",
               "answer":"No you cannot combine two lead-in products together. You will need to upgrade to one of the All-in-One plans.<br><br>",
               "question":"Can I combine two lead-in products together?",

As you can see the entire rendering tree and the module data has been outputted to JSON. You can also see that the hierarchy of modules has been respected (the faq is a child-module of the contentholder).

This also offers you a lot of flexibility in accessing BC data in ways that you could not have done before, and it's the foundation of our liquid rendering.

Note: for a quick way to look at your JSON data in the browser, we recommend the Chrome JSON Viewer extension


With the launch of OpenAdmin and the great feedback we received there, we understood that there is a need for even more APIs that expose BC's data to the developers of those applications.

We took this feedback and enhanced the engine with which we're exposing REST APIs to both allow us to create more APIs faster than before and in the same time expose more functionalities in those APIs (like partial updates, PARSE-like language for filtering, sorting, paginating REST queries, and more). Also, we will update the existing Javascript SDK to include these new APIs and features.

We will next be working to create new APIs that the OpenAdmin developer community was asking:

  • Page Properties Update
  • Secure Zones List
  • Template Properties Update
  • Assign web app items to secure zones
  • CRM APIs (customers, cases, orders, events, mailing lists, etc)
  • eCommerce APIs (products, catalogs, discount codes, vouchers, etc)

With these new features, you will be able to exercise your creativity and deliver even more great solutions for your customers.

Looking forward to get these new features in your hands as soon as possible,

The Adobe Business Catalyst Team.

BC.NEXT - New Admin Editor

Cristinel Anastasoaie Tuesday, June 17, 2014

Editing content in Business Catalyst admin could sometimes be a daunting task for partners and customers alike. The standard editor found in pages and in any other interface from the Manage tab has many limitations, such as the lack of contextual information (styles, fonts, etc.), improper automatic code formatting and stripping, or an unusable code view. The In-Context Editor available in the Edit tab is more user friendly, but it only allows edits of static content.

With the upcoming release and continuing through the year, we plan to change all that. Both editors have reached their limitations and we plan to replace and/or greatly improve them, as webpage editing is the most used feature in Business Catalyst.

A new content editor for admin

With the Public beta version, we’ll start by replacing the standard admin editor, found in all interfaces from the Manage tab, with a more modern one (redactor.js) which we already use in the In-Context Editing and Email Campaign editors. Moreover, we’re changing the editor available when using code view, with the same one used in File Manager. This provides a much better editing experience when editing code. 

Overall, the new editor will come with:

  • Modern visual editor that presents the option for contextual formatting
  • New file manager and link manager interfaces
  • New code view editor with code formatting and highlighting
  • Future capabilities like paste image with transparent upload (to be enabled later

At first, the new editor will be disabled and Partners will be able to switch sites to the new editor from the Beta features section in the Site Settings admin menu. Take the time to try it out and provide us feedback to improve the integration and add any critical functionality that is missing.

Visual InContext Editor with dynamic data support

Since version one, In-Context Editing aimed to make web pages easy to update with little or no training by providing a tool similar to what business owners are used to when creating offline documents. Furthermore, it has always been meant to help designers and developers protect the design integrity by restricting the areas a business owner can edit. 

The current version of the editor partially achieves that, but it is limited in terms of which sections of a page can be edited, while also requiring developers to manually set-up editable regions. Thus, ICE can be an effective selling tool, but less of a site management tool.

With the new rendering engine in place, we now have the foundation that will allow us to enable stunning editing experiences for partners and customers alike. So yes, we’re going to update ICE once again, to solve the two major limitations it has: inability to edit dynamic content and the sometimes tedious process to set-up editable regions.

Although it will be only partially be available in the public beta, the new version of the editor will allow you to:

  1. Automatically detect editable content in the page and highlight it - including site wide templates, page content, content holders and module layouts.
  2. Enable in-context editing of dynamic data (like a product name, or product image)
  3. Link to the admin user interfaces when editing is not possible in context (e.g., product pricing, which is too complex to edit in-line)
  4. Seamlessly work with the Liquid language for dynamic data editing
  5. Preserve backwards compatibility with old ICE mark-up
  6. Automatically detect module generated content and allow users to edit just the content without damaging the module definition

We hope these updates will make editing content on BC a stunning experience.

The Adobe Business Catalyst Team

Scheduled system maintenance on EU datacenter - June 16th 2014

Cristinel Anastasoaie Friday, June 13, 2014

To ensure the highest levels of performance and reliability, we've scheduled a database server upgrade on our EU AWS data center. To minimize the customer impact, the upgrade is scheduled at the most convenient hours for the region and will take up to 4 hours to complete. During the maintenance procedure, creating and updating content, Partner registration, trial site creation, publish from Muse, sFTP, APIs and some site admin sections will not be available. Additionally, all sites on the EU data center will experience a 10 minutes downtime sometimes during the maintenance window. Except for the scheduled 10 minutes downtime, the website front-ends will not be impacted by the maintenance.

Maintenance schedule:

  • Start date and time: Monday, June 16th, 3:00 AM UTC (check data center times)
  • Duration: We are targeting a 4 hours maintenance window

Customer impact:

  • Partner registration, Trial site creation Muse Publish, APIs, FTP and some admin section will not be available through the entire maintenance window
  • All websites and services on EU data center will experience a 10 minutes downtime sometimes within the maintenance window
  • Creating or updating content on the impacted sites will be unavailable during the maintenance procedure

For up to date information about system status, check the Business Catalyst System Status page. We apologize for any inconvenience caused by these service interruptions. Please make sure that your customers and team members are made aware of these important updates.

Thank you for your understanding and support,

The Adobe Business Catalyst Team

Announcing the launch of the new webmail platform

Cristinel Anastasoaie Thursday, June 12, 2014

On June 26, 2014  our webmail provider will update the mail platform to all email clients. The current webmail platform will be retired on the same day.

The new webmail platform has a brand new look and feel and it is is packed with new features. Here are the top 10 new features that will be available with the new platform:

  1. A brand new look and feel: the new webmail is modern looking, faster and a lot more intuitive.
  2. Mobile sync for calendar and address book: The most awaited feature. Webmail now supports mobile sync (not currently available. This feature will be available by June 26th).
  3. Conversation threads: conversations can now be grouped together. Users have the option to display conversations as lists or threads.
  4. Cloud storage for files: A simple way to manage files. Share, password protect and set an expiry date for the links you share (not currently available. This feature will be available by June 26th).
  5. More robust RSS reader: the RSS reader is easier to use and manage.
  6. A better HTML editor: the new editor offers users more options to format messages.
  7. Identity management with HTML supported signatures: manage multiple profiles and create HTML signatures for each profile.
  8. Extensive address book fields: more fields for you to keep your contacts organized.
  9. Extensive domain and user management capabilities: you can do a lot more when using the admin features.
  10. Ability to reorder columns: You can move columns around to customize your inbox.

For a sneak peek into the new interface, you can watch a quick demo video:

To have a closer look at the changes, a preview mode is already available to all email clients. You just need to select the Preview mode in the webmail login screen. Please make sure that your customers and team members are made aware of these important updates.

Thank you for your support,

The Adobe Business Catalyst Team

BC Webinar: BC Next Generation

Diana Herac Wednesday, June 11, 2014

June 2014 will mark the beginning of the new era for Business Catalyst and we are eager to present a sneak peak of what that means. Join Lucian Cozma and Cristinel Anastasoaie from Business Catalyst on Wednesday, June 25th, for a webinar that will showcase some of the major changes that will be available this summer and our plans for the year.

Don't forget to register here:

Don't miss this one!

If you have any questions or suggestions please do not hesitate to send them over to

The Adobe Business Catalyst Team

BC Sandpile June Meetings

Diana Herac Friday, June 06, 2014

Weekly Day/Time:

  • San Francisco: Tuesdays, 5pm (all times adjusted in relation to this time)
  • New York City: Tuesdays, 8pm
  • London: Wednesdays, 1am
  • Sydney: Wednesdays, 10am

Open Discussion
10th June (11th in AUS) 2014
If you were attending our weekly events when BC Sandpile first started you will remember that we were all about open and honest conversations focused on Business Catalyst. It was simple, valuable, and fun. We are going back to our roots with an open meeting. No presentations. No pitches. Just simple Partner-to-Partner discussions. Bring your questions. Bring your concerns. Bring your sense of humor.

Building and Marketing Accommodation Websites
17th June (18th in AUS) 2014
In this first in a series of focused industry discussions, we will be looking at best practices for building and then marketing Accommodation websites with Business Catalyst.

Empower Users with the Updated In-Context Editor
24th June (25th in AUS) 2014
Gary Swanepoel of IT Business is going to show examples of leveraging ICE to really empower users to make major changes without web apps and get better control of using back-end modules when walking through the website by passing the internals of the Admin Console.

Full schedule:
Sandpile Recordings:

Scheduled system maintenance - June 1st 2014

Cristinel Anastasoaie Friday, May 30, 2014

To ensure the highest levels of performance we will be performing updates to servers located in our Dublin, Virginia and Sidney AWS data centers. To minimize the customer impact, the updates are scheduled at the most convenient hours for the region and will take up to one hour to complete. During the maintenance procedure, Partner registration, Trial Site creation, publish from Muse, sFTP,  APIs and some site admin sections will experience service interruptions. The website front-ends will not be impacted by the maintenance.

Maintenance schedule:

  • Start date and time: June 1st, 10:00 AM UTC (check datacenter times)
  • Duration: We are targeting a one hour maintenance window

Customer impact:

  • Partner registration, Trial site creation Muse Publish, APIs, FTP and some admin section will experience service interruptions

For up to date information about system status, check the Business Catalyst System Status page. We apologize for any inconvenience caused by these service interruptions. Please make sure that your customers and team members are made aware of these important updates.

Thank you for your understanding and support,

The Adobe Business Catalyst Team

Episode 37 of the BC Podcast - Pricing Business Catalyst

Brent Weaver Tuesday, May 27, 2014

Pricing is one of the most popular questions I get about Business Catalyst. This conversation begins with basic questions around…

  • What should I charge per hour?
  • How should I structure billing?
  • Can I markup the wholesale cost of BC?
  • Is there services that I can bundle in to increase my monthly profit?
  • Are there different ways I can sell time to my clients?

I thought the best way to answer these questions was to rope in three long time BC partners: Mike Sallander of Chicago Digital, Devon Reehl and Jonathan Hinshaw of Ebway Creative.

Don’t forget that this month, BackupBC is the Official App of the Month. To celebrate, they are selling the app for 50% off (limited time only).

Tune in for Episode 37 of the Business Catalyst podcast! In this episode we talk about pricing, margins, profit, and how to make more money with BC.

Listen to this month’s podcast:

Simply click the play button below to stream the podcast via your browser.


Alternatively, you can download the podcast in .mp3 format for offline listening.

In this episode:

  • Devon Reehl introduces the priority fee
  • Mike Sallander gives us insight into the most important box in a proposal
  • Jon Hinshaw tells how he sells hours more effectively
  • And much more

Join the Podcast!

Do you have something you want to announce to the BC community? I want to hear about it (

Until next time,

Brent Weaver

May 21st webinar recording - Building a Video Gallery BC App

Diana Herac Monday, May 26, 2014

Thanks to those of you who attended our BC webinar - Building a Video Gallery BC App with Scott B Reynolds from Thrise.
Scott shared a few key techniques learned while developing BC apps, the steps you should consider when building a BC app, using BC APIs and much more.

If you were unable to join us live, you can access the last 3 recordings below:

If you have any questions or suggestions please do not hesitate to send them over to We will be happy to answer all your inquiries.

Thank you and hope to see you in the next webinar.

The Adobe Business Catalyst Team