Want to revisit this again internally before we push it back out... lots of good stuff was said
starting here about the complexity we’re experiencing in describing MODx/Tattoo. I’ll summarize where we might think about going here, then post a couple more thoughts that affect the table structures making a few more complex, but elliminating a lot. I also REALLY want to break any possible legacy associations with Eto... I think that could wind up imposing a too-limiting perception of what MODx/Tattoo is really capable of... not likely, but if it only does it for a few key individuals, then it’s too many!
Tattoo 101
Control Panel
Where you control content and configuration of the entire software install. Target for rewriting this without frames 0.9.5 before end of ’05.
Templates
The centerpiece of MODx around which most things associated with pages revolve. The central gatekeeper almost with the exception of special applications. We should move several items to be template-focused, rather than page-focused as it is currently. This could include things like content type/disposition, and default states for meta-content, searchable, cachable, etc. Defaults should be automatically inherrited by each new page, but should also be overridable on a per-page basis in an advanced settings tab for each page.
There also needs to be a simple and direct way for people to quickly create different types of content, like a shopping cart products page, a blog, etc. Do we need sub-templates, or content templates, or content settings?
Content
What end users interact with in Tattoo/MODx, typically a web page. This can also be a CSS file, a javascript include, downloadable document, etc.
[*Content Fields*]
You can have as few or as many content fields associated with a page in Tattoo/MODx as you’d like. They can be simple text fields, WYSIWYG text editors for complex data entry, pop-up lists, radio button options, etc. [*content*] is automatically defined for every page that is created in Tattoo/MODx.
Intermediate Tattoo
[[Plugins]] (Snippets + Chunks + Plugins)
Blocks of text, HTML or code that may contain application logic, that are typically reused multiple times in a site. These are "plugged into" a page when and where needed. For example, a Plugin can be the static footer on a website, or a dynamic block of code that generates the site navigation menu as pages are added, moved or removed. Plugins can also optionally be tied to specific events.
Plugins should have developer-defined controls such as the events that are applicable, a flag for being "static" HTML only (chunk), a flag for always being non-cachable (eliminates the "[!" calls), and other things to put more control in the hands of the developers, while making it less error-prone for new users.
We might even consider implementing an optional "structured" header format (most likely XML-like) that when copying/pasting snippets in and pressing the magic button, applies all these settings for end-users automatically (name, description, copyrights, events, etc). Other thoughts:
- I’d also like to see the configuration parameters header inlcude to set in an advanced Plugin insertion section
- categories for plugins (for easier organization on the now-snippet tab which could be tag-based in fact)
- a "show in menu" equivalent
- Consider an import from file upload button as a "mini-installer"
Widgets
Small extensions/behaviors that take a piece of text or data and transforms it into (typically) more complex elements with dynamic interaction. For example, Rich Text Editors, pop-up list input boxes, display grids, button builders, and more.
It might be really cool to use a way to define Widget behavior, and the recently introduced Front End Editing, with a modifier on content fields. That way they could even be chained. For example: [*content:editalbe,datagrid*]. This is similar in context to how scriptaculous handles chained effects.
Tattoo Grad School
[+Placeholders+]
Undefined system resources that are generated on the fly by code to represent various pieces of data.
Need an easy to understand example here. This also could include Adam’s idea of mergin system settings to this as well.
Modules
Alter or extend the way the core system behaves across the board. Can be as simple as a single file performing a very spefic override to a manager API call (with no interface) or as complex as a full-blown application integration with an integrated management interface.