Demands of the Ideal: The Perfect CMS
There are a lot of content-management systems out there, but none that I have found has been able to do all that I want it to do. (Note: I wrote this article a year ago, but did not publish it, thinking it incomplete. Well, the need is still real, so I am publishing it!)
- Driving principles:
-
- It's my site. I want total control.
- It should be easy to use.
- Smart server-side caching
- For all users who are not logged in, just generate the page one time and cache the output. After a set period of time and also after changes to the site, dump the cache.
- Powerful yet simple skinning
- It's my site. I want to be able to control every character output to the browser. The ideal CMS would provide concise documentation to let me know how to make a powerful template, how to change the output of forms, etc.
- Smart client-side caching
-
Drupal's absolute worst offense is setting immediate cache expiration dates for the admin pages. When creating or editing content, if you (like I did) click a link that will explain the input format, it opens in the same window. Hit "back" and all your changes are gone. There should be two layers of protection here: On navigating away from an unsaved form, you should get a JavaScript
confirm()
dialog box warning you that your changes may be lost. Secondly, there is no reason the page has to expire so soon anyway. Those global quick expiration times just force your server to do more work.Of course, all pages, unless I say so, should probably just cache on my machine anyway. It reduces stress on my server and speeds up the operation of the
Back
button. - Hierarchical structure
-
I should be able to say “The page ‘hacks’ is under the page ‘CSS’” and let the CMS automatically:
- Position it appropriately in the menu
- Assign it the URL “/css/hacks”
- Place it in the RSS feed for the CSS section of my site
- Consider it related to other articles under ‘CSS’”
- Tag the article with “CSS” and “web design”
- Generate breadcrumbs navigation (if so desired)
- Page types
- It's only logical that pages should fall into different categories, or "page types." Some pages should allow users post comments, for example, while error pages should clearly not. (Neither should they have page hit counters.) The site admin should be able add and modify these page types.
- Highly configurable input formats
- If I want to be able to allow users' comments to link to
Wikipedia articles by using
[[Article]]
syntax, or evenwikipedia[Article]
syntax, I should be able to let them, without reading manuals for days to figure out the grisly innards of my CMS. - Semantic, expandable WYSIWYG
- You know what? After I allow my cool syntax for linking to Wikipedia, I'll want users posting comments to know that. It should be easy to add a button to a WYSIWYG text editor to let them link to Wikipedia with my syntax. Furthermore, I hate WYSIWYG editors that only have one Italic or Bold option. Dammit, this is 2006, and I'll never be able to write for A List Apart if I don't use <strong>, <em>, <var>, and <cite> where semantically appropriate.
- Automatic, default Unicode support
- It should also automatically convert Microsoft's nonstandard, moronic “smart quotes” characters (which often show up ?like this,? as question marks or hollow blocks, on the web) into the appropriate real Unicode/ISO characters.
- Fabulous Comment Support
- Allows users to reply to other comments
- But the admin can turn this off
- Allows the admin's comments to be visually distinguished from normal comments
- Optionally ties in with third-party comment services
or standards
- Gravatar
- CoComment
- Whatever
- Spam Control, ideally expandable, but should be strong right from the get-go.
- Control which pages can accept comments
- Per-page
- By page type (e.g. not on error pages, but on articles)
- By time (e.g. pages newer than 3 months)
- Pingbacks & Trackbacks
- Allows users to reply to other comments
(Demands of the Ideal
is a reference to The Wild Duck by Henrik Ibsen.)