Published on (
 See this if you're having trouble printing code examples

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.

UI Skinning

For UI specialists, Plone uses a powerful metaphor for customizing the default interface to your preferred look and feel.

Skins are a collection of layers, which contain through-the-web (TTW) customizable UI components such as standard page headers, footers, and images, as well as functional components such as Python scripts. Each layer often (though not necessarily) maps to a directory on the filesystem made visible through the Plone interface.

portal skins interface
Figure 5. All of the layers registered on the site

skin layers configuration
Figure 6. Configuring the layers that belong to a skin

With this approach, it's easy to customize things like the header of your Plone site, the main logo, the behavior of the search box, or even what the system does when a new member registers. For example, you may require payment to join the site, and thus you may want to customize the join to take the user to a payment screen after submitting a registration. Of course, your site can have multiple skins from which the user can select, or which depend on whether the viewer accesses the site from the corporate intranet or the Internet at large.

Standards Compliance

The Plone UI team is a combination of both graphic designers and usability specialists. This produces an end-user experience that is not only visually pleasing, but also works in ways you would expect. In cases where JavaScript provides advanced features such as drop-down menus, you're nearly sure to find another way to perform the same function without requiring that your browser support JavaScript. You can add a new piece of content to the folder, from either a JavaScript or an HTML drop-down menu.

The UI team has also gone to great lengths to ensure that the Plone interface looks the same in all of the major browsers, including IE6, Mozilla, Safari, Firefox, Opera and several others. This represents a good example of cross-browser compatibility that other projects (open source and proprietary) would do well to follow.


In any multi-user application, it's important to have the power to configure the system to the finest detail so that each user can do everything that she needs to do--no more and no less.

In Plone, a member belongs to zero, one, or more groups. Each group has zero, one, or more roles attached to it. Each role has zero, one, or more permissions granted to it, depending on the context of the object being accessed in the site. Zope's access permissions apply to methods of classes, limiting the level of granularity to which you can configure your site's security only by your determination to keep users out of places they don't belong.

group assignments
Figure 7. Assigning users to groups

group role assignment
Figure 8. Assigning roles to groups

ZMI security configuration
Figure 9. Assigning permissions to roles


Because Plone is built on top of Zope and the Zope CMF, you can build reusable extensions for your Plone site in a manner very similar to any other Zope-based site.

A product is a bundle of functionality, written in Python, that plugs into your Plone site. I already briefly mentioned the CMFMember product as an example. There are Plone products available that provide everything from bug collectors to discussion forums and full-blown e-commerce applications! Because a product is just a chunk of Python code, the complexity (or simplicity) of a product is up to its author. In the common case, a product will register its own layers in a skin, offering the same ease of customization as Plone itself.

Installing a Plone product is usually as easy as dropping it into the Products/ directory in your Plone installation and going to the part of the Plone UI that allows you to install and remove products.

quickinstaller screen
Figure 10. Installing and removing products in a Plone site

New Content Types with Archetypes

By definition, a CMS is all about its content. Easy things should be easy and hard things should be possible.

In a CMS framework, creating new content types should be easy, and extending those new content types to provide more complex behaviors should be possible. To accomplish this, Plone provides the Archetypes framework as part of its standard release. The goal behind Archetypes is to allow a programmer to create new content types quickly, turning feature requests into working code in a matter of hours or even minutes.

Fun for Users

Plone provides a complete, ready-to-run application right out of the box that includes all the features we've covered in this article. There are freely downloadable Plone release installers for most major platforms. Even non-programmers with a bit of technical savvy can have at least a basic installation up and running in minutes.

Fun for Developers

If you're going to do something, you might as well do something you enjoy. Being a Plone developer is a heck of a lot of fun.

The Plone development team includes a wide range of individuals--Python programmers, usability experts, translators, graphic designers, and document writers. If you're interested in helping out, you're sure to find somewhere that your skills can be put to use. Plone has appeared at technical conferences around the world, and now has its own annual Plone conference, the second one being held in Vienna, Austria from September 20 to 22, 2004. In addition, you can participate in one of the many development sprints (intense, several-day development sessions that bring together Plone developers from around the world into the same room to accomplish a set of specific tasks) going on all over the world, held at venues including the Plone Conference, in the Swiss Alps, and even a castle in Austria!

If you're not a developer, a wide range of companies offer Plone training and consulting services, so you're almost sure to find someone with the skills to meet your company's content management objectives with Plone.

Who's Using Plone?

Plone has found its way into serving up content for research institutions, Ivy League universities, ISPs, space agencies and more. Here's a brief list of sites built with Plone:

This represents only a partial list of Plone users, of course, but provides a sampling of the wide variety of organizations from all over the world that are using Plone.


Plone is a powerful and robust framework for allowing users at all levels of your organization to add, edit, and remove content from your web site in an easy-to-use and secure way. Future articles will explore in greater depth Plone development topics such as defining workflows, customizing the look and feel of your Plone site, and how to create new content types.

Brad Bollenbach is a Plone and Zope consultant, trainer and writer. He has done Plone work for clients around North America and Europe and has given Plone training courses in both English and French. He was a speaker at EuroPython 2003 in Belgium.

Return to the Python DevCenter

Copyright © 2009 O'Reilly Media, Inc.