Core dna ships five kinds of content record: pages, books, blog posts, FAQ questions and custom entity records. They share more than they differ: all of them keep their content in revisions, take a layout, and are reached by a URL. This guide is the map of what each is for, what they share, and where they behave differently from what their names suggest.

Who this guide is for

Content modellers deciding which type holds what and how it is organised, theme developers rendering those records, and integrators moving content in and out. It assumes you know how layouts, layout areas and templates fit together (Input types, layouts, components and images). Every template example is given in both engines.

The units, in order

  1. The built-in content types: pages, books, blog posts and FAQ, what each is for, and how to choose.
  2. Taxonomy, URLs and SEO: categories and tags, slugs, custom URLs, rewrites, SEO settings and translations.
  3. Revisions, publishing and approval: the active revision, the published gate, scheduling, previews, approval workflows and edit locks.
  4. Custom entities: modelling a domain the built-in types do not cover, from definition to template to API.
  5. Custom fields: when a custom field beats a layout area, where custom fields attach, and reading them.
  6. Media and files: folders, filenames and file revisions, uploads, sharing, the virtual-file store and the file manager's settings.

Six things to know first

  1. Content lives in revisions. Every layout area getter on a page, a post or any versioned record reads the active revision, and making a record public and activating a revision are two separate gates (Revisions and the active revision, Published, active and draft: the two gates).
  2. Signed in, you see more than visitors do. Backend users skip the published filter, so check what the public sees while signed out (Published, active and draft: the two gates).
  3. Custom fields have no shorthand and no revisions. Read them with their typed getters; a change to one is not part of any revision (Reading custom fields).
  4. A relationship's shorthand works in Smarty only. In Twig, read a custom entity record's relationships with the explicit getters (Relationships between records).
  5. Books answer the Pages methods differently. getParent() and getChildren() exist on books, units and book pages, but return their book, unit, units or pages (Books, units and book pages).
  6. Files are public by design. Anyone with a file's URL can fetch it; members-only downloads need another design (File access, sharing and expiry).

Covered elsewhere