# Content & Design

# Email Headers and Footers

<p class="callout info">**Email Headers and Footers** in OPSCOM allow administrators to define and manage reusable layout components for system-generated emails. By customizing these elements, you can ensure consistent branding, provide essential contact information, and apply uniform styling across all your automated email communications, creating a professional and cohesive user experience.</p>

### Using this Feature

Email Headers &amp; Footers are managed through a dedicated section within **System Configuration**.

1. Hover over **System Configuration,** then **Contents &amp; Design,** and click **Email Headers &amp; Footers**.

The **Email Template Layout List** page displays the various sections of your email layouts (e.g., Header, Footer, Style). From here, you can select and edit the individual components that make up your email layouts.

[![image.png](https://opscom.wiki/uploads/images/gallery/2025-06/scaled-1680-/ARvimage.png)](https://opscom.wiki/uploads/images/gallery/2025-06/ARvimage.png)

##### <span style="text-decoration: underline;">Editing Email Layout Templates</span>

1. Click **Toggle Templates**. Locate the corresponding **Section** you wish to edit (e.g., "Header" "Footer" or "Style").
2. Click the **Edit** button for that section.
3. Within the editor, you can: 
    - Add or modify text.
    - Insert images (e.g., your organization's logo).
    - Include **inline styles** directly within the HTML to control appearance (e.g., colors, fonts, spacing).
4. Click **Save Changes**. You will see a message that your changes have been saved.
5. You can also archive your template by clicking the **Archive Template** button in the Top Right.
6. Click the **Back** button to edit other sections.

---

### <span style="color: rgb(22, 145, 121);">Best Practices &amp; Considerations</span>

- <span style="color: rgb(22, 145, 121);">**Consistent Branding**: Use email headers and footers to consistently display your organization's logo, branding colors, and contact information across all automated emails.</span>
- <span style="color: rgb(22, 145, 121);">**Essential Information**: Ensure your footer contains crucial information such as your organization's name, website, and a general contact email or phone number.</span>
- <span style="color: rgb(22, 145, 121);">**Mobile Responsiveness**: When adding content and styling, consider how your headers and footers will appear on mobile devices. Use responsive design principles or simple layouts for best compatibility.</span>
- <span style="color: rgb(22, 145, 121);">**Inline Styling**: While the editor allows inline styles, for more complex or sitewide styling changes, coordinating with OPSCOM Support for custom CSS in the "Style" template might be beneficial.</span>
- <span style="color: rgb(22, 145, 121);">**Testing Changes**: After making any modifications to headers, footers, or styles, always test the email templates that use these layouts. Send a test email to yourself to ensure everything renders correctly in various email clients.</span>
- <span style="color: rgb(22, 145, 121);">**Global Impact**: Remember that changes made to these layout templates will affect **all** email templates that are configured to use them.</span>

# Email Templates

<p class="callout info">**Email Templates** in OPSCOM allow administrators to customize the content and appearance of automated emails sent by the system. By leveraging available shortcodes and a smart editor, you can create dynamic, informative, and engaging messages for various notifications, ensuring clear and consistent communication with users.</p>

### Using this Feature  


#### **Default Email Templates**

To access and manage your default email templates:

1. Hover over **System Configuration,** then **Contents &amp; Design,** and click **Email Templates**.
2. All the default email templates available in the system will be displayed.

The **Email Templates** interface allows you to edit existing templates, utilize dynamic shortcodes, and configure various fields to tailor your messages.

##### <span style="text-decoration: underline;">Editing Default Email Templates</span>

1. Locate the template you wish to edit in the list.
2. Click the **Edit** button next to it.
3. You will be taken to a dedicated editor interface where you can make changes to the email template.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/79Nimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/79Nimage.png)

##### <span style="text-decoration: underline;">Creating Templates for Other Languages</span>

If you have other languages installed, you can click the **Create** button to create templates for these languages.

##### <span style="text-decoration: underline;">Email Template Fields - What do they do?</span>

When editing an email template, you will configure the following fields:

- **Label**: This field is how you will identify your email template within the system's list.
- **Type**: This is a non-adjustable value that indicates the specific purpose or trigger for this email template (e.g., "Appeal Submitted," "Password Reset").
- **Language**: This field contains options to select the language for the template, typically supporting options like **French** or **English**.
- **Layout**: This allows you to select a pre-defined layout that surrounds your message. Layouts include your email header, footer, and overall styling. You can create or adjust email template layouts under **System Configuration,** then **Contents &amp; Design,** and click **[Email Headers &amp; Footers](https://opscom.wiki/books/setup-configuration-for-admins/page/email-headers-and-footers)**.
- **Subject**: This is the text that will appear as the subject line of the email message.
- **HTML Content**: Here you will write the main body of the message. This section supports rich text formatting, the insertion of images, and the use of shortcodes to create visually appealing and dynamic emails.
- **Text Content**: This section is a simple text editor for the message itself. It does **not** support shortcodes or any formatting. This plain text version is often used as a fallback for email clients that do not render HTML.

##### <span style="text-decoration: underline;">Using Shortcodes</span>

Each email template has a set of **available shortcodes** that you can use to dynamically insert specific information into your message.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/Uo4image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/Uo4image.png)

- The shortcode tokens are typically displayed on the **left side** of the template editor.
- For example, the email template for "Appeal Submitted by User" might offer shortcodes to automatically include details like `[ticket_appealed_date]` or `[ticket_number]`, allowing you to craft messages without manually knowing these specifics.
- You can insert these shortcodes into the **smart editor** on the right side. The system will automatically replace the shortcode with the appropriate information when the email is sent to the desired user.
- The smart editor also provides formatting capabilities, allowing you to add images, format text, and arrange your messages much like a word processor.

#### **Custom Email Templates**

Administrators can create and store frequently used emails that are not tied to specific system triggers. These templates can be used to automatically populate the email body when manually drafting a message to a user.

##### <span style="text-decoration: underline;">Creating a Custom Template</span>

1. Click the **Create** button.
2. Enter a descriptive **Label**. Custom templates are assigned an internal type code beginning with `custom`.
3. Compose the message using the **HTML Content** and **Text Content** fields.
4. Click **Save**.

##### <span style="text-decoration: underline;">Using Custom Templates in Compose Email</span>

When drafting a manual email to a user via the **Compose Email** page:

1. Use the **Load Template** section to view all available custom templates.
2. Select a template to automatically populate the email contents.
3. The **Compose Email** interface will highlight any required fields that must be completed before you can click the **Send Email** button.

<p class="callout success">**Tip:** Unlike system-defined templates, custom templates include a **Delete** button, allowing you to remove them when they are no longer needed.</p>

---

### <span style="color: rgb(22, 145, 121);">Best Practices &amp; Considerations</span>

- <span style="color: rgb(22, 145, 121);">**Utilize Shortcodes Fully**: Maximize the use of available shortcodes to make your emails dynamic, personalized, and informative, reducing manual effort and potential errors.</span>
- <span style="color: rgb(22, 145, 121);">**Consistent Branding**: Use email layouts (**Email Headers &amp; Footers**) to maintain consistent branding (logos, colors, contact info) across all your system-generated emails.</span>
- <span style="color: rgb(22, 145, 121);">**Clear Subject Lines**: Craft clear and concise subject lines so users can immediately understand the purpose of the email.</span>
- <span style="color: rgb(22, 145, 121);">**Review Both HTML and Text Content**: Always ensure both the **HTML Content** and **Text Content** sections are populated and convey the message clearly. This provides compatibility for all email clients.</span>
- <span style="color: rgb(22, 145, 121);">**Test Templates**: After making changes to an email template, send a test email to yourself or a test account to verify that all shortcodes are rendering correctly, formatting is as expected, and the message is clear.</span>
- <span style="color: rgb(22, 145, 121);">**Language-Specific Templates**: If your system supports multiple languages, ensure you create and maintain separate templates for each language.</span>
- <span style="color: rgb(22, 145, 121);">**Verify Custom Templates**: When using the **Load Template** feature, remember that custom templates show for all users regardless of the selected language; ensure the correct version is chosen.</span>

<div class="table-wrap" id="bkmrk-label-the-label-fiel"></div>

# Translations

## Where are Translations Supported

Currently, translations are only supported on the user side, however, they are managed and set up on the admin side, by admins that have the correct permissions set up to work with languages.

<div class="columnLayout single" data-layout="single" id="bkmrk-translations-that-ar"><div class="cell normal" data-type="normal"><div class="innerCell">1. Translations that are in <span class="legacy-color-text-red2">red,</span> are translations on the adminside which are not yet supported. Since they are not supported you will see them come up in English only until the adminside is supported.
2. Translation that are in **black,** are translations that are on the userside that can currently be changed.

</div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/7Zuimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/7Zuimage.png)

## Navigating to Translations

To begin reviewing, editing or creating your translations/languages, you will need to navigate to **System Config → Content &amp; Designs → Translations**.

[<span style="color: rgb(224, 62, 45);">![2024-10-04_14-34-02.png](https://opscom.wiki/uploads/images/gallery/2024-10/scaled-1680-/IhO2024-10-04-14-34-02.png)</span>](https://opscom.wiki/uploads/images/gallery/2024-10/IhO2024-10-04-14-34-02.png)

This will take you to the **Installed Languages** page where you can begin managing your current languages.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/bn8image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/bn8image.png)

## Adding New Languages 

To begin adding your own languages simply click **Add Language** on the **Installed Languages** page which will bring up a new modal to add a label and locale.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/JKKimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/JKKimage.png)

When you are finished click **Save Changes** and your new language will be instantly added to the list. Once the language has been added, your users can begin using it on the user-side assuming you have the language enabled.

The locales are used when we want to create sub-languages, while the label is used to identify our translations throughout the site.

## Adding Sub Languages and How do They Work

Sub-languages are created by using a locale that currently exists with an underscore '\_' followed by the sub-language that you want to set up.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/5EPimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/5EPimage.png)

For example, you can support multiple variations of the English language for your users. In the image below I have created a sub-language for American English using the **locale en\_us**.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/siaimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/siaimage.png)

