Content management with Plone 3.0

The Plone Zone


The simplicity and power of Plone make it the open source CMS of choice for sophisticated sites. Plone 3.0, which was released in August, brings many improvements and enhanced support for enterprise applications.

By Jan Ulrich Hasecke

bigway, photocase.com

The class of tools known as Content Management Systems (CMS) includes everything from forum software such as PHP-BB, through weblog programs like Wordpress, to complex systems such as Typo3. Many of these tools are based on PHP. Because most major hosting services now support PHP, PHP-based CMS applications are widespread. The PHP tools, however, quickly reach a limit if you require a high level of security, powerful access management for users and workgroups, and workflow-driven process management. In recent years, the CMS of choice for more sophisticated requirements has been Plone [1], which is based on the Zope web application server.

The Plone Project recently released a new version. Plone 3.0 inherits a reputation for right security and advanced workflow capabilities. The latest version also comes with new features such as inline editing, link and reference checking, and full-text indexing of Word and PDF documents.

Zope is a professional system and the Python counterpart to the powerful web development systems in the world of Java, such as JBoss, Websphere, or Weblogic. With its component architecture, Zope provides a rock-solid basis for Plone, making it really interesting for business-critical applications. Like Zope, Plone is also based on Python, an object-oriented programming language renowned for its elegance and simplicity.

The highly readable Python code is useful for projects in which teamwork is important. Python also has one of the biggest and most active open source development communities, with 160 core developers and more than 500 extension programmers.

Plone will run on any major OS, including Windows, Linux, and Mac OS X, and there are installers that will install everything for you. If you want to try out Plone, opt for this simple approach, which effortlessly takes you to a Plone screen (see Figure 1).

Figure 1: The Plone CMS GUI after installation. Select the Get Started option for access to critical system management functions.

For professional deployment, you might prefer to build all of the components - that is, Python, Zope, and Plone - from the source code. Plone 3.0 requires version 2.4.4 of Python and Zope 2.10.4.

Plone does not require a relational database because the system uses the integrated Zope object database, ZODB. ZODB is ACID-compliant; supports undo, replication, and hot-backup functionality; and can use Zope Enterprise Objects (ZEOs) as a central database server solution to serve up data to multiple parallel Zope instances for load balancing. This makes Plone highly scalable, but if you prefer to use an SQL database, you can use object-relational mappers to bind it to Plone.

Simple Editing

Plone has a fairly intuitive GUI. Editing is integrated with the normal site layout, rather than requiring a separate editing interface. This means users can immediately see the effects of their changes, rather than fighting their way through the navigational tools of a separate editorial system. If you edit an article, the article is simply displayed with an additional frame containing the required editing menus.

Assuming you have permissions, you can click to change isolated elements on a page, such as the heading, the description, and the body text, to edit mode without affecting the rest of the page. This method is really useful if you need to make some fast editorial changes. This effect is achieved by Ajax, which Plone supports thanks to the KSS (Kinetic Style Sheets) framework [2].

Plone stores information in objects called article types. A schema exists for each article type, and users can display the schema as a form in which to enter data. The system is flexible enough to handle different types of information. Table 1 shows some standard Plone article types.

In all article types, content is categorized by means of a metadata system that complies with the Dublin Core schema [3]. The metadata lets you link different content on the website or find content in a targeted way by searching. For example, collections can list items by reference to their metadata.

Extensions for Media Types

Extensions for Plone provide additional article types, for example, for surveys or multimedia content, or they add new functions to existing article types. Developers can use the archetype framework to define their own individual article types; in many cases, web front-ends are available to help you with this task.

Besides browser-based content management, Plone also supports Webdav and ftp clients. A Plone folder can be displayed on a client machine as a directory in a filesystem via Webdav. You can therefore store Office documents directly in Plone from Word or Open Office.

Input Options

Users can choose fields, drop-down menus, or radio buttons to enter input. Plone also has many options for creating body text with headings, bulleted lists, integrated images, and links. Plone supports mark-up languages such as Restructured Text, Markdown [4], and Textile [5], which it converts to HTML after saving. Techies will appreciate these input formats, which offer a convenient, simple, and fast approach to entering formatting commands via the keyboard.

