On 18/01/2010, at 5:44 PM, Vitaliy Podoba wrote:

Hi Dylan,

Actually that's a side effect of zope component registry because as you said
carousel portlet inherits from collection portlet thus also provides
ICollectionPortlet interface.

Actually I said the implementation inheritted from CollectionPortlet not the interface but looking at the code again you are right. I removed the Interface inheritance since Carousel isn't really a collection portlet it's just reusing some code.

class ICarouselPortlet(Interface):
    """A portlet displaying a carousel with a Collection's results
    """
however this doesn't stop the porletRenderer override :(

Is it that portlets don't work like views or that the portlet views are registered by the class instead of the interface?



Of course this behavior is usually not desirable while working with plone 3
portlets. I think there are at least two workarounds for this issue:

1. Artificially add marker interface to collection portlet Assignement via
five:implements directive and then register portletRenderer for this
interface instead of ICollectionPortlet. Though I'm not sure it'll work as I
don't know if directly provided interfaces are inherited...

2. Add one more portletRenderer for carousel portlet which will remain the same renderer for this portlet as it'll be registered for more specific
portlet interface ICarouselPortlet.

thanks. I think both would work but I still think something is going wrong since ICarouselPortlet no longer inherits from ICollectionPortlet.




Good luck,
Vitaliy Podoba

Dylan Jay wrote:

Hi,

In collective.carousel is the following definition

    <plone:portlet
        name="portlet.Carousel"
        interface=".carousel.ICarouselPortlet"
        assignment=".carousel.Assignment"
        view_permission="zope2.View"
edit_permission="plone.portlet.collection.AddCollectionPortlet"
        renderer=".carousel.Renderer"
        addview=".carousel.AddForm"
        editview=".carousel.EditForm"
        />

carousel.Renderer etc all inherit from
plone.portlet.collection.collection and the Renderer uses its own
template

class Renderer(base.Renderer):
    render = ViewPageTemplateFile('carousel.pt')


This seems all fine and works well until I install a theme with the
following zcml

    <plone:portletRenderer
    portlet="plone.portlet.collection.collection.ICollectionPortlet"
    layer=".interfaces.IThemeSpecific"
    template="templates/collection.pt"
    />

This changes the renderer for ICarouselPortlet as well as
ICollectionPortlet and all my carousel portlets appear as collection
portlets even though they add and edit forms still remain as carousel
forms.

Is that expected?


---
Dylan Jay, Plone Solutions Manager
www.pretaweb.com
tel:+61299552830
mob:+61421477460
skype:dylan_jay



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


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

Reply via email to