- A content management system using Zope, named after the band above.
As you may know, Zope is a Python based web development, object oriented, framework. It's quite low-level though, you end up writing login pages, edit forms, user groups, all the things common to content management sites every damn time you create a site.
It gets tiresome.
This is where Plone comes in, out of the box it's a perfectly usable, feature packed CMS. There is support for events, news, documents, pretty much all you need to run a small community website. The real power comes by adding new "Products" to Plone to extend it the way you would any Zope application.
Who are the Plone guys
Well, the big name is Alexander Limi, who started this all off. There are lots of very active developers, as can be seen on the plone-users or plone-developers sourceforge lists, or on #plone (freenode). Plone is legally administered by the Plone Foundation, which is a charitable foundation (so donate to them!).
This feature list is taken almost verbatim from Plone.org, as there's no way I can give each function the space it deserves. I'll describe some of the biggies below.
- Inline editing
- Working Copy support
- Link and reference integrity checking
- Automatic locking and unlocking
- Easy collaboration and sharing
- Versioning, history and reverting content
- Powerful workflow capabilities
- Flexible authentication back-end
- Presentation mode for content
- Support for multiple mark-up formats
- Support for the search engine Sitemap protocol
- Wiki support
- Automatic previous/next navigation
- Full-text indexing of Word and PDF documents
- Rules engine for content
- Always-updated table of contents
- Portlets engine
- Outstanding multilingual content management
- Time-based publishing
- Human-readable URLs
- Powerful page editor
- Flexible navigation and always-updated site maps
- Resource compression
- Powerful caching proxy integration
- Drag and drop reordering of content
- XML exports of site configurations
- Localized workflow configuration
- Adjustable templates on content
- Powerful standard content types
- Content is automatically formatted for printing
- Standards-compliant XHTML and CSS
- Accessibility compliant
- Pervasive RSS feed support
- Automatic image scaling and thumbnail generation
- Comment capabilities on any content
- Microformat support
- WebDAV and FTP support
- "Hot backup" support
- Cut/copy/paste operations on content
An archetype is a type of product that extends BaseContent. BaseContent is a content type that gets its fields from a Schema, and generates edit/view pages on the fly. By extending this it's possible to create a new content type with a couple of lines of code, and have all the heavy lifting done for you. Almost all Plone products are Archetype based.
ArchGenXML is really the killer app, it converts .xmi files created by a UML tool such as ArgoUML to Archetypes. No fuss. Most of the features of UML class or state diagrams are converted into fully installable python code. Another Plone user once boasted that his colleagues could create a blog in 5 minutes without writing a line of code. I fully believe him.
Archetypes itself is extendible, fields can be created in Python, as can widgets (their display methods) and added to your new content type, and reused by other people. It's rather nifty.
Workflow is the state-machine of Plone. Each type has a workflow assigned to it (exceptions can be made on a per-folder basis) which determines what access different groups of users have at different times, and what actions may be performed on an object.
The standard Plone workflow works like this:
Private <---> Public Draft <---> Pending ---> Published
/^\ | |
Where Private objects are visible by their creator and the admins, Public Draft and Pending are visible by everyone but often missed out in searches or listings, and Published are approved site content. Only admins can move something from Pending to Published. If you wanted, it'd be easy to make things only pubishable on a Tuesday, or any arbitrary rule expressed in python.
Any time an object goes through different states, workflow is used, as custom workflows are easily written through the web, or with XML.
Marshall is a small, often neglected feature, but a damn cool one. I can sum it up pretty quickly… It allows you to create scripts that convert Plone content to something else, and vice-versa. The default is XML, but you could use it so FTP gets to your address book folder were converted to vCard, or all sorts of snazzy stuff.
LinguaPlone is a 4 line addition to any archetype that makes it instantly multi-lingual. An administrator can configure available languages and then translations of any content type can be made. All Archetypes fields can be translated, and the correct translation is automatically shown based on user preference or HTTP headers.
As the static text in Plone has excellent i18n support, it allows for a very flexible translated environment. I recently created a site that included Chinese and Farsi versions of the same content.
Zope2 loves TTW customisation, Zope3 loves XML. If only there was some sort of tool that allowed the TTW customisation of Plone to be saved as XML and re-imported at …
Generic Setup can do pretty much anything that can be done through the ZMI, and different "profiles" can be run when creating a new Plone site. If you've ever had to restore a website from a backup without content, you'll appreciate how nice it is to have all the customisation stored as XML, so a clean site can be rolled out in 3 clicks.
Generic Setup itself can be extended to know about more XML files, so your own extensions to Plone can be GS aware.
Kinetic Style Sheets
KSS is a AJAX definition language similar to CSS, such as (plone.org):
Their use warrants its own article.
Towards Zope 3
Now, Zope3 is a strange beast, it's pretty anti-TTW, unlike Zope2 where it was almost impossible to avoid TTW customisation. Everything is based on interfaces, listeners, adapters, all sorts of nice software engineering concepts, hooked together using XML.
Under Zope2 subclassing an object was common, but this lead to many discussions in the Plone community. Was a podcast fundamentally different from a blog entry, or did it just behave slightly differently? Should they display in a similar way, if so all the code would have to be changed to accept your new podcast as a type of blog entry. What happens whe you want to start vloging?
Zope3'll save us!
Under the Zope3 way of doing things, which was brought in with Plone2.5 and is impossible to escape in the upcoming Plone3, you don't subclass a type for things like this, you provide a way of Plone realising that you want to extend a specific blog entry, and bits of python code that describe the differences in functionality. When a user Podcastify!s (or whatever) a blog entry, Plone combines your new functions with the existing ones, without changing the type of the object. This means you can create a product that changes somebody else's product in place, without risking any side-effects when you uninstall.
To give a real life example, GetPaid is a Plone product nearing its first release. It allows a site administrator to configure a PSP and shopping cart information to run a donation box or shop via Plone. The clever bit is, there is no shop item type, just the ability to specify what items are purchasable. Once a type is buying enabled, the admin can specify if a specific object is buyable, then provide the specific details.
So you're running a website that has lots of events on it, and you want to sell tickets for some. In Plone 2.1 you'd have installed SimpleCart, subclassed Event with SimpleCartItem, added that item to the calendar and simplecart codebases, modified or monkeypatched loads of irrelevant code, discard existing content and had a massive sad-on. Plone 3, you install GetPaid, fill in a couple of online forms, and then it's a 2 click procedure to convert existing content to buyable.
Finding Plone People
http://www.plone.net is an official (but very minimally moderated) directory of Plone companies and sites, and is a good place to find a Plone developer/host. There is also the annual conference, which in 2005 was in Vienna, 2006 was Seattle and 2007 will be Naples.
I would be remiss without mentioning Netsight, the host just down the road, who are excellent and I highly recommend them!