My blog has moved to

I moved my blog. Visit for the new one!

My content management system (CMS). Keeper or dud?

Posted by derekbobo on April 29, 2009

I’ve had the opportunity to use a lot of CMS in my day. These include homegrown, commercial and open source systems. With that in mind, while I’ve seen some pretty nice systems that are easy to use for an end user, they don’t allow me to easily make changes to account for truly dynamic content (aka writing server side code at the page level). Or on the flip side of things they try to be everything to everyone so they are so bloated that they’re hard to work with. Long story short, I’ve just run into a lot of short comings so I decided to write my own that models how I work, and how my clients typically want to maintain.

Miscellaneous features:

– You can create reusable code blocks (random image droppers, contact forms, etc) by using the “widget” feature
-I have a “redirects” feature which essentially lets you alias long pathnames as a single token. This is nice if running campaigns and want something like: instead of
-Multiple sites can be hosted from a single instance. So for example a company could maintain their main website and intranet… or I as a developer could maintain individual sites for my clients from a single installation.
-Pages can be enabled (made live to the world) and/or hidden which would hide them from auto navigation but makes them still viewable
-PHP code can be written so that it would act like code that appears at the top of a page (executed pre page load, postbacks etc)
– The has a “backend” or “cpanel” which is what is depicted above.
– It then has a single index.php file that interacts with the database and is used to render all of the pages.
– Database is MySQL
– The files that get uploaded (images, javascript, css) are stored in the filesystem rather than the DB. I then create a unique hash and drop off the extension (this is to allow them to be stored in a single directory w/o collisions) The hash is then stored in the DB and used to serve them up
– Page names can include file extensions if you want. While the site is driven by PHP you could make it look like it was .NET (.aspx), .php, .html, etc (security through obscurity?)

Here is a rough outline of how this thing works:

1. Create a design – woohoo
2. Load the design into the CMS as a “template” and then define regions that will contain dynamic content. (Think templating approach of using extract)
3. Upload any relevant images, external js includes, stylesheets, etc
4. Create a page
5. Choose the desired template… in doing so the page is populated with the placeholders defined in the template. (I use a naming convention to account for textbox vs textarea vs wysiwyg)
6. At this point a casual user could just dump content using a wysiwyg. If the page required special functionality a developer could write php code at the page level (I’m ebil and make use of eval… if you want to hack your own site I don’t feel sorry for you)

This is the main dashboard, similar to the concept of a file manager.

This is an existing template.

This is the wysiwyg in full screen mode… this is basically the index page template.

This is the tree menu used to control where I’m storing the template in my virtual file system.

This is the page view which is populated based on the defined regions in the template.

This is the rendered page that gets created from the above steps.

This is just a quick overview on a project I started quite some time ago. It was really just intended as a proof of concept. At this point I’m sorta sitting on it wondering if I should pick it up… if it’s worth continuing, or if I should open it up to the open source world. What do you think? Is this a keeper or a dud?


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: