With over fifteen years of java and web development, David Torres is an expert in the field of Enterprise Content Management. As the Lead Developer for the dotCMS project since 2004, David has guided, directed and developed the core functions of dotCMS and is responsible for the technology that underlies the system.
"Must haves" for any CMS?
In my first post, I'm going to highlight the features that any Content Management System (CMS) worthy of the acronym should offer. I think there are concepts, best practices and technologies related to this term that the many CMSs offer in varying degrees.
Dynamic Structured Content
I think this is the main feature that any good CMS should have. Without the concept of structured content you will be tied (stuck) to very specific pre-built types of content to use and construct your website. There are certain CMSes that let you select from a pre-defined set of content types like "html content" or "news items" or "blog post" but again just a fixed set of them, so you are tied to those type of structures. If you are in the need of defining your own kinds of content like, let's say a physician profile or a hospital building then you are at a dead end or left digging into the most obscure configurations and code of your system. So the first feature you got to ask of any CMS is the one that let you define your own content structures from INSIDE THE TOOL ITSELF. Better yet through a very simple and intuitive interface and that offers you a rich set of data types and controls for you to construct them, things like combo/select boxes, text fields, text areas, radio buttons, associated files, etc.
One of the area where dotCMS shines is in offering you a very rich structure editor that will let you define any kind of structured content you can think of, based on almost any kind of data and controls. Not only that, but dotCMS also offers you the option to work on the presentation of those fields to make the life easier to your content editors or content contributors, giving you the ability to organize your fields, order them and also group them or separate them on your own custom tabs or groups, so your content contributors are going to be happier and more productive. It is easy to do things like moving all the fields you know are never used to a separate tab to keep your content contributors focused on the fields most used or required for your content on the main tab.
Some other features that you are going to be able to take advantage of on the structure editor are options like required fields, unique fields, validation rules (based on regular expressions), categorization, tagging and others. I don't want to dig to deep on all the functionality behind the structure manager, they are enough to require its own blog post, so stay tuned for future posts on this subject.
Another very important feature offered by dotCMS that most of the CMSes lack or do not manage very well, is the idea of content associations, or dotCMS, "content relationships" which let you create your own set of relationships between your pieces of content, which you give your own meanings to and can follow a rational data model. You are able to create your own relationships, like to relating your physician structure with your hospital structure on a "works in" kind of relationship, or your blog structure with your blog entries on a "belongs to" kind of relationship. This is a very powerful feature that on my perspective is fundamental on any CMS, since unrelated or hard to relate content is almost unusable in larger scale sites.
This is one of the other key feature that you should expect of any CMS, and I have to say most of the CMSes support it but not all on an intuitive way. Templating goes along with the concept of re-usability, and that is the most important concept for templates; making your html/css re-usable throughout your site. Why is that important? Two key reasons: maintainability and consistency. Having a templating system in place lets your users focus on the content and not on how to present it, they just select the template and magically the presentation is pre-built for them. Secondly, consistency, while enforcing the usage of templates, ensures your users will preserve the brand and image of your website throughout their pages, and prevent them from playing and messing with colors, fonts and layouts.
In dotCMS we have implemented the templates with two important concepts: the templates itself and the concept of containers. Containers are nothing more than the sections of your templates divided up further. For example, let's say your are defining your home page, and you need a header section, a top navigation section, a body section and a footer. All those sections should be implemented in the dotCMS as containers. The idea of containers is very important when we talk about re-usability and this is one key area where I've seen some other CMS products often fail. The idea of separating your header as an individual piece will let you reuse it not only in your home page template but also in any other template of your website, giving you the ability to change it globally in one single place. Imagine if you have 20 different templates and your header code is just repeated in all of them - what a nightmare if you have to update in 20 places. The main goal of a CMS is to save you time, not to create work.
Another very important point you got to be take in count when selecting a CMS is how hard the Templating language is to understand. There many options in this respect like php, jsp, xml/xslt, velocity, etc. In dotCMS we have chosen the Velocity template language and for a very good reason, it is extremely simple and powerful so anyone can learn it in a few hours, and webmasters will not get scared looking at the code. Any template in dotCMS is fairly simple, but one of the great things that Velocity does is not sacrifice richness and power behind simplicity. Velocity hides complexity behind what are called viewtools and macros, where the heavy-lifting occurs and still makes it totally transparent and easy for webmasters to understand and work with. To give you an example, dotCMS offers the ability to dynamically pull and display any type content in your website in a very simple viewtool and only a few lines of code. Behind the scene, dotCMS executes very complex routines to search and serve you the content in the fastest way, but your htmlers don't see that scary complexity; it is all hidden behind dotCMS core macros and viewtools.
A Tree Based View
This is another key feature to keep in mind, the CMS you select should be intuitive and present your website in the way you are used to see it. When it comes to organize your pages and assets (css, js, images and other resources), most of the people think in folders and files.
I have seen CMSes that try to force you think on their own way to present your website like presenting you pages living under other pages. This might makes sense when you talk about "leaves" and "nodes" but for most people, it is just not intuitive and will require time and effort to get used to. Why complicate it if most people are used to see resources organized hierarchically within folders like your folders and files in your PC, then that is what people should see. dotCMS does exactly that, it maps your website like any OS does, it presents you a very powerful but simple website browser (it just reassembles what most folder explorers give to you, like the windows folder explorer), so you are in an environment that you know, you open folders with a double click, you see more options by right clicking on the folders or files. I ask again, so why to reinvent the wheel, why to increase the learning curve of your system challenging your users with different and just not intuitive ways to organize your website? This is something that I have never understood about other systems.
Users Permissions and Security
Robust roles, groups and acls. This is a must for any real enterprise CMS, more so when you are talking of multi-disciplinary teams in charge to maintain your organization website. Even if there are not that many people in the system, you will want to be able to define roles and permissions to organize what people are able to see and do. Again, this is one of the areas where I see a lot of CMSes fail, offering you a preset and locked list of what the think are the roles your are going to be using in your website. It is good to offer a pre-built set of roles that most of the time apply to any website but locking you to that set of roles is a big problem as your site grows in pages, authors and complexity. You should be able to define your own roles in a very granular way and define what those roles are able to see, edit and publish within your website.
dotCMS offers a very powerful, customizable and granular way to define your permissions at any level, dotCMS manages multiple concepts from the higher level of groups to the lowest level of individuals read, write and publish permissions at the asset level, and of course covering areas like how to define roles that are only able to edit specific sections (containers) of your web pages.
These are the core features that make up any good CMS and (surprisingly) dotCMS does a good job with all of them. In my next post, I plan to talk about the functionalities that are not required for you to define and maintain your website, but that I think are really important for you to expect of any CMS system.