When you create a new sub-language, it will automatically use the translations that have been set up on the main language, which is the locale on the left side of the underscore, such as **en\_us**. You will need to create the main language first before creating any sub-languages, otherwise the sub-language will always default to English instead of the main language you may have intended to use.

## Installing Languages

Installing a language will create a new language template with the translations we have set up for it as well as the **Name** and **Locale** we have created for you. You can then click **Edit Translations** to adjust the preset translations to your liking. If there is not a language already in the system that can be installed you will need to add a new language and setup the translations yourself. Currently, we only support the ability to install French and English.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/DsYimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/DsYimage.png)

## Disabling or Enabling Translations 

We can choose to disable particular languages that we don't want to be selectable from the user side. To do this we can toggle the visibly of our languages under the **Enabled** column on the **Installed Languages Page**.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/43mimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/43mimage.png)

Once a language is toggled as **Disabled** it can no longe<span class="inline-comment-marker inline-highlight first-mark-highlight last-mark-highlight" data-ref="653e42b4-9dfc-4510-a18e-cd3aaa7ffc0a">r be</span> selected by the users of your site as seen in the example image below.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/xziimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/xziimage.png)

## Searching Language Translations 

You can search for all translations that relate to a specific component in the system using the search bar at the top right of the **Edit Translations** page. For example, we can search for permits to find all permit related translations.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/ieJimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/ieJimage.png)

We can also go onto the user side and use the **Token** language, which will show all of the **Names** found on the **Edit Translations** page, under the **Name** column, (See the image above) to find where that translation exists so it can be changed. This can't be seen by logging is as the user from the user side but requires an admin to go to the profile of a user and click the **Login as User** button from the admin side. This is to ensure that your regular users don't see the token language option.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/7RXimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/7RXimage.png)

The token language finds the tokens used so you can better search where the translations are being used on the user side.

## Edit Translations

To begin editing language translations you have to make your changes and then click away from the input field. Once you do this you will see that the translation gets highlighted in yellow indicating that a change has been made. The number of affected records will also display at the bottom of the translations page.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/tY5image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/tY5image.png)

When you are finished making your changes click **Save Changes** for the update to take effect.

## Delete Languages

To delete languages, you can click the delete button next to the language you want to remove. Keep in mind that if you remove the base English and French language it can be re-installed. However, if you delete a language that we do not provide you, then this data will be lost and you will need to contact support for assistance with recovering these translations.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/GToimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/GToimage.png)

Keep in mind that deleting a language will not delete any of the sub-languages you may have created. For example, if I were to delete English, the English US language would still remain with all of its translations.

## Creating Templates and Messaging for New Languages

It's important to note that when you create a new language it will not rely on the default templates and system messaging that you have setup for your previous languages. For example, if I use the new French American language I created, and go onto the user side where languages are supported, then I will see a blank template as well as blank messages.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/doCimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/doCimage.png)

### Adding Templates

To add a new template for your languages that you create you will need to go into **Templates &amp; Design** followed by **Toggle Templates** for the templates that are currently being used. From there you will have the option to click the **Create** button to add the new template. If you just want your new language to use the same template, from a language that is already in the system, just go into **Edit** and copy the text over into your new language, after clicking the **Create** button.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/Xktimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/Xktimage.png)

### Adding System Messages

System messaging will work a bit differently than templates as you will need to go into each individual message and click the **Edit** button next to that message.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/jleimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/jleimage.png)

From there you should be able to select your new language.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/Qxaimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/Qxaimage.png)

If you want multiple messages to display for all your languages you will need to create a new system message and type out the translations for that language template.

## <span data-colorid="isr8j27mmf">Changing Terminology Using the Translator</span>

There is another use for the translation tool that may not be obvious at first. Since the translator is essentially a list of code terms and a corresponding list of what is actually displayed on any page not only can you edit the various languages but for each language you can also edit the display term to fit a local "version" of the term. A perfect example of this is in some areas one might refer to receiving a "**ticket**" as receiving a "**citation**". It is entirely possible to replace any spot in the interface where the term **ticket** is used with the term **citation**.

To do so go into the language editor and search for the term you wish to localize. In our example simply enter **ticket** in the search bar and hit return. A list of all translatable instances of the word ticket will appear. Click the box where the term is editable and type in your preferred term. In this case we are changing **Manage Ticket Categories** to **Manage Citation Categories**. Once you save the changes you have made the displayed text associated with **Manage Ticket Categories** will display as **Manage Citation Categories** throughout the system. You may edit the remaining instances of the word Ticket that are in the list before saving to change the term in bulk for all entries listed.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/Zmpimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/Zmpimage.png)

# User Portal Branding and Setup

<p class="callout info">OPSCOM administrators can define global default branding for the User Portal. By configuring the **Default Site Logo** and **Default Site Header**, you can ensure consistent branding and visual presentation across your OPSCOM User environment.</p>

## Setup &amp; Configuration

Default images are configured within the **Global** component of the **System Settings**.

1. Hover over **System Configuration,** and click **System Settings**.
2. Click the Global settings tab. Within the **Global Setting** section, you will find two key areas where you can configure images: 
    - **Default Site Logo**
    - **Default Site Header**

##### <span style="text-decoration: underline;">Setting the Default Logo</span>

1. Next to the **Default Site Logo** setting, click on **Select Image**.
2. You will be taken to the **Manage Files** section (your file repository).
3. Browse your computer or search for the image you wish to use as your default site logo.
4. Select the desired image.

