Template: header
Template: markdown

YAML types

One of Amagaki’s unique concepts is bringing elevating YAML types to first party citizens in the ecosystem. Amagaki provides Pod Functions and additional inbuilt YAML types to assist with common content management tasks.

Amagaki’s YAML types facilitate content management best practices, entirely within the content layer. For example, using YAML types, you can:

  • Create and reuse partial content (such as common modules)
  • Refer to pod objects, such as documents, collections, static files, and URLs – entirely within the content layer
  • Refer to translation strings, including the ability to use preferred string values and fall back to previous translations if a new translation is not yet available
  • Conditionally change content based on the pod’s environment or document’s locale
  • Create custom YAML types representing custom content structures within your site. For example, you can create a YAML type representing a button, or a YAML type representing a media asset. Custom YAML types can be validated, and represented into objects of your choosing.

When to use YAML types

Always avoid hardcoding objects that can be represented through an existing or custom YAML type. For example, you should:

  • Never hardcode URLs. URLs can change throughout the life of a project. Use the url property on a document to determine URLs instead.
  • Never hardcode document or collection paths. Use the !pod.doc or !pod.collection YAML types to represent documents instead. Hardcoding document or collection paths could result in a template error if a typo was made.

Built-in YAML types

  • !pod.doc
  • !pod.docs
  • !pod.collection
  • !pod.collections
  • !pod.meta
  • !pod.string
  • !pod.staticFile
  • !pod.yaml
  • !pod.locale
  • !pod.locales
  • !IfEnvironment
  • !IfLocale

!pod.doc

Returns a document.

# Single document.
!pod.doc '/content/pages/index.yaml'
# Single document, localized.
!pod.doc ['/content/pages/index.yaml', !pod.locale 'de']

!pod.docs

Returns a list of documents. Either multiple docs can be enumerated explicitly, or glob syntax can be used to fetch documents using a glob pattern.

# Two documents.
!pod.docs ['/content/pages/index.yaml', '/content/posts/2019-01-06.md']
# All documents within the `posts` collection, with options.
!pod.docs ['/content/posts/**', {sort: 'order'}]
# All documents within the `pages` and `posts` collection, with options.
!pod.docs [['/content/pages/**', '/content/posts/**'], {sort: 'order'}]

Custom YAML types

Custom YAML types are created through plugins. Custom YAML types can be used to represent objects that may be helpful for reusing throughout the content layer in your site.

Often, custom YAML types will be used for things like:

  • Restructure content prior to being inserted into the template layer
  • Simplify template logic
  • Connect with headless CMSes

Learn how to create custom YAML typesarrow_forward

Template: footer