Python DevCenter
oreilly.comSafari Books Online.Conferences.


Open Source Content Management with Plone

by Brad Bollenbach

I'm not much of a computer person.

Great, then Plone is for you.

I need a way for people at various levels in our organization to put content on the web site, without having to call up our programmer all the time to do it for us.

Great, then Plone is for you!

This article gives a high-level overview of what Plone is capable of, with pointers to resources to help you get started on the path to building your own Plone site. Future articles will pick up where this one leaves off, exploring topics such as defining workflows, skinning a site, and creating new content types quickly.

Introduction to Content Management and Plone

The workforce is full of individuals that require at least some technical savvy in order to perform their jobs. People in all levels of an organization use their skills with word processors, spreadsheet applications, presentation software, and the like to create content important to their organization. In many cases, that content needs to appear on the company's web site. Call up the programmer ....

What if those same people who create the annual reports, call in the ad for the tacky leather couches they want to sell, write the feasibility assessments, and file trouble tickets when their Internet service goes down could add the content to the web site themselves?

With Plone, they can!

Plone is a content management system (CMS), built atop the Zope web application server, and Zope's Content Management Framework (CMF), a powerful framework for building CMSes. It empowers end users at every level of an organization to take the content they create and add it to the company web site themselves, without the need for programmer intervention.

Of course, the rules of who can add what kind of content and where become much more complicated than that. For the complex needs of organizations large and small, Plone offers several useful features out of the box, including membership management, workflow, internationalization (i18n), UI "skins," standards compliance, and a host of security features to restrict users' editing privileges to allow them to do their jobs without inadvertently interfering with the work of others. For Python programmers, Plone is easy to extend using "products," a Zope metaphor for creating site extensions that can easily plug into other Plone sites. It's also quick to create new content types with the use of Plone's Archetypes framework.

The remainder of this article will explore these features in more detail from a technical perspective. As of this writing, the latest release of Plone is version 2.0.4.

Freely Available

Plone is available under the GPL, with some Zope-specific bits licensed under the ZPL, a Zope-specific license. The software is free to download, explore, and customize to fit your needs. Because the system is openly available, bugs that appear often have quick fixes. And because developers have the full source code to the system to explore, they can offer a level of expertise with this system that is difficult or impossible to achieve with proprietary alternatives.

I speak from experience; occasionally my project work has discovered a bug in Plone itself. We've almost always fixed it ourselves. In a proprietary system, you're at the mercy of your vendor.

Membership Management, Authentication, and Authorization

A basic requirement of any site that supports multiple users adding content is the ability to create those users in the first place. Plone offers full support for new member registration, member preference editing, extending members by adding new properties to store about them, member searching, password reminders, and much more. More recently, we have begun to add "workflowable" members. In essence, this allows you to define an approval procedure for members such that a member account could be in various states, for example, "pending payment," "basic member," "full member," etc. From there, you can define access privileges to members based on their states.

Plone join form
Figure 1. New member join form

To learn more about making members workflowable, check out CMFMember (also, incidentally, a good example of a Plone product).

It's also easy to store the member property values in an external data source such as MySQL or PostgreSQL.

plone memberdata form
Figure 2. Member property management screen


In a site with many members who each carry their own responsibilities in an organization, it's often necessary to define an approval procedure for a document or other piece of content to add to the site.

Workflow provides a way to define a set of steps through which a piece of content must pass before publication. Each step represents a transition. Each transition brings the content into a new state. Each state has permissions assigned to it that determine who can view or modify the content and how that should take place.

For example, anyone may view a publicly published news article, but an "approved" out-of-office request may be viewable only by other internal employees. Transitions are scriptable, so you can do things like send an email to a reviewer when a user submits a piece of content for review.

plone workflow dropdown
Figure 3. Workflow actions


English is the language of business. Many organizations need their content accessible in other languages. Having lived in countries where the official languages have ranged from English to French to Russian and Lithuanian, I promise that this is true. :)

Plone supports internationalization ("marking" content in such a way as to make it translatable) and localization (the actual translations themselves). Out of sheer laziness, we often refer to these as i18n and l10n. Translation is possible without the need of a programmer.

plone in german
Figure 4. The Plone UI in German

Plone's i18n and l10n support extends from both the content objects in the site up through to the Plone UI itself. Plone is currently available in around 40 different languages.

Pages: 1, 2

Next Pagearrow

Sponsored by: