HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityDoc feedbackLog In
GitHubNuGetDev CommunityDoc feedback


Content can be pages, blocks, media files, and folders. It can also be catalog content in Optimizely Customized Commerce. In the Optimizely Content Management System (CMS) content model, a content type inherits from the Content interface, and contains a set of specific properties.

Content in CMS can be almost anything, as long as it is a class that implements the `IContent` interface.



This means that if you have an instance of a class that implements `IContent`, you can use the CMS API to save it to the CMS database. The `IContent` interface also provides a set of important basic properties such as the content display name, as well as references and unique identifiers for the content item.



## Content model and types

When developing your solution, plan a content type model hierarchy, and use class inheritance to reduce code and access built-in features in CMS. Use MVC conventions for _controllers_, _models_, and _views_. This provides flexibility when extending your solution, and you can easily create new content types by adding model classes.

Create for example a page type that implements `IContent` to get the basic properties, and add custom properties like author, an editorial area and publish date.

**Example:** A page type created using the Optimizely Visual Studio extension.



Settings defined in the user interface take precedence over settings from your model, and content types can be added and modified from the administrative user interface. However, these will not be strongly typed, and therefore this approach is not recommended. Managing content types from code also makes deployment to multiple environments easier.

### Initialization and synchronization

During site initialization all assemblies in the bin folder are scanned, and all classes decorated with the `EPiServer.DataAbstraction.ContentType` attribute are added by the [synchronization engine](🔗). A content type is constructed by merging the settings from the model class with any settings that have been defined in the administration view.

You can see examples of different content types if you install a [sample site](🔗) .

### Built-in functionality

When using the CMS content model, certain functionality is available by default for all content types. You get for example waste basket support, content reference checking when deleting content items, and drag-and-drop support from the assets pane into any overlay or editor that handles files.