[Follow the **Uploading and Managing Files** guide for best practices regarding file management and organization.](https://opscom.wiki/books/setup-configuration-for-admins/page/uploading-and-managing-files)

##### <span style="text-decoration: underline;">Setting the Default Header Image</span>

1. Similarly, next to the **Default Site Header** setting, click on **Select Image**.
2. Follow steps 3-4 above.

Once the images are selected, their file names or previews will appear in the respective configuration settings fields. Remember to **Save Settings** to apply these selections.

##### <span style="text-decoration: underline;">Observing the Changes</span>

These default images serve as fallbacks and will appear in various places throughout the OPSCOM system if no specific logo or header is set in other areas (such as the **Contents and Designs** section).

Common places where these default images are utilized include:

- The **User Portal** (e.g., your public-facing permit purchasing site).
- The **phone interface** utilized in features like **Real-Time Parking**.
- Mobile apps, Text2ParkMe, and QR code interfaces

---

### <span style="color: rgb(22, 145, 121);">Best Practices &amp; Considerations</span>

- <span style="color: rgb(22, 145, 121);">**Branding Consistency**: Use high-quality, appropriately sized images that reflect your organization's branding for both the logo and header.</span>
- <span style="color: rgb(22, 145, 121);">**Optimization**: Ensure image files are optimized for web use (e.g., compressed, appropriate resolution) to ensure fast loading times on all interfaces.</span>
- <span style="color: rgb(22, 145, 121);">**Global Impact**: Remember that these are *default* settings. If you have specific headers or logos configured in other sections of the system (like individual email templates or specific public pages), those specific configurations will override these global defaults.</span>
- <span style="color: rgb(22, 145, 121);">**Accessibility**: Consider the visual accessibility of your chosen images, especially for text overlays or contrast, if applicable to your header design.</span>

# Pages and Content Blocks

## <span data-colorid="ge6u58s9q9">Accessing System Messaging</span>

To access and manage your **System Messaging** navigate to the gears icon <span class="confluence-embedded-file-wrapper">![](https://OPSCOM.atlassian.net/wiki/download/attachments/762387/image2019-4-8_9-42-38.png?version=1&modificationDate=1554731403000&cacheVersion=1&api=v2)</span> and click on **Content &amp; Designs** -&gt; **Pages and Content Blocks**.

[![2024-10-04_14-34-02.png](https://opscom.wiki/uploads/images/gallery/2024-10/scaled-1680-/2024-10-04-14-34-02.png)](https://opscom.wiki/uploads/images/gallery/2024-10/2024-10-04-14-34-02.png)

## Creating Pages

We also provide a video to visually demonstrate how to use system messaging [https://drive.google.com/file/d/1DU3qorWnAp\_2N9mcNGFYTttNHMeRpXsQ/view](https://drive.google.com/file/d/1DU3qorWnAp_2N9mcNGFYTttNHMeRpXsQ/view)

**Pages** display the visual content found throughout your application. You can edit the contents of your page or post a **System Message** by using the Disclaimer Shortcode on the **Page** you want it to show up on. **Shortcodes** also make it convenient to add interactive content to your pages. For more information on **Shortcodes** scroll to the bottom of this page.

<div class="columnLayout single" data-layout="single" id="bkmrk-to-create-a%C2%A0page%C2%A0cli"><div class="cell normal" data-type="normal"><div class="innerCell">- To create a **Page** click the **Create Page/Message** button at the top right of the **Manage System Messaging** screen. It doesn't matter what tab you're on when you do this as you will specify the **Page Type** when you go to create the page.

</div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/VEYimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/VEYimage.png)

<div class="columnLayout single" data-layout="single" id="bkmrk-once-you-click-this-"><div class="cell normal" data-type="normal"><div class="innerCell">- Once you click this button OPSCOM will take you to a different section where you can set the properties and content of the page. Below is a detailed description of the options available to you when creating new **Pages**.

<div class="table-wrap"><table class="wrapped confluenceTable tablesorter tablesorter-default" role="grid" style="width: 100%;"><colgroup><col style="width: 11.0822%;"></col><col style="width: 88.9178%;"></col></colgroup><thead><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Page Attributes: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0">Page Attributes</th><th aria-disabled="false" aria-label="Short Description : No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0">Short Description </th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd">**Title**</td><td class="confluenceTd">The **Title** of the page you wish to create, which will be the name displayed on the user navigation bar. </td></tr><tr role="row"><td class="confluenceTd">**Path**</td><td class="confluenceTd">The path after the domain. i.e.

**login*****/**  → This is the home page*

Changing this to **lockers/area/1** will display **login/lockers/area/1** as the URL for that page.

</td></tr><tr role="row"><td class="confluenceTd">**Visibility**</td><td class="confluenceTd">You can toggle the visibility of your pages which will make it so your users can't see the page anymore, but you can still edit it.</td></tr><tr role="row"><td class="confluenceTd">**Language**</td><td class="confluenceTd">Use this to select between two language options for a specific page. Tomahawk currently supports **English** and **French**. </td></tr><tr role="row"><td class="confluenceTd" colspan="1">**Layout**</td><td class="confluenceTd" colspan="1">You can select the layout of your page here. Usually, you will have the **Default Layout** selected. </td></tr><tr role="row"><td class="confluenceTd">**Content**</td><td class="confluenceTd">Your content will be the text on the page you are currently editing. You can also use **Shortcodes** here to display a body of material or feature. For example, a user login form could be displayed on your homepage. </td></tr></tbody></table>

</div></div></div></div><p class="callout info">**Important:** Make sure you select **Page** under the drop-down menu next to **Page Type** and not **Message**. Below we will go into detail on how to create a **Page** field by field. The images below give you a good visual example of what field is being explained, if there is a certain field you are unsure about you can easily find the picture and read from there.</p>

<div class="columnLayout single" data-layout="single" id="bkmrk-important%3A%C2%A0make-sure"><div class="cell normal" data-type="normal"><div class="innerCell">- Start by giving your page a **Title** and specify how you would like the **URL** at the top of your page to be displayed.
    
    <div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="d7eaa7b3-bdcf-4334-940a-edecfdf6321a" data-macro-name="expand" resolved=""><div class="expand-control" id="bkmrk-%C2%A0what-is-a-url%3F..."><span class="expand-control-icon icon"> </span><span class="expand-control-text">What is a URL?...</span></div></div><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="d7eaa7b3-bdcf-4334-940a-edecfdf6321a" data-macro-name="expand" id="bkmrk--2" resolved=""><div class="expand-content expand-hidden" id="bkmrk--3"></div></div>

</div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/C4Limage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/C4Limage.png)

<div class="columnLayout single" data-layout="single" id="bkmrk-adjust-the-visibilit"><div class="cell normal" data-type="normal"><div class="innerCell">- Adjust the visibility of your page by toggling the **Visible** button on/off. The **Page** will still be editable in the **System Messaging** section but it will not be visible to your users who are on your **Page** or **System Message**.

<div class="table-wrap"><table class="wrapped relative-table confluenceTable tablesorter tablesorter-default" role="grid"><colgroup><col></col><col></col></colgroup><thead><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Toggle On(Visible Page): No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0">Toggle On(Visible Page)</th><th aria-disabled="false" aria-label="Toggled Off(Invisible Page): No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0">Toggled Off(Invisible Page)</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd"><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size">![](https://OPSCOM.atlassian.net/wiki/download/thumbnails/762387/visible.png?version=1&modificationDate=1675158301000&cacheVersion=1&api=v2&width=109&height=54)</span>

</td><td class="confluenceTd"><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size">![](https://OPSCOM.atlassian.net/wiki/download/thumbnails/762387/2022-12-08_9-31-34.png?version=1&modificationDate=1670491946000&cacheVersion=1&api=v2&width=105&height=55)</span>

</td></tr></tbody></table>

</div></div></div></div><div class="columnLayout single" data-layout="single" id="bkmrk-toggling-the%C2%A0page%C2%A0as"><div class="cell normal" data-type="normal"><div class="innerCell">- Toggling the **Page** as invisible will show it under the **Messages** tab like seen in the image below to signify it cannot be seen by your users.

</div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/dZ1image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/dZ1image.png)

<div class="columnLayout single" data-layout="single" id="bkmrk-select-the-default%C2%A0l"><div class="cell normal" data-type="normal"><div class="innerCell">- Select the default **Language** and **Layout** of your page. If you are not sure which template to use you can leave it as the **Default Layout.**

</div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/rzPimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/rzPimage.png)

<div class="columnLayout single" data-layout="single" id="bkmrk-provide-the-content-"><div class="cell normal" data-type="normal"><div class="innerCell">- Provide the content of your page in the editor found under the page settings. This content will be the main content of your **Pages**; you can use **Templates &amp; Design** to edit the other sections of your pages such as the **Header-Content** and **Footer-Content.**

</div></div></div><div class="columnLayout single" data-layout="single" id="bkmrk-OPSCOM-uses%C2%A0shortco"><div class="cell normal" data-type="normal"><div class="innerCell">- OPSCOM uses **Shortcodes** to display a section of interactive or static content like a user login, permits, etc.

</div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/7JRimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/7JRimage.png)

## Content Placement

Depending on where you place your content it can appear differently. OPSCOM's smart editor reads content top to bottom, left to right. Meaning that placing a user login **Shortcode** before your content will look dramatically different than if you placed the **Shortcode** last. You can see a few visual examples of how this works below.

### For Example: **Shortcodes Before Content**

<div class="columnLayout single" data-layout="single" id="bkmrk-we-are-going-to-use-"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="bf6a7d93-e9c9-4f24-81f5-75c5c86643ba" data-macro-name="expand" resolved=""><div class="expand-control" id="bkmrk--11"></div><div class="expand-content expand-hidden">We are going to use the Lot Information Shortcode to display our available lots <u>**before**</u> our text content.   
</div></div></div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/ZuRimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/ZuRimage.png)

As you can see this displays our lot information <u>**before**</u> our content.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/rp2image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/rp2image.png)

<div class="columnLayout single" data-layout="single" id="bkmrk--15"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="bf6a7d93-e9c9-4f24-81f5-75c5c86643ba" data-macro-name="expand" id="bkmrk--16" resolved=""><div class="expand-content expand-hidden" id="bkmrk--17"></div></div></div></div></div>### For Example: **Shortcodes After Content** 

<div class="columnLayout single" data-layout="single" id="bkmrk-once-again-we-are-go"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="3ae86715-0f47-411d-bacf-f5bc4c3c32fb" data-macro-name="expand" resolved=""><div class="expand-control" id="bkmrk--18"></div><div class="expand-content expand-hidden">Once again we are going to use the Lot Information Shortcode to display our available lots <u>**after**</u> our **Content**.</div></div></div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/BdIimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/BdIimage.png)

As you can see this placed the **Shortcode** <u>**after**</u> the lot information

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/9fKimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/9fKimage.png)

<div class="columnLayout single" data-layout="single" id="bkmrk--21"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="3ae86715-0f47-411d-bacf-f5bc4c3c32fb" data-macro-name="expand" id="bkmrk--22" resolved=""><div class="expand-content expand-hidden" id="bkmrk--23"></div></div></div></div></div>## Editing Pages 

Keep in mind that the **URL / System Location** next to the page is the area in OPSCOM that you are updating. Therefore, if you wished to update the permit screen, you want to edit the page with a **System Location** of /permits.

You can edit your pages attributes such as the **Title, Path, Visibility, Language, Layout,** and **Content** after it has already been created.

<div class="columnLayout single" data-layout="single" id="bkmrk-to%C2%A0edit%C2%A0a-page%2C-simp"><div class="cell normal" data-type="normal"><div class="innerCell">1. To **Edit** a page, simply click on the **Edit** button next to the page **Title** you want to edit. As seen in the image below we are going to select and edit the **Appeals Message** page.   
      
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/u9Kimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/u9Kimage.png)
2. You can now make any changes to the **Pages** content or attributes that you like.  
    See **Creating Pages** near the top of the page if you are not sure what a specific field does. From here we can edit the format of the text such as the colour, background color, etc..   
      
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/Alnimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/Alnimage.png)
3. If you have not made any changes to the page you are **Editing**, you may go back to the **Page List** by clicking **Return to Page List** at the top of the screen. Clicking this button will discard **all** changes recently made.   
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/Q6Cimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/Q6Cimage.png)
4. Once you have finished editing the page, click **Save Messaging** for your changes to take effect.   
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/xIaimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/xIaimage.png)

</div></div></div>## Creating System Messages

<p class="callout info">**Important:** Users will be brought back to the **Users** page if users do not agree with a **System Message**. Meaning, we use **System Messaging** as a convenient way to offer agreements and disclaimers before users make purchases of permits or lockers. </p>

### System Messages and How they work with Pages 

<div class="columnLayout single" data-layout="single" id="bkmrk-%C2%A0how-do-system-messa"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="350271a8-f774-4656-923d-0b19ebb705ed" data-macro-name="expand" resolved=""><div class="expand-control" id="bkmrk-%C2%A0how-do-system-messa-1"><span class="expand-control-text">How do System Messages work?</span></div><div class="expand-control"></div></div></div></div></div>**System Messages** and **Pages** work together using Disclaimer Shortcode's. When you create a **System Message,** you give that message a unique **Identifier.** System message identifiers may be used in junction with **Disclaimer Shortcodes** to display your **System Messages** onto **Pages**. The idea may be daunting at first, but once you get a better understanding of how these features work together, it will make more sense.

### Visual Example


[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/hM6image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/hM6image.png)

<div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="350271a8-f774-4656-923d-0b19ebb705ed" data-macro-name="expand" id="bkmrk-the%C2%A0system%C2%A0message%C2%A0g" resolved=""><div class="expand-content" id="bkmrk-the%C2%A0system%C2%A0message%C2%A0g-1">1. The **System** **Message** gets created.
2. The **System Message** is given an **Identifier** to be used with a specific **System Message** so we may access it on a **Page**.
3. We add the **Identifier** to the Disclaimer Shortcode on the **Page** that we want to display the message on.   
    
    1. ***<span class="legacy-color-text-blue3">Shortcode Example-</span> \[disclaimer name=lockersDisclaimer dismiss=never\]***
    2. ***<span class="legacy-color-text-blue3">Shortcode Example- </span>\[disclaimer name=vehicleDisclaimer dismiss=session show=".add-vehicle"\]***
4. **Shortcodes** may also be used on **System Messages** to display useful content such as a detailed description of the current vehicles registered to the user. See below for a list of supported **Shortcodes**.

</div></div><div class="columnLayout single" data-layout="single" id="bkmrk--28"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="350271a8-f774-4656-923d-0b19ebb705ed" data-macro-name="expand" id="bkmrk--29" resolved=""><div class="expand-content expand-hidden" id="bkmrk--30"></div></div></div></div></div>**System Messages** provide you with a convenient way to add alert messages to your pages that pop-up when a user clicks the page. You may create **System Messages** to be displayed on specific **Pages** using Disclaimer Shortcode's.

<div class="columnLayout single" data-layout="single" id="bkmrk-message-attributes-d"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="table-wrap"><table class="wrapped confluenceTable tablesorter tablesorter-default" role="grid"><colgroup><col></col><col></col></colgroup><thead><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Message Attributes: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0">Message Attributes</th><th aria-disabled="false" aria-label="Description: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0">Description</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd">**Title**</td><td class="confluenceTd">The title that will be displayed across the top of the **System Message** when users navigate to that page. </td></tr><tr role="row"><td class="confluenceTd">**Identifier**</td><td class="confluenceTd">The identifier is used to know which page you want to display the message by using **Shortcodes**. </td></tr><tr role="row"><td class="confluenceTd">**Visibility**</td><td class="confluenceTd">This section toggles the visibility of your page which will make it so your users may not see the page, but you can still edit it.</td></tr><tr role="row"><td class="confluenceTd">**Language**</td><td class="confluenceTd">Select between two language options for a specific page. Tomahawk current supports **English** and **French**. </td></tr><tr role="row"><td class="confluenceTd">**Content**</td><td class="confluenceTd">Content is what will display on the actual page. You may use **Shortcodes** here to view predefined static or interactive content. For example, a user login form could be displayed on your homepage. </td></tr></tbody></table>

</div>1. To create a **System Message** merely click the **Create Page / Message** button on the top right of the **Manage System Messaging** screen.  
      
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/iFKimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/iFKimage.png)
2. Make sure to select the **Page Type** from the drop-down menu and change this to **Message**. It is essential that you do not select **Page** when creating a **System Message**.  
      
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/2Xtimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/2Xtimage.png)
    
      
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/3NSimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/3NSimage.png)
3. Create a **Title** for the message.
4. Give the message a unique **Identifier** so it can be accessed on your **Pages** using Disclaimer Shortcodes. **Shortcodes** are codes used to link our **Pages** and **System Messages** together.
5. Once an **Identifier** is created, It is essential to note that you may not use it anymore or you will get an error message.
6. You may modify the visibility of your **System Message** by toggling the **Visible** button on or off.
    
    <div class="table-wrap"><table class="wrapped relative-table confluenceTable tablesorter tablesorter-default" role="grid"><colgroup><col></col><col></col></colgroup><thead><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Toggle On(Visible): No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0">Toggle On(Visible)</th><th aria-disabled="false" aria-label="Toggled Off(Invisible): No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0">Toggled Off(Invisible)</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd">[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/XY6image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/XY6image.png)
    
    </td><td class="confluenceTd">[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/L2Himage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/L2Himage.png)
    
    </td></tr></tbody></table>
    
    </div>
7. Toggling a **System Message** as invisible ensures your users won't see it. Although, you can still **edit** and **view** the **System Message** on the admin side, but it will be displayed as seen in the image below.   
      
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/vd5image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/vd5image.png)
8. Select which **Language** you would like your content to be in. OPSCOM currently supports two languages which are **English** and **French**.
9. Edit the contents of your **System Message** in the editor found below the messages fields. This is the content that your users will see and will allow you to edit and format the way the text looks.  
    Once finished, click **Save Messaging.**

</div></div></div><p class="callout warning">**Warning:** Clicking **Return to Template List** before **Save Messaging** will discard all the changes you just made, meaning that the **System Message** will not get created or your changes will not occur. </p>

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/Kkyimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/Kkyimage.png)

<div class="columnLayout single" data-layout="single" id="bkmrk--33"><div class="cell normal" data-type="normal"><div class="innerCell"><div class="confluence-information-macro confluence-information-macro-information conf-macro output-block" data-hasbody="true" data-macro-id="e6183a34-78e5-41f8-b06e-b1f266ae4a1e" data-macro-name="info"></div></div></div></div>## Editing System Messages

You can manage your **System Messages** **Title, Identifier, Visibility, Language**, as well as modify the content to include text, images, or **Shortcodes**.

<div class="columnLayout single" data-layout="single" id="bkmrk-to%C2%A0edit%C2%A0your%C2%A0system-"><div class="cell normal" data-type="normal"><div class="innerCell">1. To **Edit** your **System Messages** click the **Messages** tab under the **Manage System Messaging** page.
2. Select the **Edit** button next to the **System Message** you wish to edit. For this example, we will be editing the **Admin Dashboard.**   
      
    [![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/elXimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/elXimage.png)
3. You will now be able to adjust the message your users will see using the **System Messaging** editor. Below are the fields in which you can use to edit the **System Message**.
    
    <div class="table-wrap"><table class="wrapped confluenceTable tablesorter tablesorter-default" role="grid"><colgroup><col></col><col></col></colgroup><thead><tr class="tablesorter-headerRow" role="row"><th aria-disabled="false" aria-label="Message Attributes: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="0" role="columnheader" scope="col" tabindex="0">Message Attributes</th><th aria-disabled="false" aria-label="Description: No sort applied, activate to apply an ascending sort" aria-sort="none" class="confluenceTh tablesorter-header sortableHeader tablesorter-headerUnSorted" data-column="1" role="columnheader" scope="col" tabindex="0">Description</th></tr></thead><tbody aria-live="polite" aria-relevant="all"><tr role="row"><td class="confluenceTd">**Title**</td><td class="confluenceTd">The title that will be displayed across the top of the **System Message** when users navigate to that page. </td></tr><tr role="row"><td class="confluenceTd">**Identifier**</td><td class="confluenceTd">The identifier is used to know which page you want to display the message by using **Shortcodes**. </td></tr><tr role="row"><td class="confluenceTd">**Visibility**</td><td class="confluenceTd">This section toggles the visibility of your page which will make it so your users may not see the page, but you can still edit it.</td></tr><tr role="row"><td class="confluenceTd">**Language**</td><td class="confluenceTd">Select between two language options for a specific page. OPSCOM currently supports **English** and **French**. </td></tr><tr role="row"><td class="confluenceTd">**Content**</td><td class="confluenceTd">Content is what will display on the actual page. You may use **Shortcodes** here to view predefined static or interactive content. For example, a user login form could be displayed on your homepage. </td></tr></tbody></table>
    
    </div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/TZlimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/TZlimage.png)
4. You may use the **Title** field to change the **Title** of the **System Message**.
5. You may use the **Identifier** field to change text used to display a **System Message** to a **Page,** but this will require you to modify all **Disclaimer Shortcodes** using the old unique **Identifier** for the message you are replacing.
6. You may click **Save Messaging** when you are finished making your changes.

</div></div></div>[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/W08image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/W08image.png)

## Add System Messages to Pages using Shortcodes

Now that you know how to create your **Pages** and **System Messages** you can bring them together using a <span class="legacy-color-text-red2">Disclaimer Shortcode</span>. A **Shortcode** is a small body of code surrounded by **\[ \]** used to display complex templates or features. Shortcodes limit the technicality of our system by offering a convenient way to add interactive content without having to know how to script or code.

Please review the Shortcodes for Use on the User Portal for a detailed description of how shortcodes work. You can also find a list of **Shortcodes** currently available to you by going to the OPSCOM Shortcode Documentation.

<iframe class="youtube-player conf-macro output-block" data-hasbody="false" data-macro-id="e5177982-6967-41f6-a44d-b3d0a55776f1" data-macro-name="widget" frameborder="0" height="324" src="https://www.youtube.com/embed/spoRyVUWflE?wmode=opaque" style="width: 648px; height: 324px;" width="648"></iframe>

# Templates and Design

## Overview

The User Portal system allows your clients to register, add vehicles, purchase permits and pay violations. It is an important extension of your business, and it should reflect your corporate branding.

### Pages and Templates

The OPSCOM user Page will store the functionality and content of your main page, while the Templates will be used to change the functionality of your pages as well as the content around the Page.

## Where to Find Templates and Design

Click **System Configuration**, **Templates &amp; Design** to access these features.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/KgQimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/KgQimage.png)

## All Default Templates 

If at any point you feel that you have adjusted the **Default** &lt;scripts&gt; and &lt;styles&gt; to the point of breaking your site, or you are simply unsure what your changes have done, you can refer to these templates to restore your pages functionality and style.

<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-id="25282dd3-8bd2-43a2-8172-07e830e44191" data-macro-name="code" id="bkmrk-default-script-templ"><div class="codeHeader panelHeader pdl hide-border-bottom">**Default Script Template**<span class="collapse-source expand-control"><span class="expand-control-icon icon expanded"> </span></span></div><div class="codeContent panelContent pdl hide-toolbar show-border-top"><div><div class="syntaxhighlighter sh-rdark js expanded" id="bkmrk-%C2%A0-1-2-3-4-5-6-7-8-9-"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number0 index0 alt1 break"> </div><div class="line number1 index1 alt2">1</div><div class="line number2 index2 alt1">2</div><div class="line number3 index3 alt2">3</div><div class="line number4 index4 alt1">4</div><div class="line number5 index5 alt2">5</div><div class="line number6 index6 alt1">6</div><div class="line number7 index7 alt2">7</div><div class="line number8 index8 alt1">8</div><div class="line number9 index9 alt2">9</div><div class="line number10 index10 alt1">10</div><div class="line number11 index11 alt2">11</div><div class="line number12 index12 alt1">12</div><div class="line number13 index13 alt2">13</div><div class="line number14 index14 alt1">14</div><div class="line number15 index15 alt2">15</div><div class="line number16 index16 alt1">16</div><div class="line number17 index17 alt2">17</div><div class="line number18 index18 alt1">18</div><div class="line number19 index19 alt2">19</div><div class="line number20 index20 alt1">20</div><div class="line number21 index21 alt2">21</div><div class="line number22 index22 alt1">22</div><div class="line number23 index23 alt2">23</div><div class="line number24 index24 alt1">24</div><div class="line number25 index25 alt2">25</div><div class="line number26 index26 alt1">26</div><div class="line number27 index27 alt2">27</div><div class="line number28 index28 alt1">28</div><div class="line number29 index29 alt2">29</div><div class="line number30 index30 alt1">30</div><div class="line number31 index31 alt2">31</div><div class="line number32 index32 alt1">32</div><div class="line number33 index33 alt2">33</div><div class="line number34 index34 alt1">34</div></td><td class="code"><div class="container" title="Hint: double-click to select code"><div class="line number0 index0 alt1 break">`<script>`</div><div class="line number1 index1 alt2">`    ``$(``function``(){`</div><div class="line number2 index2 alt1">`        ``$.fn.shuffle = ``function``() {`</div><div class="line number3 index3 alt2"> </div><div class="line number4 index4 alt1">`            ``var` `allElems = ``this``.get(),`</div><div class="line number5 index5 alt2">`                ``getRandom = ``function``(max) {`</div><div class="line number6 index6 alt1">`                    ``return` `Math.floor(Math.random() * max);`</div><div class="line number7 index7 alt2">`                ``},`</div><div class="line number8 index8 alt1">`                ``shuffled = $.map(allElems, ``function``(){`</div><div class="line number9 index9 alt2">`                    ``var` `random = getRandom(allElems.length),`</div><div class="line number10 index10 alt1">`                        ``randEl = $(allElems[random]).clone(``true``)[0];`</div><div class="line number11 index11 alt2">`                    ``allElems.splice(random, 1);`</div><div class="line number12 index12 alt1">`                    ``return` `randEl;`</div><div class="line number13 index13 alt2">`                ``});`</div><div class="line number14 index14 alt1"> </div><div class="line number15 index15 alt2">`            ``this``.each(``function``(i){`</div><div class="line number16 index16 alt1">`                ``$(``this``).replaceWith($(shuffled[i]));`</div><div class="line number17 index17 alt2">`            ``});`</div><div class="line number18 index18 alt1"> </div><div class="line number19 index19 alt2">`            ``return` `$(shuffled);`</div><div class="line number20 index20 alt1"> </div><div class="line number21 index21 alt2">`        ``};`</div><div class="line number22 index22 alt1">`        ``$(``'#slideshow-header div'``).shuffle();`</div><div class="line number23 index23 alt2">`        ``$(``"#slideshow-header > div:gt(0)"``).hide();`</div><div class="line number24 index24 alt1"> </div><div class="line number25 index25 alt2">`        ``setInterval(``function``() {`</div><div class="line number26 index26 alt1">`            ``$(``'#slideshow-header > div:first'``)`</div><div class="line number27 index27 alt2">`                ``.fadeOut(1000)`</div><div class="line number28 index28 alt1">`                ``.next()`</div><div class="line number29 index29 alt2">`                ``.fadeIn(1000)`</div><div class="line number30 index30 alt1">`                ``.end()`</div><div class="line number31 index31 alt2">`                ``.appendTo(``'#slideshow-header'``);`</div><div class="line number32 index32 alt1">`        ``},  10000);`</div><div class="line number33 index33 alt2">`    ``});`</div><div class="line number34 index34 alt1">`</script>`</div></div></td></tr></tbody></table>

</div></div></div></div><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-id="7f85a1ef-2387-40fd-a9b4-a9103778ab02" data-macro-name="code" id="bkmrk-default-style-templa"><div class="codeHeader panelHeader pdl hide-border-bottom">**Default Style Template**<span class="collapse-source expand-control"><span class="expand-control-icon icon expanded"> </span></span></div><div class="codeContent panelContent pdl hide-toolbar show-border-top"><div><div class="syntaxhighlighter sh-rdark css expanded" id="bkmrk-%C2%A0-1-2-3-4-5-6-7-8-9--1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number0 index0 alt1 break"> </div><div class="line number1 index1 alt2">1</div><div class="line number2 index2 alt1">2</div><div class="line number3 index3 alt2">3</div><div class="line number4 index4 alt1">4</div><div class="line number5 index5 alt2">5</div><div class="line number6 index6 alt1">6</div><div class="line number7 index7 alt2">7</div><div class="line number8 index8 alt1">8</div><div class="line number9 index9 alt2">9</div><div class="line number10 index10 alt1">10</div><div class="line number11 index11 alt2">11</div><div class="line number12 index12 alt1">12</div><div class="line number13 index13 alt2">13</div><div class="line number14 index14 alt1">14</div><div class="line number15 index15 alt2">15</div><div class="line number16 index16 alt1">16</div><div class="line number17 index17 alt2">17</div><div class="line number18 index18 alt1">18</div><div class="line number19 index19 alt2">19</div><div class="line number20 index20 alt1">20</div><div class="line number21 index21 alt2">21</div><div class="line number22 index22 alt1">22</div><div class="line number23 index23 alt2">23</div><div class="line number24 index24 alt1">24</div><div class="line number25 index25 alt2">25</div><div class="line number26 index26 alt1">26</div><div class="line number27 index27 alt2">27</div><div class="line number28 index28 alt1">28</div><div class="line number29 index29 alt2">29</div><div class="line number30 index30 alt1">30</div><div class="line number31 index31 alt2">31</div><div class="line number32 index32 alt1">32</div><div class="line number33 index33 alt2">33</div><div class="line number34 index34 alt1">34</div><div class="line number35 index35 alt2">35</div><div class="line number36 index36 alt1">36</div><div class="line number37 index37 alt2">37</div><div class="line number38 index38 alt1">38</div><div class="line number39 index39 alt2">39</div><div class="line number40 index40 alt1">40</div><div class="line number41 index41 alt2">41</div><div class="line number42 index42 alt1">42</div></td><td class="code"><div class="container" title="Hint: double-click to select code"><div class="line number0 index0 alt1 break">`<style>`</div><div class="line number1 index1 alt2">`  ``body {`</div><div class="line number2 index2 alt1">`    ``background``: ``black` `url``(/uploads/FILES/OC_TOMA/parking-deck.jpg) ``center` `center``;`</div><div class="line number3 index3 alt2">`    ``background-``size``: cover;`</div><div class="line number4 index4 alt1">`    ``background-attachment``: ``fixed``;`</div><div class="line number5 index5 alt2">`    ``color``: ``#FFF``;`</div><div class="line number6 index6 alt1">`  ``}`</div><div class="line number7 index7 alt2">`  ``.card, .modal, .list-group-item {`</div><div class="line number8 index8 alt1">`    ``color``: ``#333``;`</div><div class="line number9 index9 alt2">`  ``}`</div><div class="line number10 index10 alt1">`  ``.slideshow-header {`</div><div class="line number11 index11 alt2">`    ``position``:``relative``;`</div><div class="line number12 index12 alt1">`  ``}`</div><div class="line number13 index13 alt2">`  ``.slideshow-header .slides {`</div><div class="line number14 index14 alt1">`    ``z-index``: ``0``;`</div><div class="line number15 index15 alt2">`    ``position``:``absolute``;`</div><div class="line number16 index16 alt1">`    ``top``:``0px``;`</div><div class="line number17 index17 alt2">`    ``left``:``0px``;`</div><div class="line number18 index18 alt1">`    ``right``:``0px``;`</div><div class="line number19 index19 alt2">`    ``bottom``:``0px``;`</div><div class="line number20 index20 alt1">`    ``display``:flex;`</div><div class="line number21 index21 alt2">`    ``align-items: ``center``;`</div><div class="line number22 index22 alt1">`    ``justify-``content``: ``center``;`</div><div class="line number23 index23 alt2">`  ``}`</div><div class="line number24 index24 alt1">`  ``.slideshow-header .overlay {`</div><div class="line number25 index25 alt2">`    ``z-index``: ``1``;`</div><div class="line number26 index26 alt1">`    ``position``:``relative``;`</div><div class="line number27 index27 alt2">`  ``}`</div><div class="line number28 index28 alt1">`  ``#slideshow-header {`</div><div class="line number29 index29 alt2">`    ``overflow``: ``hidden``;`</div><div class="line number30 index30 alt1">`    ``opacity:``0.8``;`</div><div class="line number31 index31 alt2">`    ``box-shadow: ``0` `0` `20px` `rgba(``0``, ``0``, ``0``, ``0.4``);`</div><div class="line number32 index32 alt1">`  ``}`</div><div class="line number33 index33 alt2"> </div><div class="line number34 index34 alt1">`  ``#slideshow-header > div {`</div><div class="line number35 index35 alt2">`    ``width``:``100%``;`</div><div class="line number36 index36 alt1">`    ``position``: ``absolute``;`</div><div class="line number37 index37 alt2">`  ``}`</div><div class="line number38 index38 alt1"> </div><div class="line number39 index39 alt2">`  ``#slideshow-header div img {`</div><div class="line number40 index40 alt1">`    ``width``: ``100%``;`</div><div class="line number41 index41 alt2">`  ``}`</div><div class="line number42 index42 alt1">`</style>`</div></div></td></tr></tbody></table>

</div></div></div></div><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-id="af804e06-34ed-4274-bf51-205e34a144ce" data-macro-name="code" id="bkmrk-default-header-templ"><div class="codeHeader panelHeader pdl hide-border-bottom">**Default Header Template**<span class="collapse-source expand-control"><span class="expand-control-icon icon expanded"> </span></span></div><div class="codeContent panelContent pdl hide-toolbar show-border-top"><div><div class="syntaxhighlighter sh-rdark xml expanded" id="bkmrk-%C2%A0-1-2-3-4-5-6-7-8-9--2"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number0 index0 alt1 break"> </div><div class="line number1 index1 alt2">1</div><div class="line number2 index2 alt1">2</div><div class="line number3 index3 alt2">3</div><div class="line number4 index4 alt1">4</div><div class="line number5 index5 alt2">5</div><div class="line number6 index6 alt1">6</div><div class="line number7 index7 alt2">7</div><div class="line number8 index8 alt1">8</div><div class="line number9 index9 alt2">9</div><div class="line number10 index10 alt1">10</div></td><td class="code"><div class="container" title="Hint: double-click to select code"><div class="line number0 index0 alt1 break">`<``div` `class``=``"text-center slideshow-header"``>`</div><div class="line number1 index1 alt2">`  ``<``div` `class``=``"slides"` `id``=``"slideshow-header"``>`</div><div class="line number2 index2 alt1">`    ``<``div``><``img` `src``=``"<a href="https://tomahawku.parkadmin.com/uploads/FILES/OC_TOMA/cp-downtown.jpg%22">https://tomahawku.parkadmin.com/uploads/FILES/OC_TOMA/cp-downtown.jpg"</a>` `/></``div``>`</div><div class="line number3 index3 alt2">`    ``<``div``><``img` `src``=``"<a href="https://tomahawku.parkadmin.com/uploads/FILES/OC_TOMA/cp-hospital.jpg%22">https://tomahawku.parkadmin.com/uploads/FILES/OC_TOMA/cp-hospital.jpg"</a>` `/></``div``>`</div><div class="line number4 index4 alt1">`    ``<``div``><``img` `src``=``"<a href="https://tomahawku.parkadmin.com/uploads/FILES/OC_TOMA/cp-postoffice.jpg%22">https://tomahawku.parkadmin.com/uploads/FILES/OC_TOMA/cp-postoffice.jpg"</a>` `/></``div``>`</div><div class="line number5 index5 alt2">`  ``</``div``>`</div><div class="line number6 index6 alt1">`  ``<``div` `class``=``"overlay"``>`</div><div class="line number7 index7 alt2">`    ``<``img` `alt``=``""` `class``=``"img-fluid"` `src``=``"/MEDIA/demo_extras/TomahawkUniversity_logo.png"` `style``=``"display:inline; width: 450px; margin-top: 80px; margin-bottom:80px;"``/>`</div><div class="line number8 index8 alt1">`  ``</``div``>`</div><div class="line number9 index9 alt2">`</``div``>`</div><div class="line number10 index10 alt1">`[user_menu]`</div></div></td></tr></tbody></table>

</div></div></div></div><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-id="696fc053-1a67-4886-bce0-fb2fe92e62f4" data-macro-name="code" id="bkmrk-default-footer-templ"><div class="codeHeader panelHeader pdl hide-border-bottom">**Default Footer Template**<span class="collapse-source expand-control"><span class="expand-control-icon icon expanded"> </span></span></div><div class="codeContent panelContent pdl hide-toolbar show-border-top"><div><div class="syntaxhighlighter sh-rdark xml expanded" id="bkmrk-%C2%A0-1-2-3-4-5-6-7-8-9--3"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number0 index0 alt1 break"> </div><div class="line number1 index1 alt2">1</div><div class="line number2 index2 alt1">2</div><div class="line number3 index3 alt2">3</div><div class="line number4 index4 alt1">4</div><div class="line number5 index5 alt2">5</div><div class="line number6 index6 alt1">6</div><div class="line number7 index7 alt2">7</div><div class="line number8 index8 alt1">8</div><div class="line number9 index9 alt2">9</div><div class="line number10 index10 alt1">10</div><div class="line number11 index11 alt2">11</div><div class="line number12 index12 alt1">12</div><div class="line number13 index13 alt2">13</div><div class="line number14 index14 alt1">14</div><div class="line number15 index15 alt2">15</div><div class="line number16 index16 alt1">16</div><div class="line number17 index17 alt2">17</div><div class="line number18 index18 alt1">18</div><div class="line number19 index19 alt2">19</div><div class="line number20 index20 alt1">20</div><div class="line number21 index21 alt2">21</div><div class="line number22 index22 alt1">22</div><div class="line number23 index23 alt2">23</div></td><td class="code"><div class="container" title="Hint: double-click to select code"><div class="line number0 index0 alt1 break">`<``div` `class``=``"bg-light text-dark"``>`</div><div class="line number1 index1 alt2">`    ``<``div` `class``=``"container py-3"``>`</div><div class="line number2 index2 alt1">`        ``<``div` `class``=``"row"``>`</div><div class="line number3 index3 alt2">`            ``<``div` `class``=``"col-sm"``>`</div><div class="line number4 index4 alt1">`                ``<``img` `class``=``"img-fluid mb-3 mb-md-0"` `src``=``"//assets.OPSCOM.com/images/opscom-logo-tagline-120.png"` `alt``=``"Operations Commander"` `/>`</div><div class="line number5 index5 alt2">`            ``</``div``>`</div><div class="line number6 index6 alt1">`            ``<``div` `class``=``"col-sm text-right"``>`</div><div class="line number7 index7 alt2">`                ``<``address``>`</div><div class="line number8 index8 alt1">`                    ``<``strong``>Tomahawk DEMO University</``strong``><``br` `/>`</div><div class="line number9 index9 alt2">`                    ``92 Bridge St., Carleton Place, ON<``br` `/>`</div><div class="line number10 index10 alt1">`                    ``K7C 2V3<``br` `/>`</div><div class="line number11 index11 alt2">`                    ``+1.855.410.4141<``br` `/>`</div><div class="line number12 index12 alt1">`                    ``<``a` `href``=``"mailto:info@ops-com.comcom"``>info@ops-com.comcom</``a``>`</div><div class="line number13 index13 alt2">`                ``</``address``>`</div><div class="line number14 index14 alt1">`            ``</``div``>`</div><div class="line number15 index15 alt2">`        ``</``div``>`</div><div class="line number16 index16 alt1">`        ``<``div` `class``=``"row"``>`</div><div class="line number17 index17 alt2">`            ``<``div` `class``=``"col text-center"``>`</div><div class="line number18 index18 alt1">`                ``<``p``>The <``em``>complete</``em``> parking and security management solution that links parking, violation and incident management collectively.</``p``>`</div><div class="line number19 index19 alt2">`                ``<``p``><``span` `style``=``"color:black;"``>Operations</``span``><``span` `style``=``"color:red;"``>Commander</``span``> (<``a` `href``=``"<a href="https://OPSCOM.com%22/">https://OPSCOM.com"</a>``>OPSCOM</``a``>) will <``strong``>AMPLIFY</``strong``>, <``strong``>AUTOMATE </``strong``>and <``strong``>ANALYZE </``strong``>your parking and security needs.</``p``>`</div><div class="line number20 index20 alt1">`            ``</``div``>`</div><div class="line number21 index21 alt2">`        ``</``div``>`</div><div class="line number22 index22 alt1">`    ``</``div``>`</div><div class="line number23 index23 alt2">`</``div``>`</div></div></td></tr></tbody></table>

</div></div></div></div>## Understanding Templates &amp; Design 

**Templates &amp; Designs** are the visual functionality of your web page structured around your **Page** content. OPSCOM provides you with default templates which allow you to get started easily without having to know any code.

- Once you are on the landing page for **Templates &amp; Design,** you can view a list of your current templates, or create a new one. **Templates** contain all of the sections found on your **User Portal** except for the **Page** content found in the middle of the page. To adjust this you will have to leave Templates &amp; Design and navigate to **System Messaging**.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/p7wimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/p7wimage.png)

- OPSCOM gives you a total of 12 section templates, 6 in English and 6 in French. (Of course, you will have to create the French content yourself as we do not provide a translator).

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/ZWOimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/ZWOimage.png)

1. Clicking on **Toggle Templates** will display all of the sections attached to that template. Templates can be created in English and French.
2. The contents of our pages are split into four separate sections. Header(1)**,** Content Header(2), Content Footer(4), and Footer(5). See **Template Layout** right below this guide to get a better understanding of the OPSCOM layout.
3. To edit a template **Section,** simply click **Edit** next to the section name.

### Template Layout

Below is a visual example of how your **Pages** are split into **Sections** using **Templates**. All of the Content (3) of our Pages are added through the **System Messages** under **Pages**.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/gJrimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/gJrimage.png)

1. **Header** - The header of your page, where you can find your header image and user navigation.
2. **Content\_Header** - Another header section for you to place content into, such as alerts or user information. Everything placed here will appear before the Content and Content Footer.
3. **Content** - The content of your pages. Content may not be added from Templates &amp; Design and will require you to navigate to **System Messaging**.
4. **Content\_Footer** - The footer of your Content. Everything placed here will appear after the Content Header and Content. Again, you can use this to display alerts, messages, or additional content to your Template.
5. **Footer** - The footer of your page is where you can find useful information. You can use this area to advertise important information your users might need while using your system.

## Page Layouts and Templates 

### Creating Layouts

To create a layout simply click the **Create Layout** button found at the top right of the **Layouts** page.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/mvtimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/mvtimage.png)

You will be presented with the **Add Layout** system message.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/ebMimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/ebMimage.png)

1. Provide the name of your layout. In this example, we are going to create our own Summer Layout to be used, instead of the default layout.
2. Click **Save Changes** when you are happy with the name of your layout. Once the **Layout** has been created, you can see it under the Layouts list.
3. If you wish to cancel the creation of your layout simply click **Close**.
4. You can see that our **Summer Layout** was added to the end of our Layouts List with no sections yet.
5. You can choose whether or not your template is the **Default** template at any time by clicking the **Non-Default** drop-down and selecting **Default**.
6. Anytime you add sections to your Templates it will display how many are attached next to **Toggle Templates**. As you can see, we don't have any **Sections** created yet so there are no numbers to be displayed, otherwise, clicking on **Toggle Templates** would show you a list of all the templates currently attached to that **Layout**.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/lNwimage.png)](https://opscom.wiki/uploads/images/gallery/2024-06/lNwimage.png)

 7. You can edit the layout name by clicking on the **Edit** button next to archive.

 8. If you would like to archive a layout that you are no longer using, you can click the **Archive** button next to edit.

### Creating Templates

Now that you have a better understanding of how **Templates** work with **Layouts** we can start creating our own.

[![image.png](https://opscom.wiki/uploads/images/gallery/2024-06/scaled-1680-/o02image.png)](https://opscom.wiki/uploads/images/gallery/2024-06/o02image.png)

1. Click on Toggle Templates.
2. Clicking this will display the available Templates attached to the **Summer Layout**.
3. You can now **Create** a variety of templates for your page, including bilingual support.
4. If you are non-technical, it is advised not to change the code for **Scripts, Styles, Header,** and **Footer Templates**. You can use the default Style, Script, Header, and Footer Templates from All Default Templates. These can still be edited according to your company and their style guides. See **Edit the Page Style** and **Edit the Page Behaviour** below for more information.

## Edit the Page Style (CSS) 

Important

This guide is used if you intend to adjust the **Templates** provided to you by OPSCOM. If you choose to rewrite your own Templates you can choose to ignore this.

<div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-id="b1a0c6ea-b942-4acc-ab21-1f431483d33f" data-macro-name="code" id="bkmrk-content-%2F%2A-style-pro"><div class="codeHeader panelHeader pdl">**Content**</div><div class="codeContent panelContent pdl"><div><div class="syntaxhighlighter sh-rdark nogutter  css" id="bkmrk-%2F%2A-style-properties-"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2">`/* Style properties of our page body, this affects the entire page. */`</div><div class="line number2 index1 alt1">`body {`</div><div class="line number3 index2 alt2">`    ``background``: ``black` `url``(/uploads/FILES/OC_TOMA/parking-deck.jpg) ``center` `center``;`</div><div class="line number4 index3 alt1">`    ``background-``size``: cover;`</div><div class="line number5 index4 alt2">`    ``background-attachment``: ``fixed``;`</div><div class="line number6 index5 alt1">`    ``color``: ``#FFF``;`</div><div class="line number7 index6 alt2">`}`</div><div class="line number8 index7 alt1"> </div><div class="line number9 index8 alt2">`/* This changes the color property of --Find where these classes are used `</div><div class="line number10 index9 alt1">`.card, .modal, .list-group-item {`</div><div class="line number11 index10 alt2">`    ``color``: ``#333``;`</div><div class="line number12 index11 alt1">`}`</div></div></td></tr></tbody></table>

</div></div></div></div><div class="code panel pdl conf-macro output-block" data-hasbody="true" data-macro-id="7e6909e2-7f5a-4b6a-95d5-796440c6c5eb" data-macro-name="code" id="bkmrk-slide-show-%2F%2A-below-"><div class="codeHeader panelHeader pdl">**Slide Show**</div><div class="codeContent panelContent pdl"><div><div class="syntaxhighlighter sh-rdark nogutter  css" id="bkmrk-%2F%2A-below-are-all-of-"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container" title="Hint: double-click to select code"><div class="line number1 index0 alt2">`/* Below are all of the styles for our header slideshow at the top of each page. */`</div><div class="line number2 index1 alt1">`/*--------------WORD BANK---------------`</div><div class="line number3 index2 alt2">` ``* ELEMENTS: Elements are the tags with '<>' around them such as <div> and <img> found in the default header and footer template.`</div><div class="line number4 index3 alt1">` ``* We access them here by giving them a Class name or ID.                                          `</div><div class="line number5 index4 alt2">` ``* PROPERTIES: Properties are used to define certain styles to a class or ID.`</div><div class="line number6 index5 alt1">` ``* CLASS: Generally used to assign a style to a group of HTML elements but can be used on single elements as well.`</div><div class="line number7 index6 alt2">` ``* They are assigned within HTML elements like this: <div class="MyClass"></div> where MyClass would be your class name.`</div><div class="line number8 index7 alt1">` ``* ID's: Generally used to assign styles to a single element but can be used on multiple elements as well.`</div><div class="line number9 index8 alt2">` ``*`</div><div class="line number10 index9 alt1">` ``*--------------CLASSES-----------------`</div><div class="line number11 index10 alt2">` ``*`</div><div class="line number12 index11 alt1">` ``* To learn more about the CSS Position Property see: <a href="https://www.w3schools.com/cssref/pr_class_position.asp">https://www.w3schools.com/cssref/pr_class_position.asp</a>`</div><div class="line number13 index12 alt2">` ``* For more information on CSS Syntax and Selectors see: <a href="https://www.w3schools.com/css/css_syntax.asp">https://www.w3schools.com/css/css_syntax.asp</a>`</div><div class="line number14 index13 alt1">` ``* It is not recommended to adjust with the position of elements unless you are sure about the changes being made. This can dramatically change how content is positioned. `</div><div class="line number15 index14 alt2">` ``*/`</div><div class="line number16 index15 alt1"> </div><div class="line number17 index16 alt2">`/* Class Names and Elements`</div><div class="line number18 index17 alt1">` ``* [.slideshow-header]: Container that contains our slides and overlay.`</div><div class="line number19 index18 alt2">` ``*`</div><div class="line number20 index19 alt1">` ``* Properties`</div><div class="line number21 index20 alt2">` ``* @position: Adjust the position of the slideshow-header. For more information see: <a href="https://www.w3schools.com/css/css_positioning.asp">https://www.w3schools.com/css/css_positioning.asp</a>`</div><div class="line number22 index21 alt1">` ``*/` </div><div class="line number23 index22 alt2">`.slideshow-header {`</div><div class="line number24 index23 alt1">`    ``position``:``relative``;`</div><div class="line number25 index24 alt2">`}`</div><div class="line number26 index25 alt1"> </div><div class="line number27 index26 alt2">`/* Class Names and Elements `</div><div class="line number28 index27 alt1">` ``* [.slideshow-header]: Container that contains our slides and overlay.`</div><div class="line number29 index28 alt2">` ``* [.slides]: Controls the style properties of the individual slides.`</div><div class="line number30 index29 alt1">` ``* `</div><div class="line number31 index30 alt2">` ``* Properties  `</div><div class="line number32 index31 alt1">` ``* @z-index: Adjust the stack placement of the [.slideshow-header] and [.slides] along the Z axis.`</div><div class="line number33 index32 alt2">` ``* @position: Define the position of the page. `</div><div class="line number34 index33 alt1">` ``* @top:Change in the position from the top of an element.`</div><div class="line number35 index34 alt2">` ``* @left: Change in the position from the left of an element.`</div><div class="line number36 index35 alt1">` ``* @right: Change in the position from the right of an element.`</div><div class="line number37 index36 alt2">` ``* @bottom: Change in the position from the bottom of an element.`</div><div class="line number38 index37 alt1">` ``* @display: Adjusts how the content is displayed on the page. See: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/display">https://developer.mozilla.org/en-US/docs/Web/CSS/display</a> and <a href="https://www.w3schools.com/css/css_display_visibility.asp">https://www.w3schools.com/css/css_display_visibility.asp</a>`</div><div class="line number39 index38 alt2">` ``* @align-items: Aligns the child elements of this PARENT element to be centered. For a visual example see: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/align-items">https://developer.mozilla.org/en-US/docs/Web/CSS/align-items</a>`</div><div class="line number40 index39 alt1">` ``* @justify-content: Defines how the space disturbed around the child elements. For a visual example see: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content">https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content</a>`</div><div class="line number41 index40 alt2">` ``*`</div><div class="line number42 index41 alt1">` ``* These are the style properties and values of the slideshow header and its individual slides.`</div><div class="line number43 index42 alt2">` ``*/`</div><div class="line number44 index43 alt1">`.slideshow-header .slides {`</div><div class="line number45 index44 alt2">`    ``z-index``: ``0``;`</div><div class="line number46 index45 alt1">`    ``position``:``absolute``;`</div><div class="line number47 index46 alt2">`    ``top``:``0px``;`</div><div class="line number48 index47 alt1">`    ``left``:``0px``;`</div><div class="line number49 index48 alt2">`    ``right``:``0px``;`</div><div class="line number50 index49 alt1">`    ``bottom``:``0px``;`</div><div class="line number51 index50 alt2">`    ``display``:flex;`</div><div class="line number52 index51 alt1">`    ``align-items: ``center``;`</div><div class="line number53 index52 alt2">`    ``justify-``content``: ``center``;`</div><div class="line number54 index53 alt1">`}`</div><div class="line number55 index54 alt2"> </div><div class="line number56 index55 alt1">`/* Class Names and Elements`</div><div class="line number57 index56 alt2">` ``* [.slideshow-header]: A container that contains our slides and overlay.`</div><div class="line number58 index57 alt1">` ``* [.overlay]:`</div><div class="line number59 index58 alt2">` ``*`</div><div class="line number60 index59 alt1">` ``* Properties`</div><div class="line number61 index60 alt2">` ``* @z-index: Used to layer elements. Elements with a higher z-index number will appear before elements that are lower.`</div><div class="line number62 index61 alt1">` ``* @position: Set the position property for the element. We recommend you do not adjust this property unless you have knowledge on how the changes will affect your page.`</div><div class="line number63 index62 alt2">` ``*`</div><div class="line number64 index63 alt1">` ``* These are the styles for the overlay, as well as additional properties for the slideshow-header.`</div><div class="line number65 index64 alt2">` ``*/` </div><div class="line number66 index65 alt1">`.slideshow-header .overlay {`</div><div class="line number67 index66 alt2">`    ``z-index``: ``1``;`</div><div class="line number68 index67 alt1">`    ``position``:``relative``;`</div><div class="line number69 index68 alt2">`}`</div><div class="line number70 index69 alt1"> </div><div class="line number71 index70 alt2">`/*--------------ID'S---------------*/`</div><div class="line number72 index71 alt1">`/* ID Names and Elements`</div><div class="line number73 index72 alt2">` ``* [#slideshow-header] is the container used to contain the images you have chosen for your header`</div><div class="line number74 index73 alt1">` ``*`</div><div class="line number75 index74 alt2">` ``* Properties`</div><div class="line number76 index75 alt1">` ``* @overflow:`</div><div class="line number77 index76 alt2">` ``* @opacity:`</div><div class="line number78 index77 alt1">` ``* @box-shadow: Create a box shadow for this element.`</div><div class="line number79 index78 alt2">` ``* EX: box-shadow: a, b, c, d(e, f, g, h); `</div><div class="line number80 index79 alt1">` ``*/`</div><div class="line number81 index80 alt2">`#slideshow-header {`</div><div class="line number82 index81 alt1">`    ``overflow``: <a href="https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/overflow">https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/overflow</a>`</div><div class="line number83 index82 alt2">`    ``opacity: <a href="https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity">https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity</a>`</div><div class="line number84 index83 alt1">`    ``box-shadow: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow">https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow</a>`</div><div class="line number85 index84 alt2">`}`</div><div class="line number86 index85 alt1">` ` </div><div class="line number87 index86 alt2">`/* ID Names and Elements`</div><div class="line number88 index87 alt1">` ``* [#slideshow-header] is the container used to contain the images you have chosen for your header`</div><div class="line number89 index88 alt2">` ``*`</div><div class="line number90 index89 alt1">` ``* Properties`</div><div class="line number91 index90 alt2">` ``* @width: 100% width will take of 100% of that element.`</div><div class="line number92 index91 alt1">` ``* @position:`</div><div class="line number93 index92 alt2">` ``*/`</div><div class="line number94 index93 alt1">`#slideshow-header > div {`</div><div class="line number95 index94 alt2">`    ``width``:``100%``;`</div><div class="line number96 index95 alt1">`    ``position``: ``absolute``;`</div><div class="line number97 index96 alt2">`}`</div><div class="line number98 index97 alt1">` ` </div><div class="line number99 index98 alt2">`/* ID Names and Elements`</div><div class="line number100 index99 alt1">` ``* [#slideshow-header]: is the container used to contain the images you have chosen for your header.`</div><div class="line number101 index100 alt2">` ``* [div]: Refers to our HTML elements.  `</div><div class="line number102 index101 alt1">` ``* [img]: Refers to our images in the slideshow. `</div><div class="line number103 index102 alt2">` ``* `</div><div class="line number104 index103 alt1">` ``* Properties`</div><div class="line number105 index104 alt2">` ``* @width: Defines the width of the images, divs and slideshow-header. A value of 100% will display the image across the entire page. `</div><div class="line number106 index105 alt1">` ``*/`</div><div class="line number107 index106 alt2">`#slideshow-header div img {`</div><div class="line number108 index107 alt1">`    ``width``: ``100%``;`</div><div class="line number109 index108 alt2">`}`</div></div></td></tr></tbody></table>

</div></div></div></div>## Edit the Page Behavior (Scripts) 

Disclaimer

Please review the list of supported scripting languages below. If a Javascript vendor is unverified it may break the functionality of your site.

<div class="confluence-information-macro confluence-information-macro-information conf-macro output-block" data-hasbody="true" data-macro-id="ec5d792b-4d4e-4332-a7c3-5e60d197634a" data-macro-name="info" id="bkmrk-%C2%A0verified-script-ven"><div class="confluence-information-macro-body"><div class="expand-container conf-macro output-block" data-hasbody="true" data-macro-id="5be4559a-5e3c-48ee-b55a-886957ba70b4" data-macro-name="expand" id="bkmrk-%C2%A0verified-script-ven-1" resolved=""><div class="expand-control" id="bkmrk-%C2%A0verified-script-ven-2"><span class="expand-control-icon icon expanded"> </span><span class="expand-control-text">Verified Script Vendors</span></div><div class="expand-content" id="bkmrk-bootstrap%C2%A0-jquery---">1. Bootstrap
2. jQuery - To fully customize the slideshow script that displays the slideshow found at the top of each page, you will need to know jQuery. You could choose to rewrite the slideshow script in whichever Javascript vendor that is verified.

</div></div></div></div>## API Integration

Additionally, you can use our API to integrate with pay stations and other devices that will allow you to grab useful information from your users.

# Form 11 Shortcodes

## Information

When issuing a Form 11, there are a number of shortcodes that can be placed in the template to auto-fill values relating to the violation.

The base short code is formatted like:

- **\[values show=violation.\_\_\_\_\_\]**

The blank value must be filled with a value to pull from the violation info.

For each nested value in the data packet, the packet name must be added as part of the variable name, each part separated by a period, with the variable to be output by the shortcode as the final part of the variable.

The packet itself is called by 'violation', and the name must be placed at the start of any value call.

### Violation Packet

The violation info packet is formatted like this example.

The values on the left are the variable names, the values on the right are the example values returned by this packet.

```json
{
    "ViolationID": 237,
    "SemPermitID": null,
    "Ticket": "TT-19026",
    "VehicleID": 5,
    "Spoiled": 0,
    "TicketType": 1,
    "Issued": "2024-07-17 16:11:00",
    "convNotice": null,
    "Due": "2024-07-27 16:11:00",
    "ViolationTypeID": -1,
    "Fine": "50.0000",
    "AdjustedFine": "20.0000",
    "Towing": "0.0000",
    "taxAmount": "0.0000",
    "Writer": 7,
    "LocationID": 10,
    "Comment": null,
    "TicketAppeal": null,
    "appealType": 0,
    "appealFormat": null,
    "AccessAdminID": 50,
    "ActionedPer": null,
    "Created": "2024-07-17 20:12:08",
    "AppealUserID": 0,
    "AppealProcessDate": null,
    "AppealAdminID": 0,
    "AppealComment": null,
    "AppealAdminComment": null,
    "AutoNotice": 0,
    "ProcessedByCollection": null,
    "SentToCollections": null,
    "PrivateComments": "",
    "DriveAway": 0,
    "UUID": null,
    "VioNotice": null,
    "latitude": null,
    "longitude": null,
    "Warning": null,
    "userid": null,
    "incidentID": null,
    "failToIdentify": null,
    "pin": "YL",
    "duplicate": null,
    "AdjustmentReason": null,
    "notices_count": 1,
  
    "user_info": {
            "UserID": 5,
            "studentNo": null,
            "employNo": "00800147",
            "username": "mashbury",
            "firstName": "Michael",
            "preferredname": null,
            "lastName": "Ashbury",
            "street": "688 Zaproxy Ridge",
            "city": "East Romaineburgh",
            "prov": 9,
            "postal": "K2G5B1",
            "email": "mash-bury@tomahawk.ca",
            "display_name": "Michael Ashbury",
            "account_no": "00800147",
            "prov_name": "Ontario",
    },
  
    "writer": {
            "AdminAccessID": 7,
            "Username": "admin",
            "DisplayName": "Administrator"
    },
  
    "vehicle": {
            "VehicleID": 5,
            "Active": 1,
            "Plate": "MASH",
            "Year": 1998,
            "TotalVio": 12,
            "TotalUnpaid": 2,
            "TotalWarning": 0,
            "vehicleAlert": true,
            "vin": "JNAMA43H9XGE50339",
            "electric_vehicle": false,
          
            "province": {
                    "ProvName": "West Virginia",
                    "ProvCode": "WV",
            },

            "make": {
                  "MakeName": "Toyota"
            },
            
            "colour": {
                  "ColourName": "Black"
            },
            
            "plate_type": {
                  "TypeName": " Passenger"
            }
        
            "vehicle_type": {
                  "TypeName": " Van"
            },
      
    },
  
    "location": {
            "LocationID": 10,
            "LocationName": "Hospital & Administration Building",
    },
  
    "details": {
            "ViolationsDetailID": 359,
            "ViolationID": 237,
            "Ticket": "TT-19026",
            "ViolationTypeID": 16,
            "LocationID": 10,
            "offenceFine": 50,
            "discountFlag": 1,
            "discountAmount": 20,
            "discountHours": 240,
          
            "type": {
                    "ViolationTypeID": 16,
                    "ViolationDescr": "No Parking Snow Route - Mandatory Towing",
                    "DefaultCost": 50,
                    "discountFlag": true,
                    "discountAmount": 20,
                    "discountHours": 240,
            }
    }
}
```

### Examples

An example shortcode is provided for each section. To return a specific value in the same section, replace the provided variable name with the sibling value wanted for output.

<table border="1" id="bkmrk-example-shortcode-de" style="border-collapse: collapse; width: 105.238%; height: 268.2px;"><colgroup><col style="width: 44.8211%;"></col><col style="width: 55.1789%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">**Example Shortcode**  
</td><td style="height: 29.8px;">**Description**  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.Ticket\]

</td><td style="height: 29.8px;">Returns the violation ticket number.  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.user\_info.username\]</td><td style="height: 29.8px;">Returns the username of the user the violation belongs to.  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.writer.DisplayName\]</td><td style="height: 29.8px;">Returns the display name of the admin who assigned the violation to the user.  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.vehicle.Plate\]</td><td style="height: 29.8px;">Returns the plate of the vehicle the violation was assigned to, if applicable.  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.vehicle.province.ProvName\]</td><td style="height: 29.8px;">Returns the province or state of the vehicle plate.  
</td></tr><tr><td>\[values show=violation.vehicle.colour.ColourName\]</td><td>Returns the colour of the vehicle.  
</td></tr><tr><td>\[values show=violation.vehicle.plate\_type.TypeName\]</td><td>Returns the plate type of the vehicle.</td></tr><tr><td>\[values show=violation.vehicle.vehicle\_type.TypeName\]</td><td>Returns the type of the vehicle.</td></tr><tr><td>\[values show=violation.vehicle.make.MakeName\]</td><td>Returns the make of the vehicle.</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.location.LocationName\]</td><td style="height: 29.8px;">Returns the name of the location the infraction happened.  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.details.0.Ticket\]</td><td style="height: 29.8px;">Returns the violation ticket number. Alternate value location.  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">\[values show=violation.details.0.type.ViolationDescr\]</td><td style="height: 29.8px;">Returns the violation type description.  
</td></tr></tbody></table>

# User Information Shortcodes

## Shortcodes

Shortcodes used to display user information.

Keep in mind that the shortcode descriptions are also on the email template page for lost passwords.

<table border="1" id="bkmrk-shortcode-descriptio" style="border-collapse: collapse; width: 85.119%; height: 178.8px;"><colgroup><col style="width: 32.7765%;"></col><col style="width: 67.2216%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">**Shortcode**  
</td><td style="height: 29.8px;">**Description**  
</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;"> \[user show="firstname"\]</td><td style="height: 29.8px;">The first name of the user account receiving the email or messaging. </td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;"> \[user show="lastname"\]</td><td style="height: 29.8px;">The last name of the user account receiving the email or messaging. </td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;"> \[user show="email"\]</td><td style="height: 29.8px;">The email address of the user account receiving the email or messaging. </td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;"> \[user show="username"\]</td><td style="height: 29.8px;">The username of the user account receiving the email or messaging. </td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;"> \[user show="salutation"\]</td><td style="height: 29.8px;">The salutation of the user account receiving the email or messaging. </td></tr></tbody></table>