All Content Types in dotCMS are created from Base Content Types. There are 5 different Base Content Types in dotCMS. All custom Content Types you create must be created from one of the Base Content Types, and each custom Content Type inherits all the fields contained in the Base Type (as well as any custom fields you add to your Content Type).
The Base Content Types
The following table lists the Base Content Types and the purpose of each:
|The Content Base Type is used to create standard Content Types that do not represent any pre-defined type of content, and do not contain any pre-defined system fields.|
|The Widget Base Type is used to create a Widget Content Type, which allows you to create a number of different Widgets (instances of the Widget Content Type) which all share the same core code, but differ in the values of specific parameters that you create in the Widget Content Type.|
|The File Base Type allows you to create new file types which allow content contributors to upload files of particular types (or files used for particular purposes) to your site.|
|The Page Base Type allows you to create different Content Types for different types of Pages on your site.|
|The Persona Base Type allows you to create new Persona Content Types for different classes of users that use your site.|
You can identify the Base Content Type of an existing Content Type by viewing the Type field in the Content Type Properties tab.
The Host Content Type
In addition to the 5 Base Content Types described above, there is also a Host Content Type which is used to store information on all the Sites hosted on your dotCMS instance. But unlike the Base Content Types above, you can not create your own custom Content Type from the Host Content Type. However you can extend the Host Content Type by adding any fields you wish to it; this allows you to add information which your users can (or must) supply for each Site hosted on your dotCMS instance.
For example, you may wish to change or add fields that represent developer keys for differetn Web APIs used by your sites (such as Google Analytics). You can then write a single Widget or other code block that can appropriately access Web APIs on all your sites, but pull the appropriate developer key based on the site the code is run on.
Content Type Fields
Content can be thought of very much like a data in a database. Each Content Type can be thought of as similar to a table in a database, where the fields of the Content Type represent the columns of the table and each individual content item represents a row in the table.
The fields in a Content Type (e.g. “columns” in the “table”) of each Content Type are comprised of the Standard Field Types, the WYSIWYG Field, Tag and Category Fields, etc. Nearly all fields can be made searchable, and can be accessed via the RESTful APIs. For more information, please see the Content Type Fields documentation section.
Each Base Content Type contains a number of system fields, which are fields that exist in all content types of the same Base Type. When you create a new custom Content Type, you may add new fields and you may change the values of the system fields, but you may not remove the system fields that come from the Base Type.
Most system fields are intended for your content contributors to fill in; these represent information which is required for all content of a given Base Type (such as the “Host or Folder” and “Show on Menu” fields for the File Base Type, or the “Title” and “URL” fields for the Page Base Type). However some Base Content Types contain system fields which are intended only for your web developers to edit (such as the “Code” field on the Widget Base Type).
Which system fields are available to your content contributors depends on the Base Content Type and the system field, however:
- You can identify the system fields in any Content Type by viewing the Action column in the Content Type Fields tab.
- Any field which can not be removed (i.e. any field which does not have a red X in the Action column) is a system field which is part of the Base Content Type.
- You can identify which system fields are available for your content contributors to edit by viewing the Content editing screen for an individual Content item of the given Content Type.
- Any system field which is visible and editable in the Content editing screen is available (and intended) for your content contributors to edit.
- Any system field which is not visible in the Content editing screen is intended for your web developers to edit.
- Any system field which is visible in the Content editing screen but not editable is not intended for either your web developers or content contributors to edit; these fields are automatically filled in by dotCMS based on the values entered in other system fields.