Earlier this year I was evaluating a couple of content management systems (e.g., Bricolage, Typo3, Plone) for a project. Every system had compelling features, but Plone provided the best overall feature set (e.g., search, templating, workflow, user management) in a single package. Plone runs on top of Zope, a popular Python-based open source web application server. Many consider Zope to be Python's killer-app, similarly Plone may be one of Zope's killer-apps. After my initial experimentation with Plone, I was really impressed with its ease of use and the power and flexibility of its page templating system. Strengths aside, Plone's online documentation did not adequately address advanced topics. I often found myself sifting through bits of online howtos and other people's examples to understand how to do certain things. Not only was this time consuming but also hit-or-miss.
Enter The Definitive Guide to Plone by Andy McKay. This book provides a series of task-driven chapters with practical information necessary for you to develop great web applications in Plone. The reader is assumed to be knowledgeable about HTML, CSS, the Web, and Python (for advanced features of Plone). Each chapter begins with an overview of what will be covered and uses examples to clarify concepts. A novice user can read cover to cover and come away with a working knowledge of Plone and be able to create relatively sophisticated web sites. A more advanced user can skim the chapter outline, pick and choose topics of interest and quickly find answers.
Who is the author? Andy McKay is a core developer of the Plone CMS project and an active contributor to a variety of Python-based open source projects. McKay also maintains ZopeZen.org, a web site dedicated to Zope applications and extensions. All the examples in this text were reviewed by well-known Zope authority Michel Pelletier, co-author of the Zope book.
McKay aims for the novice user in the first four chapters. Beginning with a high-level introduction to the benefits of content management, then on to installing Plone, and finally how to do basic content editing and customizations. Those of you getting started with Plone will find the chapter on customizations to be most helpful. It shows you everything from changing a folder's default page to altering navigational tabs, further demonstrating Plone's flexibility. You'll notice that some of the text in this section is fairly self-explanatory (i.e., form field descriptions). You should be able to get going with a moderate Plone site after reading this section.
The next six chapters (5-10) go under the hood of Plone, and aims for administrators and developers. Templating is one of the first stumbling blocks when learning to use Plone, remarks McKay. To that end, McKay provides an excellent introduction to the building blocks of Plone's templating machinery, Template Attribute Language (TAL) and Macro Expansion TAL (METAL). McKay goes on to show you how to develop Script (Python) objects and web forms. Next, McKay breaks down Plone's concept of "skins" - images and styles surrounding the content, using the NASA Mars Rover website as an example. McKay moves on to discuss content workflow, one of the more complex features in Plone. Although he manages to explain individual concepts (e.g., states, transitions) well, he could have used some tougher (more real-world) examples to help readers tie in these concepts. Finally, the last two chapters in this section explain how to setup site permissions and users, and also integrate Plone with other systems (e.g., Apache, LDAP). Users looking to customize an existing Plone site should pay special attention here. Be sure to try out the examples, they will help you understand the concepts faster.
The last four chapters tackle advanced topics such as developing custom content types with Python code and Archetypes, indexing, and scalability. McKay provides an in-depth comparison of two approaches for creating new content types. First, using Python code to define content attributes, and second using Archetypes - a schema-based framework. McKay points out that Archetypes is the preferred way for development of products and content types by the Plone team. You can even use UML tools to model your content type, then generate a schema using ArchGenXML. From caching policies to Zope Enterprise Objects, the final chapter presents several techniques for improving your Plone site's performance.
The Definitive Guide to Plone fills the gap between the inadequacy of online howtos and the need to read through someone's example to find out how a particular thing is done. Users of all experience levels will benefit from the authoritative knowledge of the author. The writing style is clear, to the point and neutral. If you want to improve your productivity with Plone, look no further.