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!
This means I can grab much of the source code and javascript and, more importantly, the poor users who have struggled to learn the category interface won't have to learn a new one, they can just use their existing skills to manipulate these new features.
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.
Tags: movabletype, Movable Type, Movable-Type, Blog, Blogs, Plugin, Plugins
Hi Jesse, that looks really cool.
I've actually implemented the mt-staticpages plugin already. Let me know if you want to play with it.
Best,
Dug
Hey Dug!
I've been thinking about something similar, though perhaps your page hierarchy is a bit too confusing. Why not just allow users to define where they want the page to publish using the basename field as your springboard?
I don't know, I'm still up in the air about Categories in static pages. Anyway, here's my take on it: http://www.movabletweak.com/plugins/plugin_concept_mtpages.php
I think you're on to some good stuff here. I've often wished for a static page ability.
I use a date-based archive structure, which really doesn't lend itself to having an "about" category, like Mark mentions. Starting another weblog for the purpose of static entries published in a category-based structure works well, but becomes yet another set of templates and URIs to update if I want to change something Ideally, by having the static pages in my regular weblog, I can avoid some of that.
I look forward to trying this out!
...so Shelley posted the link:-)
Thanks Mark, the core entries/categories suits me fine on the whole.
I need a system that will allow someone to create static content without needing to make a mental leap. If someone (without category privileges) wants to make an "about me" or "authors" page, it isn't intuitive to create a category called "about me" and then add a post. Also, when it comes time to edit the text of that page, it isn't intuitive to have to go digging through old posts looking for the one that displays on that page.
Finally, if a user wants to structure a site with a heirarchical tree of pages, categories as they are don't really deliver. That said, you could certainly just rename the category interface and serve it up as the way to create static pages.
I'd like to refine the system so that the data type is obvious to the end user.
As well as static pages I also need to include link lists (or whatever Typepad calls it).
From the user's perspective, being able to say "new" + whatever (blog post, static page, linklist) seems pretty intuitive.
Hi dug,
Most of your description makes sense. However, I don't fully get the greater purpose here. With a few execeptions, it seems very similar to creating entries and assigning them to categories. What is it about the core entries/categories system that doesn't meet your needs?