Skip to main content

Metadata Fields in Cascade

Cascade CMS includes a set of built-in metadata fields available on every asset, as well as support for custom fields you can define per metadata set. Understanding each field helps you build effective content workflows and publishing rules.

Built-in Metadata Fields

The following fields are included with every Cascade CMS asset by default. The first seven fields — from Display Name through Author — are free-form text fields.

Field Description
Display Name Commonly the short name of the asset title. Used as a breadcrumb link or site map reference. When filled out, it overrides the system name in asset links throughout the interface.
Title The title of the asset. Often used as the page <title> or heading in templates.
Summary A brief synopsis of the asset's content.
Teaser A short, enticing phrase about the asset. Useful for listing pages or content feeds where a hook is needed.
Keywords Words or phrases describing the asset, typically used to populate a <meta name="keywords"> tag.
Description A description of the asset. Commonly mapped to <meta name="description"> for SEO.
Author The person or organization responsible for the asset's content.
Review Date An optional date/time field specifying when the asset's content should be reviewed. Informational only — does not trigger any automated publishing behavior.
Start Date An optional date/time field specifying when an asset should go live. Until this date, the asset will not be eligible for indexing or publishing. Once reached, it will be published to all enabled Destinations configured to be checked by default.
End Date An optional date/time field specifying when content should no longer be public. At this date, the asset is moved to the Expiration Folder (if set), publishing and indexing are disabled, and an expiration warning is sent to the last modifier (or creator if that user no longer exists). Warning email timing is configurable in System Preferences.
Expiration Folder An optional folder selector that determines where an asset is moved when it reaches its End Date. If the site has Unpublish assets when they are moved to an expiration folder enabled in Site Settings, assets will be automatically unpublished when moved.

Tip

Using Start Date and End Date together is a great way to automate time-sensitive content like events, promotions, or announcements without manual intervention.

Custom (or Dynamic) Metadata

In addition to built-in fields, you can define custom metadata fields within a metadata set. These fields are especially effective for allowing content authors to categorize content and enabling templates to filter or display assets dynamically.

The following custom field types are available:

  • Text — A free-form text input.
  • Date-time — A date and time picker.
  • Dropdown — A select menu with predefined options; supports a preset default value.
  • Radio buttons — Mutually exclusive options; supports a preset default value.
  • Checkboxes — One or more selectable options; supports a preset default value.
  • Multiselect — A list allowing multiple selections; supports a preset default value.

Each custom field shares a common set of configuration options:

Option Description
Name The internal identifier used in XML output. Cannot contain spaces.
Field Label The visible label shown to content authors during editing. Can differ from the Name.
Help Text Optional instructions displayed to authors explaining the field's purpose or expected input.
Visibility Controls where the field appears: Inline (in the content editor), Visible (in the metadata panel), or Hidden (not shown to authors).
Required Forces authors to enter a value before the asset can be saved.
Default Value An optional preset value. Available on Dropdown, Radio, Checkbox, and Multiselect fields.

Accessing Custom Metadata Fields in Velocity

Custom, or Dynamic, Metadata Fields are reached differently depending on whether you are working from an Index Block or from the Cascade API.

With the XPath Tool

From an Index Block, target the field name in your XPath:

Velocity
#set ($category = $_XPathTool.selectSingleNode($contentRoot, "//calling-page/system-page/dynamic-metadata[name='category']/value"))

#if (!$_PropertyTool.isNull($category))
    $category.value
#end

Or for a multi-value field:

Velocity
#set ($categories = $_XPathTool.selectNodes($contentRoot, "//calling-page/system-page/dynamic-metadata[name='categories']/value"))

#if (!$_PropertyTool.isNull($categories) && $categories.size() > 0)
  #foreach ($category in $categories)
    $category.value
  #end
#end

With the Cascade API

Use .getDynamicField():

Velocity
#set ($category = $currentPage.metadata.getDynamicField('category'))

#if (!$_PropertyTool.isNull($category))
    $category.value
#end

Or for a multi-value field:

Velocity
#set ($categories = $currentPage.metadata.getDynamicField('categories'))

#if (!$_PropertyTool.isNull($categories) && $categories.values.size() > 0)
    #foreach ($category in $categories.values)
        $category
    #end
#end

Reading labels as well as values

For a multi-value field you can reach both the possible items and the selected items, each carrying a label and a value. Referencing label is useful when you need to change how a field item is presented without touching the values stored in existing content:

Velocity
#set ($possibleCategories = $currentPage.metadata.getDynamicField('categories').getPossibleFieldItems())
#set ($selectedCategories = $currentPage.metadata.getDynamicField('categories').getSelectedFieldItems())

Possible categories:
#if (!$_PropertyTool.isNull($possibleCategories))
    #foreach ($category in $possibleCategories)
        $category.label - $category.value
    #end
#end

Selected categories:
#if (!$_PropertyTool.isNull($selectedCategories))
    #foreach ($category in $selectedCategories)
        $category.label - $category.value
    #end
#end