Introducing Plone

Is Plone the killer app that will bring Zope-based content management to the masses?

One of the biggest reasons for the success of the Apple II computer in the late 1970s was not a product of Apple Computer, Inc. Rather, the first spreadsheet, VisiCalc, written by Dan Bricklin and Bob Frankston, helped propel sales of the Apple II. VisiCalc was a revolutionary product, and it worked only on Apple computers. Businesses everywhere began to buy Apple computers, simply so they could have VisiCalc.

It turns out that Bricklin and Frankston hadn't invented only the spreadsheet. They also had invented the killer app—an application that makes a platform so compelling, people adopt the platform for that one product. Every platform vendor hopes someone will produce a killer app for its product, driving up sales of the platform technology as more and more people want it for themselves. Things are not much different in the Open Source world, although different motivators exist. For example, many people have adopted Linux in order to use Apache or Python to work with Zope.

The latest example of a killer app in the Open Source world is Plone, a content management system (CMS) written on top of Zope by Alexander Limi, Alan Runyan and Vidar Andersen. Plone has become an increasingly prominent piece of software in recent months and has brought many people into the Zope community. And although many Plone users seem to stay within that world and don't venture into the depths of the Zope server, Plone may well be the killer app for Zope. If true, this would be a fascinating trend, given how Zope has long been considered the killer app for the Python language.

What Is Plone?

Plone is a simple CMS that allows a site administrator to grant different privileges to different users. All users can read publicly available content. Some users are allowed to enter new content, and other users are allowed to publish that content to the general public. Indeed, the distinction between available and published content is what most distinguishes a CMS from a run-of-the-mill web site.

In contrast with a static web site, where files are available to the public as soon as they exist in the root document directory, a CMS allows you to expose content selectively. Moreover, a CMS allows you to retract previously published content. So if your site publishes a news story that turns out to be false, you can remove it from the public's view without actually having to remove any files. A log of when the story was written, published and retracted, along with who performed each action and the reason why, is available to site administrators at all times.

Plone is not designed to be the be-all and end-all of content management systems. Rather, it is meant to be used on small- and medium-sized web sites whose administrators want to provide a variety of useful features, prefer a nice user interface and need the ability to customize the site's look and feel to a certain degree.

Plone itself is implemented as a number of different Zope products, where each product is actually an object class that can be instantiated multiple times. However, Plone is not implemented directly in Zope but within Zope's content management framework (CMF), a set of objects and APIs meant to make it easy to create your own CMS.

Plone 1.0 was released prior to this writing, in early 2003, and depends on CMF v1.3, which was released in mid-2002. Just as a desktop application uses many of the facilities that the underlying operating system provides, Plone, or any CMF-based CMS, uses the capabilities that the CMF provides. Plone sites thus offer full-text search and the ability for community members to comment on any content object. As the CMF improves and offers more services, I expect Plone also will improve.

Installing Plone

If you already are running Zope, installing Plone is quite easy. Remember that every Zope product must be installed in the lib/python/Products directory within your Zope directory. In addition, Zope must be restarted either manually or from the web-based control panel in order for newly installed products to be seen and registered.

Before you can install Plone, you must install the latest version of the CMF. Retrieve CMF-1.3 from, which comes as a gzipped tar file. I put the tar file in /tmp and installed it as follows:

# cd $ZOPE/lib/python/Products
# tar -zxvf /tmp/CMF-1.3.tar.gz

The CMF-1.3 directory created in lib/python/Products contains a number of CMF-related products that Zope needs to locate at startup. We therefore create a number of symbolic links to the product directories:

# ln CMF-1.3/CMFCore .
# ln CMF-1.3/CMFCalendar .
# ln CMF-1.3/CMFDefault .
# ln CMF-1.3/CMFTopic .
Now that the CMF is installed, we can install Plone as well. Retrieve a tar file of Plone from, place it in /tmp and expand it:
# cd $ZOPE/lib/python/Products
# tar -zxvf /tmp/CMFPlone-1.0.tar.gz
As with the core CMF product, you must create several symbolic links in the Products directory, so Zope can recognize them when it starts up:
# ln -s CMFPlone-1.0/CMFPlone .
# ln -s CMFPlone-1.0/DCWorkflow .
# ln -s CMFPlone-1.0/Formulator .
If you are using a version of Zope prior to 2.6.x, you might need to create a symbolic link from another product to the main Products directory. Check the Plone instructions to be sure.

Make sure the CMF-1.3 and CMFPlone directories and their contents are owned by the same user as the one as which Zope runs. This is normally a user named www or zope. Running Zope as nobody, which used to be considered a safe option, is no longer recommended. If the appropriate user does not own the files, you could encounter some odd ownership and permission problems.

Now you have installed everything you need to create a site managed by Plone. Start Zope, log in as a user with administrative privileges and you're ready to go.