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:
#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:
#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():
#set ($category = $currentPage.metadata.getDynamicField('category'))
#if (!$_PropertyTool.isNull($category))
$category.value
#end
Or for a multi-value field:
#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:
#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