Most users will tend to prefer the Kupu text editor, which has menus reminiscent of other major word processing programs (Figure 2). Besides various default styles, Kupu has tools for entering tables and embedding links, images, and videos. Plone removes potentially harmful HTML tags before saving. Kupu runs on Internet Explorer and Mozilla browsers, but it does not support Konqueror, Safari, or Opera.

Figure 2: The integrated Kupu editor lets users without HTML skills enter and edit content.

Access Management

Thanks to its well-considered access management scheme, Plone supports collaboration between larger user groups in a secure web environment. Collaborative editing of information on the one hand and trustworthiness on the other hand are the requirements that demand maximum flexibility from a CMS on a larger website. To handle this, Plone has role-based access management that can give individual users or user groups highly granular access privileges, either globally for the complete website or locally for a specific section of the site.

Put simply, roles are an abstraction layer containing a collection of specific and granular permissions that Zope and Plone 3.0 support under the surface. Because a collection of numerous individual permissions is difficult to handle, roles provide a kind of intuitive container. Administrators can enable or disable permissions in roles at any time and thus change the configuration. Plone 3.0 defines the following roles by default:

You can assign roles to individual users or groups either globally or for specific regions of the site.

Workflows

Closely linked to access management is the ability to map workflows. In Plone, workflows define the scope of an organized editorial process. Content can assume several different states - for example, private or public. Put simply, private content can only be viewed by its creator, whereas public content is accessible to all website visitors. Users with appropriate permissions can effect state changes or transitions.

A workflow is a collection of states and transitions. Plone 3.0 comes with four different pre-configured workflows:

These workflows are all it takes to run both private websites and larger enterprise-wide intranet solutions. Within a website, you can deploy several workflows in parallel; this means that you can define a workflow globally for the whole website, but you could just as easily assign it to individual article types (for example news, images, or dates) or just set it up locally for a specific section of the website.

The site administrator has a large degree of freedom to react to the users' needs. For example, you can set up an area that is only accessible to an internal workgroup and assign the single-state workflow to give all users immediate access to new information. Another area of the site might be governed by the multiple-stage intranet or community workflow, to make sure that content is approved before it is released.

Versions and Events

Plone 3.0 has a version control system. To edit an existing article, the user first creates a working copy and edits the content in the background, while the original version remains on display to the general public (staging). After completing the edit, the author can then release the new version, compare the two versions, and even revert to an older version. Articles are locked to prevent changes by other users when the article is open for editing.

One major new feature in Plone 3.0 is event control, which automates various critical events. Administrators can link events such as creating, modifying, and deleting items, or workflow transitions with other actions in the CMS. This includes creating copies or sending notifications by email. The rules that govern how the actions occur can also contain conditions. You can specify the conditions in a menu and assign them to individual articles or folders.

Link Management

Moved or deleted content also leads to orphaned links. Plone 3.0 solves this problem by means of automated integrity checks. When content is moved, Plone sends browser requests to the new destination. If somebody deletes an article that other pages reference, the user sees a warning message and can either cancel the operation or open the referencing documents for editing.

Search functions help users find information. Zope stores content and metadata in separate indexes, which can be searched separately. Users can start a quick search of all catalogs, and if they have a Javascript-capable browser, the results will be displayed while the user is typing the search key.

If the search does not return the desired results, the advanced search feature lets users define more complex search keys and limit matches by time, status, keyword, author, or article type. In both cases, * is a wildcard and the AND and OR logical operators are supported. If the wvware or xpdf/pdftotext packages are installed on the server, Zope will also search the inside of Word and PDF files.

Google Sitemaps

Because Plone 3.0 supports the Sitemap Protocol standard, used by major search engines such as Google, Yahoo, or MSN to find new pages faster and more efficiently, cooperation between Plone sites and search engines is very efficient.

Zope Page Templates (ZPT, Listing 1) [6] allows users to create modular HTML pages in Plone. Zope has used page templates to create dynamic websites for many years, and the feature is well documented. If you want to write your own templates, the Internet is full of tools and HOWTOs. A standard page is made up of several templates. To customize, you can modify the templates or just change the way they are arranged.

