Miniguide to the z3ext framework
Recently I've started working for a project that uses the z3ext libraries, written by Nikolay Kim, the same author as CMFBoard. The library is open source and makes a good effort in bringing a higher level framework on top of Zope 3, to make it possible to build general purpose CMS similar to Plone.
Being a new framework for me, the best way I know to learn it is to document it, so I'm adding notes and quirks that I note. Don't take what I write here as 100% truth, as I may rush to write here or misinterpret what I'm seeing. So standard disclaimer applies. :-)
Quirk 1: most of the time, when the word "publisher" is used for a package or module, it usually provides what the rest of the zope community calls "traverser"
Quirk 2: some packages contain reimplementation or wrappers over third party (or even basic zope) utils, in order to provide some hard-coded defaults that would otherwise require configuration from ZMI.
Quirk 3: there's little documentation inside or outside the code, no "high end overview", not much documentation on interfaces.
| package | Description |
|---|---|
| actions | A namespace traverser which returns an action object that has a certain page registered on it. Example: <adapter name="z3ext.auth.principal" provides="z3ext.principals.interfaces.INewPrincipalAction" for="z3ext.principals.interfaces.IPrincipalsManagement *" factory=".principaladd.newPrincipalAction" /> <browser:page for=".principaladd.INewPrincipalAction" name="index.html" class=".principaladd.NewPrincipal" permission="zope.View" /> <class class=".principaladd.newPrincipalAction"> <require permission="zope.Public" interface=".principaladd.INewPrincipalAction" /> </class> |
| authentication | A principal folder implementation with principals that login with their usernames, searchable principals, TeamSpace style groups plugin |
| cache | Utils to provide site based caching strategies for content (modification date based, etag based) |
| catalog | Extends zope.app.catalog to implement a security aware catalog and index sorting. |
| common | Various utils used inside the other packages |
| content | A base class content type (Item), a content item factory and zcml extensions to declare classes as content items. |
| controlpanel | A framework that implements a persistent control panel (similar to Plone's control panel) which receives configlets registered through ZMI |
| cssregistry | An extension to z3ext.zrtresource which allows defining global css variables to be inserted in site stylesheets |
| extension | Makes it possible to define packages as extensions, which are registered per portal |
| folder | Basic Folder implementation, integrated with the z3ext framework |
| form | Widgets and basic form classes to be used in z3ext forms |
| mail | A "mail receiver" service, customizable per user and with its own preference pages |
| ownership | Makes content "owner" aware and provides a local roles framework for content |
| permissionsmap | Allows setting mapping permissions to roles on a per class basis |
| portal | The site and content container |
| portalmessage | A session based global message dispatching service, similar to the status message in Plone |
| principals | Defines and manages principals |
| product | z3ext.extension installer and configlet |
| publisher | Defines a pluggable traverser and has several zcml extensions to define resources (directories, files, images) |
| relationship | Basic relationship engine |
| resourcepackage | Package similar to zc.resourcelibrary |
| security | A replacement for the default zope security policy |
| skin | The default z3ext skin |
| transport | Base for packages that provide transport means?? |
| workflow | A basic state-based workflow engine |
| zrtresource | Extensions to z3c.zrtresource |