Templating functions perform typical templating tasks such as creating
links and navigating content. This page explains where you can use
templating functions and how to create your own.
Function sets
Templating functions are grouped into sets according to their purpose:
Use templating functions in template scripts for common tasks such as
navigating content. You typically pass
arguments
to a function and
get
an object in return. You can assign the returned object to a variable
to process it further.
Example: Getting a page title with the cmsfn.contentByPath function
In this example we use the
contentByPath
function in a Freemarker script. We pass the path /hello to the
function as an argument. At the path is a page named hello. The
function returns a
ContentMap
object that represents the page node and its properties. We assign the
ContentMap to the myPage variable. ContentMap provides easy access to
a node’s properties. We use the title method to retrieve the page
title and render it on the page.
You can also use templating functions in Java classes. This is useful
when you write your own templating functions or want to use the existing
functions in a model class.
Example: Injecting TemplatingFunctions into a model class and
creating a link to the site root page
Line 5: Inject a TemplatingFunctions object in the constructor. All
Magnolia templating functions can be injected. WARNING: Never
instantiate a templating function class directly.
This example introduces a custom function set examplesfn. It provides
a function getRandomNumber which returns a random integer.
publicclassMyCustomTemplatingFunctions{
publicstaticfinal String examplesFunctionsName = "examplesfn";
private Random random;
publicMyCustomTemplatingFunctions(){
random = new Random();
}
/**
* Returns a random Integer in the range of given min and max value.
*/public Integer getRandomNumber(int min, int max){
int randomNum = random.nextInt((max - min) + 1) + min;
return randomNum;
}
}Copy
Configure the functions in a renderer
A renderer executes a template script and
evaluates any templating functions in it. Every templating function must
therefore be configured as a context attribute in the renderer.
In order to use your own templating functions with the default
info.magnolia.rendering.renderer.FreemarkerRenderer,
register the functions in the Freemarker
renderer configuration. The Freemarker renderer is configured in
/modules/rendering/renderers/freemarker.
Any module can register templating functions. Magnolia adds the
functions to the Freemarker renderer configuration during module
installation. When you add a module that registers functions to your
webapp bundle, the functions become available to your template scripts.
Similarly, if you want to use standard Magnolia function sets such as
cmsfn in your custom renderer, register them in your renderer
configuration.
In this example, we assume the Site module is installed. We enable the
custom function class MyCustomTemplatingFunctions in both freemarker
and site renderers. Use
info.magnolia.rendering.module.setup.InstallRendererContextAttributeTask
in the module version handler class of your custom module to add the
function configuration to the renderers:
After module installation both renderers are configured with the custom
functions.
Enable instantiation by IoC
Magnolia uses
Dependency
injection and inversion of control. Context attributes such as
templating functions configured in a renderer are instantiated via IoC
in info.magnolia.rendering.context.RenderingContext.
To enable instantiation, make sure your templating function class has a
public constructor and register the class as a component in a module
descriptor.