It’s design time

I don’t think I’ve made explicit mention of it here (aside from the occasional Wiki link), but I’d like to take this opportunity to open up a discussion to any and all interested in the world of Content Management Systems regarding my own personal endeavor into the arena (I know eksith will be interested; we’ve already had light discussions here and here).

There are tons of flow charts out there, in addition to Wikipedia’s overview of the concept, but my focus is going to be as summarized on my wiki page: something lightweight, scalable for small to mid-size websites, and extensible.

For inspirational use, I’ve been examining the design of two of my all-time favorite open-source content management systems: Joomla! and Drupal.  They emphasize slight different approaches while offering much of the same functionality.  Joomla focuses a bit more on the everyday user, and hence is slightly easier to setup and maintain, but a bit more difficult to customize and add new functionality.  Drupal’s focus is nearer to tech-savvy developers, and so setup can be more time-consuming, but once the site is up and running, adding new plugins and further customizations are pretty simple.

Ideally, I’d like to take the best of both: simple setup, maintenance, and extension.

Already, I’m planning to make use of the Smarty template engine to take care of renderings.  I’m also going to employ jQuery to give me a significant head start in use of JavaScript.  As you’ve probably guessed by now, the CMS itself will be written in PHP.  The inital database will be MySQL, but keeping modularity in mind I want to design for any of PHP’s supported databases.

From here, things get more complex.

The overall design and workflow isn’t going to look much different from any other CMS.  However, I want to make this as modular as possible, hearkening back to the ease of extension.  I particularly like how Drupal has approached this – almost everything is considered an independent “node”.  Joomla’s MVC approach is also impressive, but I dislike the level of duplication inherent in the separation of admin/user views.

Like Drupal, I want every aspect of this CMS’s functionality to operate as independently as possible, specifying dependencies on other nodes (or, as I’ve informally begun referring to, “servlets”) only when absolutely necessary.  Any sort of duplication between servlets – code, or simply logic – should be avoided.  For instance, if I created a servlet responsible for translating all the rendered text into another language, I don’t want to have to specify a dependency for every single other servlet in the system on this one language servlet.

I have quite a few other details, but for now I’d like to stop here and see if any of my gentle readers have any thoughts on the matter.

And a lolcat for your troubles 🙂



About Shannon Quinn

Oh hai!
This entry was posted in Internet, lolcat, Programming, Technology and tagged , , , , , , , , , , , , , , , . Bookmark the permalink.

6 Responses to It’s design time

  1. eksith says:

    Instead of going about this from the backend, maybe the way a user would approach the front end would give you some ideas?

    I need to create a content section…
    I go into the content wizard and choose “Create new Section”.
    I select the properties for this new section.
    Properties include a title(Text) and a brief abstract(Text).

    I go to “Items” within this section (Note: Each “Item” is a node).
    I create a new “Item” type and give it the following properties…
    Type, Title, Description, Topics, Replies.
    “Type” is just a marker for me to know what this is. I call it “Forum”.
    I then go into “functions” and select on of the predefined utilities : “Counter” and reference “Children” for “Topics” and “Child->Children” for “Replies” for this Item.

    Once these steps are selected, I make sure to check the “Make template from actions” checkbox and click on “Create”.

    Now I create another “Item” in the same section and select the previously templated actions for the “Forum” type. I just need to enter in another Title and Description.

    I then create a new content type called “Topic”. Using the above methods, I give it a Title, Author, Created Date, Last Modified, Replies. Using those predefined functions, I select Timestamp function for the “Created Date” and Mod Timestamp function for the “Last Modified” fields. The “Author” property is using the “Get User” function.

    Then a new content type “Post” and use the same procedure as above for the appropriate field.

    I then go into “Workflows” and select the hierarchy.
    Forum -> Topic -> Posts. This sets the parent -> child relationship.

    Then it’s off to the “Actions” privileges.
    Can View/Create/Edit/Delete/MarkReadOnly Forums
    Can View/Create/Edit/Delete/MarkReadOnly Topics
    Can View/Create/Edit/Delete/MarkReadOnly Posts

    Can View Forums
    Can View/Create/Edit/MarkReadOnly Topics
    Can View/Create/Edit/MarkReadOnly Posts

    Can View Forums
    Can View/Create/Edit(self) Topics
    Can View/Create/Edit(self) Posts

    Can View Forums
    Can View Topics
    Can View Posts

    Now I have two Forums in a particular section. Not only that, I have templates of each of the actions so I can duplicate this same workflow in another section.

    • magsol says:

      You’re absolutely right; I’m approaching it too much from the backend side when I should be compiling a list of functional and nonfunctional requirements and let the structure flow from there. I’m reading up again in Code Complete to refresh myself in all the software engineering concepts and practices I learned oh so many years ago at GT. 😛

      Meanwhile, something like this would definitely be a useful exercise in figuring out how to structure the program itself: how do I create sections, how do I specify properties, how do I label dependencies, etc.

      Thank you! I’ll let you know once I’ve delved into more detail.

  2. matt.roe says:

    I think you should write it in .net 🙂

    • magsol says:

      Haha, except that wouldn’t really fit in the “lightweight” category 😉

      • eksith says:


        And I was secretly plotting to release a .Net port as soon as I got my hands on this.

        Well, you weren’t expecting me just to stick to building templates did you? 😉

      • magsol says:

        Dude, that would be AWESOME. I’m just not proficient enough in .NET to do something of this magnitude m’self. But I’d love to tag along in that process and learn a thing or two about the framework from someone who knows what they’re doing! 🙂

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