The 5.7 branch of Magnolia reached End-of-Life on December 31, 2023, as specified in our End-of-life policy. This means the 5.7 branch is no longer maintained or supported. Please upgrade to the latest Magnolia release. By upgrading, you will get the latest release of Magnolia featuring significant improvements to the author and developer experience. For a successful upgrade, please consult our Magnolia 6.2 documentation. If you need help, please contact info@magnolia-cms.com.

A template definition gives a template a name and makes it available to the system. At a minimum a template definition must specify a script and a renderer. You can configure a template in a YAML file or a JCR node.

Template definition types

Magnolia has three types of template definitions:

The Magnolia CLI offers the create-page and create-component commands that automatically create basic scripts, template definitions and dialog definitions.

Common template properties

Simple template definition:

/my-module/templates/pages/home.yaml
renderType: freemarker 
templateScript: /my-module/templates/pages/home.ftl
dialog: my-module:pages/homePageProperties
class: com.example.templates.CustomTemplateDefinition
modelClass: com.example.templates.HomePageModel
Node nameValue

 
home


 
class

com.example.templates.CustomTemplateDefinition

 
dialog

my-module:pages/homePageProperties

 
modelClass

com.example.templates.HomePageModel

 
renderType

freemarker

 
templateScript

/my-module/templates/pages/home.ftl

You can use common template properties in pagearea and component definitions. Each template type has its own specific properties too.

renderType

required

Renderer to use. Magnolia supports freemarker and jsp renderers by default.

If you have the Site module you can set renderType=site, then define a common templateScript in the template prototype to use on all pages of the site.

You can also create a custom renderer.

templateScript

required

Path to the template script as /<module>/templates/<type>/<file>.<ext> format. See Resources for more about script storage locations.

dialog

optional

Dialog definition ID in <module-name>:<path to dialog definition> format.

The ID has two parts, separated by a colon:

  1. <module-name> : The name of the module which contains the dialog definition.
  2. <path>: Relative path to the dialog definition inside dialogs root item. For example the dialog ID my-module:pages/homePageProperties either points to the YAML file $magnolia.home/my-module/dialogs/homePageProperties.yaml or to the JCR node /modules/my-module/dialogs/homePageProperties in the configuration workspace.
i18nBasename

optional

title

optional

Title of the template displayed to editors. The value can be literal or retrieved from a message bundle (which is defined in i18nBasename) with a key. Use alphanumeric characters in literal values.

Displayed in:

  • Pages: Template dropdown in the Pages app.
  • Areas: Area toolbar in the page editor.
  • Components: Component toolbar in the page editor.
description

optional

Template description displayed to editors. The value can be literal or retrieved from the message bundle (specified by i18nBasename) with a key.

class

optional

The fully-qualified class name for the Java bean representing the definition data of this item. The default class is

$webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") TemplateDefinition
.

Only set the value when using custom definition class. Example: com.example.templates.CustomTemplateDefinition.

modelClass

optional

A model class that contains business logic for the template. The model class needs to implement the

$webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") RenderingModel
interface. The renderer creates a bean based on the modelClass. Current content, definition and the parent model are passed to the constructor. This object is instantiated for each rendering of a page or component.

A Groovy model class can be referenced from a YAML template definition. 

Current limitations:

  • A Groovy model cannot be supplied as a file, you can only reference a Groovy model stored in JCR. (See the Groovy module.)
  • The reference path cannot include the hyphen character.

Value:

  • Java models: Fully-qualified class name. Example: com.example.templates.HomePageModel.
  • Groovy models: Path to the model using dot notation such as myModule.templates.components.LinkModel.
parameters

optional

Custom template properties that you can access from a script without having to write a class.

extends

optional, in JCR node configuration only

variations

optional

Custom template properties

Use a parameters item in any template definition to add custom properties without having to write a custom class. Access the properties from your script using the def.parameters.<parameter-name> notation. See def.

parameters:
  example: my-value
Node nameValue

 
<template name>


 
parameters


 
example

my-value

To access the example parameter in a Freemarker script, use:

${def.parameters.example!}

Referencing templates

Other configuration nodes can reference templates. The property used in the referencing configuration depends on the mechanism that is used. 

Referencing templates with id property 

The template id property is used for:

Example: main area definition referencing the MTK's textImage and linkList components in the availableComponents node. 

my-module/templates/pages/myTemplate
templateScript: /my-module/templates/pages/my-template.ftl
renderType: freemarker
areas:
  main:
    availableComponents: 
      textImage:
        id: mtk:components/textImage
      linkList:
        id: mtk:components/linkList
Node nameValue

 
my-module


 
templates


 
pages


 
areas


 
main


 
availableComponents


 
textImage


 
id

mtk:components/textImage

 
linkList


 
id

mtk:components/linkList

Properties:

id

required

ID of the template definition in <module name>:<path to page definition> format.

The ID has two parts separated by a colon:

  • <module-name> : Name of the module which contains the template definition.
  • <path>: Relative path to the template definition inside the templates folder. For example, the page ID my-module:pages/home either points to a YAML file $magnolia.resources.dir/my-module/templates/pages/home.yaml or to a JCR node /modules/my-module/templates/pages/home in the config workspace.

You can reference templates from any module

The id property is not a general property. It can only be used when it is supported by the referencing configuration.

Referencing templates using path

Various Magnolia mechanisms use the path to the template definition to reference templates. These mechanisms allow you to reuse configurations:  

  • Include mechanism: Is used in YAML definitions to include a referenced file. The Magnolia-specific !include directive uses the absolute path to reference the file.
  • Extends mechanism: Is used in JCR node configuration to extend another configuration. The extends property references the source configuration by its path. The target configuration inherits everything from the source and adds its own exceptions.
  • Definition decoration mechanism: Allows you to alter existing configured items, such as apps, dialogs, field types, templates and more.