The system consists of two parts. One abstract part consisting of data that stores content, information about structures and relationships. The other one is physical files that handles presentation about the content.
The main part of this content management system is pages. Each page has an individual address (URL) and content assigned to it.
The page is identified by an id in the form of Guid and a language id. Usually the system will keep track of the current language and only the page id is used for fetching and simular operations. (Multi-language is not yet implemented).
Both standard content such as start/stop publish dates, page name and other generic information but more important the page specific content such as images, text, links etc.
In order to keep track of what information a page can consist of each page is assigned to a page type.
Page types are classes defined by the developer describing the structure of the pages that use that type. This is done in code by adding properties to the class. Each property is of a specific type - a string, a link, an image or any other thinkable type.
Each page type consists of two different parts; one - as described above - that defines the structure and one template that displays the content. In the template each property of the page type is easily available strongly typed. That means that it's very easy to work with the page property objects in code.
Kaliko CMS comes with a couple of default property types that have been created to match most common needs.
Included property types:
|BooleanProperty||Used to represent true or false.|
|CollectionProperty||Used to create dynamic collections of another property type.|
|DateTimeProperty||Used for dates.|
|FileProperty||Used to point to local files.|
|HtmlProperty||Used for HTML content.|
|ImageProperty||Used for images, allows the developer to set up image restrictions such as width and/or height.|
|LinkProperty||Used to point to either an external URL, a local page or file.|
|MarkdownProperty||Used for Markdown content.|
|NumericProperty||Used for integers.|
|PageLinkProperty||Used to point towards any other page in the system.|
|StringProperty||Used for simple strings represented by a single line in the editor.|
|TagProperty||Used to add tags to a page.|
|TextProperty||Used for longer strings represented by a multi line text area in the editor.|
|UniversalDateTime||Used for time zone independent dates.|
You find more information on each of the property types in the API documentation.
The system has been designed to allow developers to easily add new property types when the included types doesn't cut it. This makes the system very flexible.
The system handles storage of the property automatically, so there's no need to modify the database when adding new property types no matter how complicated their structures are.
The property collection type
One other powerful feature in the system is the property type CollectionProperty which is included in the core. This property allows developers to add a single property to a page type that may contain unlimited number of instances of another property type.
For example a list of quotes, a link collection, an image collection or any other type. To use this together with customly developed property types doesn't require any extra work, it's fully functional right out of the box.