Hi all,

A while ago, someone identified a hole in our view/viewlet/portlet story. Whilst plone.theme gives us a way to override or register new browser components (pages/views, viewlets, portlets, resources etc) for a particular *theme* only, it was difficult for a third party product to provide an "installable" browser component.

In Zope 3, most ZCML directives in the 'browser' namespace take a 'layer' option. For example:

 <browser:page
    name="foo"
    for="*"
    template="my-template.pt"
    permission="zope.Public"
    layer=".interfaces.IMyLayer"
    />

A layer is just an interface, which should be applied as a marker interface to the request. The view @@foo above will only be available if IMyLayer is applied to the request. plone.theme provides a way to associated a layer (one-to-one) with a selected Theme (in portal_skins), but it's obviously not feasible for each third-party product to have its own theme (since only one can be active at once).

Enter plone.browserlayer. This lets you register a layer using GenericSetup, i.e. during product installation. A traversal hook similar to the one in plone.theme ensures that it's applied when you traverse into the Plone site.

plone.browserlayer is not part of Plone core (yet), but works as a standalone product. The only caveat is that you need to install it, register its ZCML (e.g. with a slug or include) and install its extension profile (to get the new import/export handlers). Then, you can create a simple marker interface like:

 from zope.interface import Interface
 class IMyProductLayer(Interface):
     """Browser layer for this particular product
     """

Then add a browserlayer.xml file to your profile and do:

 <layers>
    <layer name="my.product"
           interface="my.product.interfaces.IMyProductLayer" />
</layers>

Please see the README.txt file in the package for more[1]. plone.browserlayer 1.0b1 is in the Cheese Shop.

I'd like some feedback on this approach - I think it works pretty well, but there may be other things I haven't thought about. I'd also really appreciate a volunteer to write a quick how-to on this, to save me the trouble. :-)

[1] http://dev.plone.org/plone/browser/plone.browserlayer/trunk/plone/browserlayer/README.txt

--
Acquisition is a jealous mistress


_______________________________________________
Product-Developers mailing list
[email protected]
http://lists.plone.org/mailman/listinfo/product-developers

Reply via email to