loading table of contents...

6.3.3. Settings

Requirements

Editorial users must be able to adjust site behavior by editing content without the need to change the code base and redeploy the application. For example:

  • Enable/disable comments for a certain section or the whole site.

  • Set the number of dynamically determined related content items that are shown in an article detail view.

  • Configure the refresh interval for content included from an external live source.

Administrative users must be able to adjust more technical settings through content, for example:

  • Manage API keys for external services

  • Image rendering settings

  • Localization of message bundles

Solution

CoreMedia Blueprint uses Markup properties following the CoreMedia Struct XML grammar to store settings. Struct XML offers flexible ways to conveniently store typed key-value pairs where the keys are Strings and the values can be any of the following: String, Integer, Boolean, Link, Struct (allows for nested sub Structs). For more information on the Structs and CoreMedia Struct XML please see the chapter Structs in the [CoreMedia Unified API Developer Manual]

Settings can be defined on all content types inheriting from CMLinkable.

localSettings
UI-Name Local Settings
Description The settings defined specifically on this CMLinkable.
linkedSettings
UI-Name Linked Settings
Description A list of reusable CMSettings documents that contain a bundle of settings.

Table 6.10.  Properties of CMLinkable for Settings Management


The local settings are easiest to edit. However, if you want to share common settings across multiple contents, you should spend the few extra steps to put them into a separate Settings document and add it to the linked settings in order to facilitate maintenance and ensure consistency. Some projects make use of settings quite extensively. Multiple Settings documents are a good instrument to structure settings of different aspects. You can still override single settings in the local settings, which have higher precedence.

The application also considers settings of the content's page context. If you declare a setting in a page, it is effective for all contents rendered in the context of this page. Settings are inherited down the page hierarchy, so especially settings of the root page are effective for the whole site, unless they are overridden in a subpage or a content.

For more detailed information and customization of the settings lookup strategy see Section 4.3.1.2, “The Settings Service” and the SettingsService related API documentation.

Settings as Java Resource Bundles

In a typical web application there is the need to separate text messages (such as form errors or link texts) from the rendering templates as well as rendering them according to a certain locale. The Spring framework provides a solution for these needs by the concepts of org.springframework.context.MessageSource for retrieving localized messages and by org.springframework.web.servlet.LocaleResolver for retrieving the current locale. Certain JSP tags such as <form:error%gt; or <spring:message> are built on top of these concepts.

In CoreMedia Blueprint, localized messages are stored as settings in Structs as described above and can be accessed as java.util.ResourceBundle instances.

A handler interceptor (com.coremedia.blueprint.cae.web.i18n.ResourceBundleInterceptor) is used to make these content backed messages (as well as the current locale) available to the rendering engine: They are extracted from the content and passed to a special Spring MessageSource, the RequestMessageSource by storing it in the current request. As a consequence, using JSP tags like <spring:message>, <form:error> or <fmt:message> will transparently make use of these messages.