Chapter 3. Containers

One way of describing the organizational structure of the CMS is as a hierarchy of containers. The highest-level container is the Content Section itself. Each Content Section contains a root folder, which will contain the actual site content for the section. In addition to the root folder, each Content Section maintains its own roles, workflows, lifecycles, list of included content types, templates, and category hierarchies (although in some cases categories are shared across multiple content sections).

Starting with a single root folder, each folder within a Content Section is a container which may hold both subfolders and content bundles. Each subfolder may in turn hold both subfolders and content bundles, forming a hierarchy of content.

Each folder or subfolder may contain several content bundles, which are the class com.arsdigita.cms.ContentBundle. A ContentBundle corresponds to an actual page on the site with a particular URL. The ContentBundle does not contain the bulk of the item content, however. Rather the ContentBundle is the container which contains an individual language instance for each language that a particular content item has been translated into.

The primary unit of content within Red Hat CMS is the content item, which is the class com.arsdigita.cms.ContentItem). Each object placed in the ContentBundle container is a subclass of ContentItem. It is at this level that workflows and lifecycles are applied (each language translation of a particular item will be separately authored and published), and it is at this level that most site-specific CMS customization will be carried out.

When a custom content type is required (with custom fields, business logic, etc.), the custom attributes, associations, and business logic of the content type will be implemented in a new Java class (and PDL file) which directly or indirectly extends ContentItem. The other container classes (ContentSection, Folder, and ContentBundle) will not require modification.