This document is to give an overview of the Content Repository so enough knowledge about it can be used to start developing on BCMS. Things stated here may not be what is in real in fact on CR, but for simplicity sake and basic overview.
Content Repository logically functions as a file system. Content items can be stored in folders (Content Folders). Content items are like files, and Content folders are like... well folders. The difference between a file system and the CR is that content items may have 1 or more revisions. For example text content item may have 3 versions. A content item may also hold a property / state, which version is a live version. Normally the live version is the one that we publish or display on the public web site. Essentially its a central place where we can stuff different content, and since it the basic data model and functions are done. Your content will inherit those abilities and properties, such as versioning, categorization, relations, etc.
Note: omissions has been made on the columns to simplify.
cr_items
Column | Type
------------------+------------------------
item_id | integer
parent_id | integer
name | character varying(400)
live_revision | integer
latest_revision | integer
publish_status | character varying(40)
content_type | character varying(100)
storage_type | character varying(10)
item_id - is the unique id of an item on CR. Its the acs object id.
parent_id – normally this the item_id of the folder that stores the item.
name – normally use as a url part. Similar to filename on the file system.
live_revision – if a particular item has a live version, this field stores the version id, which refers to cr_revisions table.
latest_revision – this the version id of the latest version, this is kept automatically triggers.
publish_status – values are production, ready, live and expired.
content_type – can kind of type is this item
storage_type – the values are text, file and lob. If the value of the content is stored on cr_revisions.content then the value is “text”. If the content is store on a file on acs_root/content-repository-content-files then the value is “file”. The “lob” value is used if the content is stored in the db using lobs.
cr_revisions
Column | Type
----------------+--------------------------
revision_id | integer
item_id | integer
title | character varying(1000)
description | text
publish_date | timestamp with time zone
mime_type | character varying(200)
content | text
revision_id – a unique id for a version
item_id – which version does this revision belong to
title – title of the version
description – description of the content
publish_date – if the version has been publish, the date is stored here
mime_type – mime type of the content
content – this is where content is stored if cr_items.storage_type is set to “text”
cr_folders
Column | Type
--------------------+-------------------------
folder_id | integer
label | character varying(1000)
description | text
folder_id – a unique number for a folder, this is a foreign key for cr_items.item_id. So a folder is a special type of content.
label – friendly/pretty name of a folder.
Content Types are similar to file type. In a conventional file system a .doc and .xls file differs on both type and content. One is for a word processor another one is for a spread sheet. The same way CR can accommodate different content types. Normally we need to define our content type since the very basic CR content types may not be enough. For example if we would like to have a sub title field we need to create a custom content type. This CR object model diagram where custom content types in the ACS Object model.
Normally you can insert on a view or call a plsql calls to insert to CR. With bcms you can do the following:
set my_new_item [bcms::item::create_item -item_name “testing” -parent_id $my_folder]
# lets put our initial version
bcms::revision::add_revision -item_id $my_new_item -title “this is a test page” -description “this page is to test adding content to CR” -content “blah....”
Although the following command above can be wrapped and just simply use one call, for example:
bcms::create_page -page_name “testing” -folder_id $my_folder -title “this is a test page” -description “this page is to test adding content to CR” -page_body “blah....”
There should be different ways to get content. Since its basically a database one can select the values. Normally in bcms or create a bcds. You do the following.
On a index.vuh file, you get the url
Use the following call:
array set mycontent [bcms::item::get_item_by_url -root_id $my_root_folder -url $url_requested -revision live -resolve_index]
on your adp file:
<html>
<title>@mycontent.title@</title>
<body>
<h1>@mycontent.title@</h1>
<h3>@mycontent.description@</h3>
@mycontent.content@
</body></html>