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.

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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 

$webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") 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.

${ctx.aggregationState.channel.name}
${ctx.getAggregationState().getChannel().getName()}

content

Current content node in the rendering context provided as a 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>

def

Current 

$webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") RenderableDefinition
. Use def to access the properties of the template definition such as title, or 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]

model

A JavaBean created by the renderer based on the model class defined in the template definition(warning) Not every template defines a model class. If no model is defined no bean is created and its reference is null.

Every model class must implement the 

$webResourceManager.requireResource("info.magnolia.sys.confluence.artifact-info-plugin:javadoc-resource-macro-resources") RenderingModel
 interface which provides bean properties for:

A model can be implemented as a Java class by implementing RenderingModel, or - since Magnolia 5.5.6 - a Model can 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

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


Example: Asking a model for a URL and a title, then building a link.

[#assign linkURL = model.url!]
[#assign linkText = model.title!]
 
<a href="${linkURL}">${linkText}</a>

action

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 ContextIt is a WebContext when the script is executed from a Web page and SimpleContext for instance when the script generates a mail from within a workflow or scheduled job.

The Context interface provides access to:

  • user (User)
  • locale (java.util.Locale)

    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, WebContext provides access to:

Any attributes (request, session or application scoped) listed under config:server/rendering/engine/protectedAttributes are not exposed (unconfigured attributes default to that list). You can customize the list by importing and adjusting the default config.server.rendering.engine.protectedAttributes.yaml.

config.server.rendering.engine.protectedAttributes.yaml
'protectedAttributes':
  'servletContext': 'servletContext'
  'javax.security.auth.Subject': 'javax.security.auth.Subject'
  'com.vaadin.server.VaadinSession.Admincentral': 'com.vaadin.server.VaadinSession.Admincentral'

WebContext properties are null if the execution is not a Web page request.

Example: Getting a search query from a request parameter.

[#assign queryStr = ctx.getParameter('queryStr')!?html]

state

The current AggregationState. Only set if ctx is of type WebContext. (See above.) It is a shortcut for ctx.aggregationState.

Provides access to many properties as:

  • channel (Channel)
  • originalURI
  • currentURI
  • queryString
  • mainContentNode (javax.jcr.Node)
  • templateName
  • locale (the same as ctx.locale)
  • etc.

Read the javadoc (AggregationState) for all the 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 (MessagesWrapper) to retrieve translated keys of a message bundle according to the current java.util.Locale.

Use it to internationalize labels which are not stored in content. (See template labels). 

Example: 

i18n["link.readon"]

Example in freemarker:

i18n["link.readon"]

Usage in a JavaScript model:

var localizedText = i18n.translate("link.readon");

  • No labels