Content management system
A content management system, or CMS, is a web application which lets users create, edit, and organize web site content without programming.
Content on the World Wide Web consists of HTML, XML, and other documents and media files. This content can be published "manually" by editing and organizing files on a file system exposed to the web through a web server, requiring much technical expertise and tedious work. Content management systems were born to help people publish documents and media with less technical intervention and in a more consistent and automated fashion. They also assist teams of people in working together to publishing content.
Obviously web site content can be organized and categorized in many different ways. A CMS system can be completely free-form or tightly organized. Over time various common specialized uses have emerged:
- Blogs contain chronologically organized, and often categorized, content in a simple format.
- News and magazine style publishing has been adapted to the web from traditional paper distribution.
- Wikis are free-form sets of interlinked documents, often open to public editing.
- Online books assist authors and archivists publish content organized just as a traditional book. A CMS may also simultaneously publish the online book as an e-book, in a format supported by e-book readers.
Some CMS applications are multipurpose. Many are modular, allowing features to be turned on and off by site administrators, thereby tailoring their use.
While all web sites technically contain content, other more special purpose systems do not all fall under the umbrella of CMS. E-commerce systems, financial systems, and search engines are examples of systems which manage content, but are not described as CMS.
 Common Features
 Site Structure
CMS applications automatically generate site navigation elements and organize content. Typically content can be reorganized by administrators.
There are a variety of ways content can be automatically or manually organized. As a URL structure might be seen as a tree, a document tree might automatically be created as documents are added as children of other documents. Or documents of a certain type might all be organized and listed together on specific web pages.
Session management and user accounts are typically included in a CMS. They are required for administrators and are also sometimes provided for public access to certain features, such as posting comments.
Drupal modules, for example, can each expose system permissions as simple text strings, such as "view content", "post comments", and "administer taxonomy". Roles can then be created and assigned any number of permissions. Users are then assigned roles, giving them each of the permissions included in those roles. For example, an administrator might create an "Editor" role, assigning editing permissions of all content to that role, then granting that role to the appropriate user accounts. When users with that role log in, they automatically have access to edit content.
Workflow features assist teams with the process of editing and publishing content. Immediate or scheduled publication of content is often available.
The most simple type of workflow would add new content to a publishing queue, where it awaits final approval from a site administrator before the content appears on the web site. More robust workflow might delegate work to separate types of users, often based on security roles. An editor, for example, might automatically get notified when new content is posted, letting her edit and approve the content before publishing.
Sites can be styled by choosing prebuilt or customizing templates. Templating separates the code which provides functionality from the code which makes the content visible to the end user, which is generally considered a best practice. By separating logic, alternate views can be introduced without interfering with the content management process. Also, designers can focus on building templates without learning much of the internal logic of the system.
While not an absolute requirement, many CMSs are built in a modular fashion, allowing additional features to be selectively added by an administrator. Code modularity also allows developers to more easily add functionality to the system.
Drupal, for example, is built with functional programming, with each module in a separate file. By using specific naming conventions for functions, modules can hook into various parts of the system to add or alter features of the system. The core of the system is also modular, aiding distributed development and customizability. Blog, forum, and comment modules, for example, can easily be turned on or off by site administrators.
 Media Management
Standard web pages are displayed in HTML format. But other document and media types are valuable supplements to textual content. Therefore many CMSs offer management and integration features for additional document types, such as PDFs, images, videos, and audio.
A CMS may simply offer a file upload service, organizing new files in some standard fashion. They may also offer integration features, such as displaying a video within an article.
 Rich Text Editing
The standard web interface for inputting large blocks of text is the HTML textarea. To format text using a textarea, a user needs to type HTML elements or some other application-specific markup. Some CMSs offer a simplified input markup syntax. Some include WYSIWYG editors, allowing the user to see what their content will look at while they are in the process of editing it. Advanced graphical editors assist with table layouts, multimedia integration, and other complicated tasks.
As with many web applications, content management systems are often built on scalable architectures. Those that store content in relational databases, for example, can often scale using database replication.
 Content Distribution
RSS feeds, for example, are a very common method of content syndication, allowing other software to aggregate content in an automated fashion for summarization, redistribution, or analysis. Some CMSs can automatically generate RSS, a form of an XML document, from the system's content.
Email distribution, such as through newsletters, is another common CMS feature. Emails might be templated, and mailing lists managed, through the system. These might include automatic links back to content on the web site.
CMSs may also expose more robust programmatic interfaces, or APIs, to other systems. For example, a CMS which exposes posting functionality through an API may allow desktop applications to submit content, bypassing the web interface for similar functionality.
A CMS might also support the APIs of other systems, letting them push content to external systems or notify them of updates. For example, a CMS might automatically notify a shared workflow system, subsequently notifying users or automating additional tasks.
Web content may be created, organized, and managed in an unlimited number of ways. Therefore a wide variety of CMS systems have been built to handle many different situations. Some of these applications are general-purpose, providing a consistent general structure to any type of content. Others are more specific to types of content, intended audiences, or workflows. Therefore there is no single best way to implement a CMS.
It's always best to not reinvent the wheel. Therefore looking at existing CMS systems to solve a new problem is usually a good idea. Even with an entirely unique web site idea to built, an existing CMS might already be a good fit. With the modularity of many systems, taking an existing CMS and extending it with unique features is also an option.
If it's decided that an entirely new CMS system is to be built, it's often best to start with an existing web application framework. Frameworks will provide the common set of features that form a basis for a CMS, such as user/session management, data persistence, and templating.
 Content Management Systems
There are hundreds of open and closed source content management systems. A few of the more popular include: