Creating a CMS Framework – The Plan

I’ve now written 4 cms’ and have decided as a personal project to create a core system that can easily be adapted to many tasks.  Over the past 4 cms’ I’ve used the same code a lot and created a central core of utils (imaginatively called Gist!) but I want to go a step further and have a central system I can use straight off.

All of the cms’ have been very different and I find it rather surprising HOW different they actually are.  Clients have very different ideas of what they want and how it should work. Personally I’m all in favour of using standard metaphors across the whole system like I did in my second one (Save,Edit, Delete,Hide icons) but everyone has their own idea.

My Cms framework will be based on those common metaphors with the backend a totally seperate project so I can quickly write those to please the client.

The Plan

In all my projects I’ve written a BasePage class that inherits the normal Web.UI.Page object and adds cms specific functionality. All of them have ended up doing the same sort of thing so I am creating a basepage that is responsible for handling masterpages/themes/css/javascript and basic content.  I personally don’t use the standard theme system as I find it a bit restrictive and heavy. I also find creating loads of controls for core page functionality to be a resource intensive when a streamlined base page does it better :D.

User/Security and Db will be done through abstracted layers that can be easily replaced. I’ll be pulling in the systems I’ve already created for this as they’re pretty solid and flexible and have been proven over a few years usage. The permissions system is granular and quite light-weight allowing permissions to be easily created and checked. It works in conjuction with the normal roles system.

ContentBlocks, Controls and Layout will be added as plug-ins with a respective basepage to handle them. I’ve got dynamic positioning, style overrides and conditional content working in my other systems so will pull those across too.

What I’ve got…

What I’ve got working in current system (all proven under real world load)

  • Theme and style handling that can be overridden on a granular level (can be changed at page, theme, category, position, block or user level)
  • User accounts and permissions (easily expandable, fast, lightweight and flexible) and co-exists with roles.
  • Movable page areas and content blocks (can be changed at page, theme, category, position, block or user level)
  • Dynamic Db based control creation and persistance (Allows end-users to add controls easily without touching source files)
  • Loads of various things to add as plug-ins. (Form Builder with automatic persistance; Flexible tag and category system; File browser and explorer; Video and Image resizing and editing; All the usual cms stuff)

The Goal

The goal is to create a series of distinct layers that provide functionality that can be easily and quickly adapted whilst still performing well and provide global functionality that plug-ins can easily tie in to.

Core Page Handling = MasterPages, Themes, Content, Page and Menu

Abstract DB Layer = Provide a core system that is db agnostic and overridable

Plug-in Framework = Extend the core system via plug-ins and extensions, add ALL functionality this way.

Back-end as a plug-in = Make the cms editing component a plug-in too so that it can be made to behave as the client requires.

I initially want to create 3 systems based on the framework. Just simple versions of my favourite cms’. www.wordpress.org, www.websitebaker.org and my dynamic cms which aims to give normal pc users a system that would normally take a dev to look after. Lofty goals! Let see what I manage 🙂

Project status as of now

Bearing in mind this is an evening project I’m not planning on release any time soon but will document my progress and designs as I go along.  Presently I have a high level design, working on the DataLayer and have the basic BasePage done.

I’m trying to create a Sql-Server and MySql dal (DataAccessLayer) together as MySql is cheaper for general users.

Forgive me wittering I’m thinking aloud!  Stay tuned…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.