Setting up web skins

Ticketmatic gives you full control over the look and feel of the websales widgets through webskins.

A webskin consists of a html template and a css stylesheet and allows you to decide on the main structure of the widget pages. You can, among others:

  • decide where the main ‘content’ block will be placed on the page
  • add headers, footers, sidebars and images
  • decide where the wizard navigation buttons (Previous, Next) will be placed

You can style all aspects of the widgets:

  • build on the structured css that is used in all widgets (Bootstrap based), for easy styling
  • use custom fonts
  • use scss variables

The widgets are all fully responsive, so with minimal effort you can create web sales for all devices and screens.

Multilanguage webskins are supported: all text in the webskin is easily translatable.


Getting started: set up a new web skin

Go to the Web skins module in the Settings app and click on + Add to create a new web skin. A default html template and css will be created.

 1<div class="tm-wrapper tm-wrapper-header">
 2  <div class="tm-wrapper-inner container">
 3    <h1>{{tm.account.name}}</h1>
 4  </div>
 5</div>
 6<div class="tm-wrapper tm-wrapper-content">
 7  <div class="tm-wrapper-inner">
 8    <h2 ng-if="tm.page.title" class="tm-page-title">{{tm.page.title | translate}}</h2>
 9    <span class="visible-event">
10        <h1 class="tm-event-name">{{tm.events[0].name}}</h1>
11        <p>{{tm.event[0].startts | date:'medium'}}</p>
12    </span>
13    <div>{{CONTENT}}</div>
14  </div>
15</div>
16<div class="tm-wrapper tm-wrapper-action-buttons">
17  <div class="tm-wrapper-inner">
18    <div class="tm-actions-button cf">
19      <div class="pull-left">{{PREVIOUS}}</div>
20      <div class="pull-right">{{NEXT}}</div>
21    </div>
22  </div>
23</div>
24<div class="tm-wrapper tm-wrapper-footer">
25  <div class="tm-wrapper-inner container">
26    <div class="tm-copyright-notice">&copy; 2015 {{tm.account.name}}</div>
27  </div>
28</div>

This default webskin is fully functional and is a good base to start customizing the css and html.

Preview and testing environment

While you are editing a web skin, you will see the Preview pane on the right displaying your changes in realtime. You can select the page size to see how your web skin behaves on tablet and phone screens.

image

You can select several screens to check how your web skin looks for the different widgets and pages. The pages you find here are generated from an actual test account, so the generated html is identical to the html generated in the actual websales. But, as the websales widgets are highly dynamic and the content in your account will be different than the content from the test account, the preview pages can never show 100% of the use cases. So, while the preview will give you a good indication of how your web skin will look, it is advised to test your web skin with an actual websales widget before putting it in production.

image


Customizing the CSS

In the css, you will see a single @import "style"; statement. This statement is required and will load the default variables and css styles. You will notice that the styling is based on Bootstrap, so if you are familiar with this, you should be able to get up and running quickly.

There are 2 main ways to customize the css:

  1. Define scss variables
  2. Override css classes

1. Define scss variables

An easy way to customize a web skin is by defining values for (part of) the scss variables that are used throughout the standard stylesheets. Bootstrap defines a list of variables that can be used, for example $brand-primary or $link-color, and Ticketmatic adds some Ticketmatic-specific variables like $tm-header-background.

Try the example css below:

 1/* Color definitions
 2   ========================================================================== */
 3
 4$blue-lighter: #BCD6EA;
 5$blue-lightest: #ECF3F7;
 6$blue-light: #85B5D9;
 7$blue: #09B3DF;
 8$red: #D54026;
 9$red-light: #EC9F92;
10$brown: #60220E;
11$white: #FFF;
12
13/* Bootstrap variable overrides
14   ========================================================================== */
15
16$table-bg-accent: lighten($blue-light,20%);
17$brand-primary: $red;
18$well-bg: mix($blue-light,$blue-lightest,20%);
19$well-border: mix($blue-light,$blue-lightest,20%);
20$table-border-color: $blue-light;
21
22/* Ticketmatic specific variables
23   ========================================================================== */
24
25$tm-header-background: $white;
26$tm-content-background: $blue-lightest;
27$tm-action-buttons-background: $blue-light;
28$tm-btn-previous: #FFF;
29$tm-btn-next: #FFF;
30$tm-tfoothead-top-border: $table-border-color;
31$tm-tfoothead-border: $table-border-color;
32$tm-cart-total-top-border: darken($table-border-color, 20%);
33$addtickets-remove-ticket-count: true;
34// Seatingplan specific
35$tm-seat-selected: #d9534f !default;
36$tm-seat-available: #FFF !default;
37$tm-seat-available-stroke: #8C96A5 !default;
38$tm-seat-unavailable: #8C96A5 !default;
39$tm-seat-inactive: lighten($tm-seat-unavailable, 20%) !default;
40
41@import "style";

You see that we first define some skin-specific variables representing colors.

These variables are then used to overrule the standard values:

1$brand-primary: $red;

will set the brand-primary color to $red or #D54026.

You can also use SassScript in the css. For example to modify a color using the lighten function:

1$table-bg-accent: lighten($blue-light,20%);

More info on SassScript functions

There is a long list of Bootstrap variables that can be overruled. Take a look at the Bootstrap Customizer for an overview of the available variables

Also some Ticketmatic-specific variables are set. You can recognize these by the tm--prefix. These are the Ticketmatic-specific variables:

VariableDescription
$tm-header-backgroundbackground color for the header
$tm-content-backgroundbackground color for the content block
$tm-action-buttons-backgroundbackground color for the action buttons
$tm-btn-previouscolor for Previous button
$tm-btn-nextcolor for Next button
$tm-cart-total-top-border
$tm-tfoothead-top-border
$tm-tfoothead-border
$addtickets-remove-ticket-countboolean value indicating whether the ticket count should be shown in the addtickets widget
$tm-seat-availableseatingplan specific, color for a seat that is available
$tm-seat-available-strokeseatingplan specific, stroke color for a seat that is available
$tm-seat-unavailableseatingplan specific, color for a seat that is unavailable
$tm-seat-selectedseatingplan specific, color for a seat that is selected
$tm-seat-inactiveseatingplan specific, color for a seat that is inactive
$tm-authentication-backgroundauthentication widget background color
$tm-authentication-logoauthentication widget logo
Note that you should include the variables you want to customize before the @import "style"; command.

2. Override the css classes

To further customize the web skin, you can override the css classes used in the html. The html used in the widgets is based on Bootstrap and we try to apply the Bootstrap conventions as much as possible. In addition, we added a list of Ticketmatic-specific semantic css classes to the widgets.

For example:

1body {
2    background: #c1d9ed url("/images/bg-grad.jpg") repeat top center;
3}
4
5.tm-wrapper-header {
6  background: url(/images/shine.png") no-repeat top center;
7}

This css will set a background image for the body, and an additional background image for the tm-wrapper-header. You can use the Developer Tools of your favourite browser to inspect the html in the Preview pane to find out the css classes used in the widgets. Note that you should include the classes you want to customize after the @import "style"; command.


Customizing the html

The html in a web skin contains all html structure inside the body tag, and can completely be customized.

You will notice a few placeholders in upper case: {{CONTENT}}, {{PREVIOUS}} and {{NEXT}}. These 3 placeholders should always be included in the html template. By wrapping them in divs, you can position and style them any way you like.

  • {{CONTENT}} will be replaced by the actual widget content
  • {{PREVIOUS}} will be replaced by the wizard button Previous
  • {{NEXT}} will be replaced by the wizard button Next

You will also notice other (lower case) placeholders like {{tm.account.name}} or {{tm.page.title}}. These placeholders are interpreted at run-time in the browser and are actually regular AngularJS expressions. These placeholders are optional and can be used by use to display dynamic information about the account, order or event in the skin.

We provide the following placeholders:

PlaceholderDescription
tm.account
tm.account.idAccount id
tm.account.nameAccount name
tm.page
tm.page.namethe name of the page (= the identification)
tm.page.titlethe language sensitive name of the current page
tm.page.labela one-word label for the current page (useful for titles)
tm.events
tm.events[x].nameEvent name
tm.events[x].subtitleEvent subtitle
tm.events[x].starttsEvent startdate
tm.events[x].endtsEvent enddate
tm.events[x].locationnameEvent location
tm.events[x].webremarkEvent webremark
tm.events[x].c_customfield1All event custom fields are also available
tm.order
tm.order.nbrofticketsNumber of tickets in the order
tm.order.totalamountTotal amount for the order
Other
tm.yearthe current year (useful for copyright notices)
tm.CURRENCY_SYMBOLThe currency symbol used. Use this with a currency filter to get correct monetary formatting
tm.returnurlA signed returnurl containing the orderid and contactid (if specified). The reason for the return is skin

Placeholders often used in combination with AngularJS filters or directives. Some examples:

1//put the event name in uppercase
2{{ tm.events[0].name | uppercase }}

You can use these elements when formatting a date:

1//format a date
2{{ tm.events[0].startts | date:'EEE dd/MM - HH:ss'}}

The AngularJS directive ngIf can for example be used to display the subtitle only when it is filled in:

1<h2 ng-if="tm.events[0].subtitle">{{ tm.events[0].subtitle }}</h2>
1//Display the total amount in the correct currency
2{{ tm.order.totalamount | currency:tm.CURRENCY_SYMBOL }}

More info on AngularJS expressions.

Working with images

You can use images in the html. You can link to an external url (should always be https) or upload the image in the Assets module in the Settings app and link internally.

If an image with the name logo.png is uploaded in Assets in the images folder it can be loaded in the webskin with the following html:

1<img src="images/logo.png"/>

Using Ticketmatic-specific css classes in the html

Ticketmatic provides a few custom css classes that can be used in the html.

Class | Description tm-visible-event | if used on a div, the content inside the div will only be visible if an event is active for the current wizard tm-hidden-event | if used on a div, the content inside the div will only be visible if an event is not active for the current wizard


Translating the web skin

Ticketmatic supports fully mulitlingual web skins. Click on translate in the top menu to access the translation module. You will see that all default web skin strings are listed and can be translated or customised.

You can also translate text that you added yourself in the web skin. You should annotate it with a translate attribute. For example:

1<p translate>Text to be translated.</p>

And in order to make dynamic placeholders translatable, use the translate filter:

1{{tm.page.title | translate}}

Web skin settings

You can modify web skin settings on the Settings tab:

SettingDescription
FaviconThe favicon to be used for the wizard. You should refer to an icon in the assets here.
Page titleThe page title to be used for the wizard. You can use dynamic placeholders in the page title, for example: {{tm.page.label }} - {{tm.account.name}}
Google Tag Manager IDAn id (formatted like GTM-XXXXXX) that activates a Google Tag Manager container on websales. More info on Google Tag Manager
Typekit IDthe id of your Typekit account (if any). This enables you to use custom fonts
Facebook Pixel IDThe Facebook Pixel ID for user tracking.

Questions?

We're always happy to help! Send us an e-mail