Rendering context objects provide direct access to important Magnolia
classes from a template script. You can get information such as the
current template, user and request through these objects. Rendering
content objects are set in
info.magnolia.rendering.renderer.AbstractRenderer and its
child classes.
Most context objects are
JavaBeans, which means you can
access their properties with the dot operator or a getter method in
a template script. Both expressions are valid and return the same value.
Current content node in the rendering context provided as
info.magnolia.jcr.util.ContentMap.
In a page template, current node is the page node (mgnl:page). In a
component template, current node is the component node
(mgnl:component). It is the contextual root content node. The
current node is exposed as a
ContentMap
object, which means it carries the properties of the underlying
Node.
Example: Rendering a page title. Here the current node is a page node.
<h1>${content.title!""}</h1>Copy
def
Current
info.magnolia.rendering.template.RenderableDefinition.
Use def to access the properties of the template definition such as
title or use custom parameters. It is
a JavaBean, which means you can access its properties with the dot
operator or a getter method.
Example: Getting a CSS class name from
custom parameters and assigning it
to a variable.
[#assign cssClass=def.parameters.cssClass]Copy
model
A JavaBean created by the renderer based on the model class defined in
the template definition.
Every model class must implement the
info.magnolia.rendering.model.RenderingModel interface.
Not every template defines a model class. If no model is defined, no bean
will be created and its reference will be null.
A model can be implemented as a Java class by implementing
info.magnolia.rendering.model.RenderingModel. Since
Magnolia 5.5.6, a model can also be written in JavaScript (see
JavaScript Models
module).
The model itself provides the following built-in properties:
parent: Model of the parent component or template.
root: Top root model of the rendering process.
content: Content node bound to the model in the rendering context
provided as a
ContentMap.
node: Content node bound to the model in the rendering context
provided as a
Node.
definition: The renderable definition (template, area or component)
bound to the model. Same as def.
These properties can referenced like this:
model.root
model.node
Copy
The probably most handy property is parent. Parent points to the
parent model, its meaning depends on the case. If you have for instance
a component template with a model and a page template with a model - the
parent model of the component template is the model of the page
template. Via parent you can access all built in properties of the
parent model like this:
model.parent.definition
model.parent.content
Copy
Example: Asking a model for a URL and a title, then building a link.
There’s no reason to use content properties of a model (model.content, model.parent.content, and so on).
The correct and secure way to render content in templating is through ${content…}.
The info.magnolia.rendering.renderer.AbstractRenderer makes sure that content nodes are always wrapped using the wrapNodeForTemplate method for their exposure in template scripts.
A String returned by the execute() method of the model class. Can be
used for logic that has to be executed before rendering, when rendered
output depends on the result of the logic, for example form field
validation before rendering the field.
ctx
Context represents the environment in which the current process runs.
The type is info.magnolia.context.Context. It is
info.magnolia.context.WebContext when the script is
executed from a Web page and info.magnolia.context.SimpleContext,
for instance, when the script generates a mail from within a workflow or scheduled job.
The info.magnolia.context.Context interface provides
access to:
Please note that ${ctx.locale} is different from
${cmsfn.language()}, the former referring to the locale currently used
by the user, the latter to the locale currently used by the site. See
also
AdminCentral
and public locales.
In addition, info.magnolia.context.WebContext provides
access to:
This property returns the node (of type Node) that contains the main content. For example, if a child node inherits content from another component and state.mainContentNode was applied to the child node, it is the child node’s main content that would be returned.
A use case for this is shown below. Since the type returned by state.mainContentNode is Node, the function cmsfn.asContentMap converts that node to a ContentMap, providing access to its properties. Finally, the cmsfn.page function returns the page to which the content belongs.
Check out info.magnolia.cms.core.AggregationState for all properties.
Please note that the values of all the properties are HTML-escaped by
default. Should you need it, the raw (unescaped) data can still be
accessed in the following manner:
${state.unwrap().originalURI}
However, be warned that this may expose your webapp to XSS attacks.
i18n
A message bundle wrapper
(info.magnolia.freemarker.MessagesWrapper) to retrieve
translated keys of a
message bundle
according to the current
java.util.Locale.
Use it to internationalize labels that are not stored in content (see
template
labels). For example: