I began a feature breakdown for SilverStripe/Concrete5/ModX, but I soon found that they offer very similar feature sets. So I did some exploration and thinking about the details of implementing our site in each one.
Here’s quick rundown of my evaluation process. My experience with CMSes has largely been with two systems – WordPress and the inhouse Java-based CMS we use at MTV. I have not tried to do any heavy-duty customization of WordPress, but it seems to me that it is focused on templates, and its underlying data model is mostly conceived in terms of pages, snippets, and a single data type (the post). It is not really designed for custom data objects as much as for customized presentation of data. This is why, even after you hack at it a lot, it’s still basically a blog on the inside.
MTV’s CMS is at the other extreme – all the data objects in it are custom-built Java classes that go through some kind of ORM and end up in Sybase. Content producers fill out HTML forms through a user-unfriendly front end that generates or updates whatever object they want (promo set, news story, playlist, etc.) The presentation is done through a JSP-like system that pulls the objects back out of the database (using more custom Java on top of an app server) and makes them available to page code, which can then manipulate them and wrap them in whatever markup is appropriate, usually sending it through an XML/XSLT transformation before generating the final HTML and JavaScript for the browser.
So to me there are two fundamental questions. First, do we conceive of the site as a set of pages, with a few bits of markup that are reused across several pages, or do we think of it as a front end for a set of custom objects? Second, how important is the interface for editing the content?
To me our site seems like a set of data types – tutorials, games, glossary entries, users – which have sub-components and are interlinked in ways that do not map simply to a page apiece. But I have also been working with MTV’s system for a long time, and it’s possible that building a data-driven system is overkill. This is something we will need to decide as a group, I think.
If it is going to be a data-driven site, we’re going to need to do some fairly deep customization of an existing product, or build something of our own in CakePHP. If we build something in CakePHP we’ll have more flexibility, but our code won’t be as solidly tested as the existing systems, and we’ll have to write our own front end for editing the data, which will both take extra time and not be as user-friendly as the existing ones. If we modify one of the existing ones we will need to figure out how to create custom data objects within them – they all support this, and they all claim it is super easy, but we will have to learn each system’s terminology (they are all different) and build an understanding of their code structure before it is easy.
So, if this will be a data-driven site, I think the most important feature will be the documentation and community. Based on that, I would recommend ModX, as Concrete5’s doc is a little sparse. (SilverStripe’s is decent but ModX seems easier to understand.) If we want to build our own in CakePHP, we should do some knowledge transfer from John or anyone else in the group who has worked with it, have some design meetings, make a dev plan and fork the group into coders and content developers so we can work in parallel.
If we’d prefer to handle the site as a set of pages, then any of Concrete5, SilverStripe or ModX will work fine and we should choose the one with the page model that most closely matches our content structure. I tried to get this done over the weekend but it is a significant amount of work – a couple hours for each one probably – so I wanted to make sure that we actually need it before doing the work.
Please let me know your thoughts and if there’s any questions I can answer.
some UI libraries for the prototype website
Per Colleen’s request, here are a few popular JavaScript UI libraries we could use for the dynamic elements of the prototype website.
The first, most popular one is the venerable scriptaculous. It does require another, lower-level library called Prototype, which is a heavy download at 140k. BUT someone has done the web a favor and managed to super-ultra-compress it down to 14k, which is quite acceptable.
Scriptaculous is very popular, and lots of people have written stuff with it that is available for anyone to use – check out this set of awesome tooltips, for example. But it does pretty much anything we’d need out of the box, and it’s very well documented.
The second candidate is jQuery UI, which is built on the other major JS framework, jQuery. I haven’t used jQuery UI, but it seems to do about the same stuff as scriptaculous, and it is also popular enough to have some free extensions / implementations, like these tooltips.
And then there is YUI, which is a standalone UI library. It is also in wide use and does pretty much anything we’d need.
My recommendation would be that whoever is building the front end code should pick whichever one they’ve worked with before, to minimize dev time. If all three are unfamiliar, I guess I’d recommend Scriptaculous because I’ve used it and I remember it being pretty straightforward.