Listing 1: Page Template
01 <table border="1" width="100%">
02   <tr>
03     <th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th>
04   </tr>
05   <tbody tal:repeat="item container/objectValues">
06     <tr bgcolor="#EEEEEE" tal:condition="repeat/item/even">
07       <td tal:content="repeat/item/number">#</td>
08       <td tal:content="item/id">Id</td>
09       <td tal:content="item/meta_type">Meta-Type</td>
10       <td tal:content="item/title">Title</td>
11     </tr>
12     <tr tal:condition="repeat/item/odd">
13       <td tal:content="repeat/item/number">#</td>
14       <td tal:content="item/id">Id</td>
15       <td tal:content="item/meta_type">Meta-Type</td>
16       <td tal:content="item/title">Title</td>
17     </tr>
18   </tbody>
19 </table>

Templates are responsible for displaying content; application logic, such as a search to list-specific content, resides in external scripts, thus ensuring strict separation of content, application logic, and display functionality.

Plone uses an XHTML-compliant, CSS-based, and barrier-free layout. It complies with the international W3C Standard WAI-AA/WCAG 1.0 [7] and the requirements of US Law (Section 508, [8]) relating to barrier-free websites. Web designers can use Cascading Style Sheets to change the appearance of every single element on a web page, right down to the most basic elements. This means that you can radically change the appearance of a predefined Plone site simply by modifying the stylesheets.

A special stylesheet lets users print Plone pages without irritating navigational elements. Version 3.0 also has an S5 stylesheet that renders content in a browser for presentation via a video projector. The Plone GUI has been translated into more than 50 languages, and the Linquaplone extension lets editors maintain multi-lingual content. Plone creates a copy for each translation; the copy is linked to the original.

Single Sign-on

Plone has its own authentication mechanism. To implement single sign-on, you can add an LDAP or OpenID extension to Plone; other central authentication mechanisms are supported but require more manual work.

Plone 3.0 offers registered users a personalized welcome page, or dashboard. From there, you can access information on the website in an individual way and display, say, the latest news or any new content in a custom view.

Despite the new functions, Plone is faster than ever. Tests with Apache Benchmark returned improved values for Plone 3.0 across the bench compared with v2.5.3. Alexander Limi, one of the founders of Plone, published test results on his blog showing that a page display requires less than half the number of HTTP requests compared with the previous version [9]. Additionally, the HTML pages generated by Plone 3.0 have a smaller footprint than those created with the previous version.

Faster with Caching

Dynamic page requests that run scripts and compile the final HTML page from a collection of templates hog resources. To counteract this, Plone has various caching functions that reduce the time required by more complex routines.

Although Zope has its own web server, Plone is typically deployed with Apache or a proxy cache like Squid or Varnish. The ZEOs allow admins to distribute the database and spread the load over Zope servers to scale Plone sites without having to mangle their structure.

The complexity and power of Plone does not rule it out for simple apps. In particular, the security that the Zope application server offers makes Plone interesting for the smallest of sites, especially when you consider that Plone gives you professional CMS at the press of a button. Of course, Plone really comes into its own with larger enterprise or institutional websites.

Plone is licensed under the GNU Public License (GPL). The Plone brand and the program code belong to the Plone Foundation, a reassuring fact for users thinking of investing time in Plone.

Update or Wait?

Plone 3.0 has many new functions that will make working with the CMS much easier for power users. Access management for users and groups is one of Plone's stronger points, and the new version introduces major improvements. Version 3.0 also gives administrators an easier path to implementing complex application scenarios, and Plone's Zope roots make it a safe bet for security.

If you are launching a new project, you should consider Plone 3.0. Updating a system that you have not customized to any great extent should be no problem. If you have added third party extensions to an existing 2.5.3 instance, you might prefer to wait for compatible extensions before you upgrade.

INFO
[1] Plone: http://plone.org
[2] KSS: http://kssproject.org
[3] Dublin Core: http://dublincore.org
[4] Markdown: http://daringfireball.net/projects/markdown
[5] Textile: http://hobix.com/textile
[6] Page Templates: http://zpt.sourceforge.net
[7] W3C Standard WAI: http:/www.w3.org/TR/WAI-WEBCONTENT
[8] Section 508: http://www.section508.gov
[9] Benchmarks: http://limi.net/articles/some-preliminary-plone-3.0-benchmark-results