This is just me thinking out loud again....
CMS To Do List:
- Have nice URLs
- So use Mod_Rewrite
- But see if you can make it optional so as to reduce the requirements
- Be extensible
- Modules
- Templates
- See if you can integrate Smarty
- Have an API to access the database. No one touches the database directly.
- Caching
- Customizable schedule
- Per page
- According to a given action
- When a comment is posted, regenerate the page
- When a new weblog entry is posted, regenerate the page
- Metadata
- Each document has meta data. Automatically available to any user of the document.
- As part of extensibility, each module author can store whatever meta data he wants to.
- Default modules
- You can stick comments (nested if you want) on anything.
- Administration
- Multi-user
- Customizable permission levels
- Site-wide data
- Name of site, administrator e-mail, etc.
- Any type of document is "revisionable".
- You can store multiple revisions
- Go back to an older one, etc.
- Search: everything is searchable.
- MySQL is nice to us with a full text search
- Implementation details:
- Everything that is user-editable is stored in the database.
- That way you can edit everything through the web
- All objects can be exposed through XML-RPC, I suppose
- Also, an optional daemon will be available that will expose all objects through FTP.
- Database independence?
- Target MySQL first, for obvious reasons
- ADOdb or PearDB?
- Nice features:
- You can use StructuredText in any kind of document.
- This goes well with Wikis, but you can use it for your pages, weblog, etc.
- And of course, it has to be fast or it's not worth it.
I just read PostNuke's module developer information. It was interesting to read, because I'm taking a completely different approach, at least to data storage.
Everything (except metadata and comments, most likely) will be stored in one "documents" table. Each "module" will "own" a document. What's nice is that if you have a weblog post and you want to reuse the content for something else, you can hit a button to copy it over and make it a wiki page, or an article, or a regular page on your site.
You may already have thought of this, but: for making the URLs nice, consider having your script get the name of the requested page from the path info, rather than from the cgi query string. This way it looks fairly nice even without mod_rewrite, it uses a very simple rewrite rule, and it should be pretty easy to make rewriting optional.