[Product-Developers] Re: Re: bug with portetRenderer?

Vitaliy Podoba vitaliypodoba at gmail.com
Tue Jan 19 06:59:45 UTC 2010


Dylan Jay wrote:

> 
> 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?
> 
> 

Rather than removing interfaces inheritance from carousel portlet (this may 
eventually break some functionality) try registering one more portlet 
renderer this time for carousel portlet itself which won't customize 
standard one but only override renderer for collection portlet as it'll be 
registered on a more specific interface:

  <plone:portletRenderer
      portlet="portlet.Carousel"
      layer=".interfaces.IThemeSpecific"
      class="collective.carousel.portlets.carousel.Renderer"
      />

Let me know if this works for you.

/Vitaliy

>>
>> 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
>> Product-Developers at lists.plone.org
>> http://lists.plone.org/mailman/listinfo/product-developers






More information about the Product-Developers mailing list