Well, I’ve been thinking about finding a low cost CMS that has both good static page management and nice blogging tools like Movabletype and have looked at a number of options.
If it’s important to stay with static page publishing for scaling and server resource reasons and you believe PHP has too high a security maintenance overhead for your project, the options start to become quite limited.
In any case, we’re still evaluating a couple of options but in the meantime I set about thinking about how one could customise the Movabletype interface in such a way as to integrate static page handling. I set myself a number of requirements:
- The system would have to allow users with no settings or template-editing priviledges to create static pages (ie I didn't want to go the index-template route)
- If possible, the same user should be able to edit the heirarchical tree of pages using an interface she had already learned
- The user would have a choice of templates to apply to the new page (these templates to be edited and created by an admin user using the standard template-editing tookit)
- The user can choose between standard and index-list page types. The index list page type supports lists of authors, lists of file downloads etc.
So I’m working on an idea. I’ve created a new data type, the ‘static page’. In MT-speak, it is the same object as an entry, but with a few more properties. It has the following additional attributes:
- family relations (parent, child, sibling)
- page template association
- page type definition
The idea behind describing pages this way is to make them similar to entries. This way users familiar with the concepts of creating new entries and associating categories to them might not freak out at the idea of creating new static pages and assigning a parent to them.
By the same token, if you’re familiar with the behaviour of the “entries” function, you’ll probably be happy with a “pages” function (one lists all entries, the other all static pages).
So I’ve got a new object, now how do I manipulate the hierarchical tree of page nodes? What interface do I use to manipulate the relationships between pages?
Well, here’s a theory: you use the same interface Movabletype provides to manipulate hierarchical lists of categories. Now, hold on there, I know I’ve said before that I hate this interface and yes, I still think it’s unfeasibly clunky and unintuitive (sorry Ben, no offence intended), but it exists!
Here’s how the “manage static pages” screen might look (click for a bigger version) sorry about the crap graphic quality, had to do this in a hurry, will correct details on images asap:
And here are some close-ups of the new attributes being selected. In this case, the user is creating a new page about leaflets in the “publications” section. The page is a child of “publications” and becomes a sibling of “essays” and “white papers”:
The page type is selected (in this case a standard page):
And finally, the user chooses her pre-prepared templates to associate with the new page. In this example, an admin has created a template expressly for the new publications section:
The “adding a static page” screen would look very similar to the existing “new entry” screen, also reusing as much code as possible:
Has anyone out there been working on anything similar? Feel free to chime in.