Having created more than 5 different content management systems, I think I have gained some experience on the development process of a cms. I remember the old days, when PHP-Nuke was the #1 (popular and built in feature rich) cms in the world and a large portion of developers had been influenced (including me) from it.
I also remember myself, trying to staff anything i could imagine, a cms user would need. I wish there was a guide for me like this one, where it would explain plain and simple what to do and why.
So today, I am writing this some sort of tutorial and i hope, it will help some of you. No advices on technical issues like workflow or user roles, just simple advices and things to think about.
In this article, i will try to give some advices, based on my experience, about the things you have to think before you start creating a CMS.
1) Do you need to create a new CMS?
This is probably the first question, someone has to answer before even start planning the cms creation.
Do you actually need to create a new system from scrach or it would be better to customize an existing one? This is something your needs, your experience on programming and some other factors like: code quality of the cms to be customized, the community involved in the cms development and time, will give you the answer.
2) What type of CMS to create
There are more than one types to choose from. Wikipedia list’s CMS categories on six main types:
- Enterprise CMS (ECMS)
- Web CMS (WCMS)
- Document management system (DMS)
- Mobile CMS
- Component CMS and
- Media content management system
while each of them is used for nearly the same thing, that is managing content, there are some things that make each category different from the other. Most of the time, when we say CMS we mean WCMS but your favorite image manager on your pc is also a type of cms.
3) Under what licence to distribute it.
Believe it or not, the licence a cms is distributed by, is one of the most important things to concider. What would the future of Joomla, Wordpress or Drupal be if these state-of-the-art packages were not open source? On the other hand, what would the future of IBM WebSphere be if it was GPL licenced?
First of all, we must make clear that creating a commercial cms on your own (a one man show), is ΝΟΤ recommended. You will never be able to :
- Develop the CMS
- Design
- Write Documentation
- Promote the CMS
- Test it and
- fix bugs
on your own. A commercial cms (we mean closed source by the term commercial) needs a team that would be assigned roles on the development process.
The pros of open source software are :
- Better community support (this does not mean that a commercial one can not have great support)
- Bugs are fixed faster (because there is a larger number of developers in the development process)
- Releases are more often than commercial software
but this does not mean that commercial software can’t do the same thing. Some people say that commercial software:
- Has proffesional support. You get support from the people that actually created the software.
- Bugs are less just because the source is closed
- Releases are there, only when there is a need for releases.
It is not my job neither i have the knowledge to say which way is the best. You choose.
4) Grab a pencil and begin sketching
Try to sketch the way your cms will operate on a piece of paper. See what and how things will be done, take some notes on ideas and “critical points” that you need to remember. Try to sketch the logic of your application. This is very important because there will be times that your enthusiasm might get you elsewhere.
5) Don’t bloat it
Do not try to load everything in the cms core. Don’t try to add too many features that will make the core heavy or the code non maintainable. Having a cms able to deliver any content, load feeds, being sociable, features rich is great but i would suggest you spend your time creating a cms so simple and extendable, that will be a piece of cake to add any feature you wish.
Do not add features. Let the plugins do this. So instead of spending your time on adding features, you could spend the same time creating a great plugins system. This is the case of some of the best CMS’s in the world like Joomla, Drupal and Wordpress (Actually a blogging software). So if Joomla and Drupal did the same thing, why don’t you do the same thing ?
6) Keep it Simple
Try to keep it as simple as you can. Do not think as a developer, think as your grandmother. Note that your cms will be used by non skilled users. Users who need BIG buttons with clear explanation on what they do and placed on places they are familiar with. Do not use geek language and definitions on the user’s interface and try to make it easy for a non skilled user to dump down the interface to suit his needs.
Find some people that have less experience on administration than you and ask them to use some of the existing cms sollutions. Get feedback from them. Note what makes them happy, what upsets them and what they expect to see in an application. Use the conclusions as a mini guide on what to pay attention and on what needs to be more simple. Make other cms’s weaknesses, your strongest features.
7) Take care of the directory structure
Try to create a directory structure that will act as a helpfull hint on any occasion. Do not mix template files with language files or libraries. Wordpress’s directory structure is a good example:
Having a directory structure similar to Wordpress’s not only makes your job easier, but it also makes it easy for a non skilled user to understand where each of the file must be placed and what type of file it is.
8) Choose your libraries wisely
No need to re-invent the wheel. There are tools and libraries out there that may do the things you want already. So before you start coding, try to determine what libraries you will need. From the database layer to the template engine, there are great and proven time savers out there.
Do not use libraries that depend on software not common to most of the default server’s built. This might make your cms useless on some servers.
9) Make it friendly for designers
Designers are our friends. They will be creating templates and by doing this, they will be constantly promoting your cms. Do not make their life difficult. Use a template system that will need little or no programming experience from the designer. Try to plan a templating system that will be easy for a designer to understand.
Designers understand the “<markup>something here</markup>” model better than the “{[command]}something here{[commandend]}” model. So give them something similar to work with. Also create some helper function and shortcuts. Again, Wordpress is a good example:
Wordpress uses php commands eg: <?php the_title(); ?> that is very similar to HTML markup. Do you wonder why there are so many Wordpress themes out there?
10) Know what “content” is
Sometimes a lot of people are confused on the “content” term. Before you start creating your cms, you must be sure that you understand what content is. Content is more than an article, an image or a link. Content is anything that you can manage through your system. This is why it is called a Content Management System. Try to think of your cms as a frontend to the computer. What can you do with your computer? You can:
- open/ read / edit / create / convert
- images / video files / sound files
- text
- system settings
- shortcuts
- users
- user roles
- system files
The list can go far down. So do not think “content” is just text and images. Use the abstraction logic and make your database model able to support it. The use of the term “item”, instead of “article”, “image”, “link” etc can explain this logic better.
Editorial
Creating a content management system is not easy. There are more than just coding and designing to make a cms usable and i tried to point some things to consider before you start creating one.
Have you created a CMS? If you did, it would be great if you gave as a link to it. What rules do you follow when creating one (or any other software package) and what do you think a newcomer to the world of cms creation should be aware of?
Popularity: 2%
Related posts:
- Content Management Systems Without The Need Of A Database Yesterday, there was a post in my favorite forum, asking...
- The Road To Cost Effective Bandwidth Management You have your site, full of content, visitors come and...
- Creating A Useful Wordpress Widget, Using Topsy Yesterday, I was looking for a way to create a...
- Creating A Google Wave Extension In 5 Steps This is a simple to follow tutorial on how to...
- Creating an Unobtrusive Javascript Image Callery Using YUI The Yahoo User Interface (YUI) is a set of utilities...
About the Author:
Filed under: Tutorials - Trackback Uri








Wordpress is NOT a blogging Software, that is my only problem! :D
In the other point of view in my honestly opinion what can offer some money now, is a Mobile CMS. and that for a sort period of time….
Yes. Wordpress is not only a blogging package but… This is how Wordpress.org describes it: “…WordPress is what you use when you want to work with your blogging software…”
So if Wordpress.org describes it as a weblog, it is not my job to argue that ;)
I created 3 cms before and I’m creating second one with hope this will be it :D
each version is x2 times better.. :D
what you think about cms on fw example Zend framework? is it good or no i wrote 3 of them on my own fw but this is realy was pain in the ass now i wondering go to zend but I’m a little worry about directory structure, extensibility… and what will be when peapole starts write plugins they has to know not only my cms structure but framework too…
what do you think?
sorry for my english :D
If you base your cms on a framework that creates standard project directories, like Symfony, then you really should go this way. I am working on one at the moment using Symfony and i must admit that somethings are really straightforward. No need to get headaches for simple things like db queries and such and i am much more productive now.
Creating your own CMS is a very educational experience and makes you a better programmer. Doing this on top of your own MVC engine is even better!
Whether this stack is OK for production is another story :)