• Portretfoto van Ralph Jacobs
    Ralph Jacobs

Want to make portlets Plone 3 and 4 compatible?

Some hands-on advice how to work on portlets in Plone 3.4 and 4.1.

Most portlets use the "cmf.ManagePortal" permission to edit a portlet. The startup code of Zope (application server which Plone is based on) has changed to some degree in Zope 2.13 and there might be some code that no longer works - if it depended on specific import time and ZCML configuration ordering. In Plone 4 you generally need to be more explicit about your ZCML dependencies. If you use the the cmf.ManagePortal permission, you can either do an <include package="Products.CMFCore"file="permissions.zcml" /> (which works in Plone 4.0.x as well) or do a  general include of Products.CMFPlone at the start of your configure.zcml.

Example (conifigure.zcml of fourdigits.portlet.twitter, which is in the collective):

&lt;include package="Products.CMFCore"
 file="permissions.zcml" /&gt;

I've found out that this works well for Plone 4 and Plone 4.1 but this breaks on older Plone 3 installations, due to refactoring of Plone/CMFCore. There is a solution to this called to make this more conditional, called: "zcml:condition". If you add a zcml:condition to 'detect' Plone 4.1 it will work in Plone 3, Plone 4 and Plone 4.1. Example:

&lt;include package="Products.CMFCore"
 zcml:condition="have plone-41"
 file="permissions.zcml" /&gt;


We love code