Ticket #7703 (closed Bug: fixed)

Opened 4 years ago

Last modified 3 years ago

easy use of plone:portletRenderer with implicit attributes

Reported by: alexg Owned by: optilude
Priority: minor Milestone: 3.1
Component: Infrastructure Keywords: portletRenderer portlet renderer
Cc:

Description

When using plone:portletRenderer mandatory attributes are portlet, and one of template / class.

So one except to overrides login portlet renderer using eg. :

 <plone:portletRenderer
        portlet="plone.app.portlets.portlets.login.ILoginPortlet"
        class=".plone_overrides.LoginRenderer"/>

but as it is done for the moment, you have to write :

  <plone:portletRenderer
        portlet="plone.app.portlets.portlets.login.ILoginPortlet"
        class=".plone_overrides.LoginRenderer"
        for="zope.interface.Interface"
        layer="zope.publisher.interfaces.browser.IDefaultBrowserLayer"
        view="zope.publisher.interfaces.browser.IBrowserView"
        manager="plone.portlets.interfaces.IPortletManager"
        />

because values which are not implicit are set to None in the created adapter.

To solve this problem in  plone/app/portlets/metaconfigure.py

def portletRendererDirective(_context, portlet, class_=None, template=None,
        for_=None, layer=None, view=None, manager=None):

should be

def portletRendererDirective(_context, portlet, class_=None, template=None,
        for_=Interface, layer=IDefaultBrowserLayer, view=IBrowserView, manager=IPortletManager,):

Change History

comment:1 Changed 4 years ago by optilude

  • Status changed from new to closed
  • Resolution set to invalid

Are you absolutely sure about this? The values of None should just filter through and work, as far as I can tell. This code works, at least:  https://dev.plone.org/collective/browser/examples/example.customization/trunk/example/customization/browser/configure.zcml#L66.

Please re-open if you can give me a case where it definitely fails.

comment:2 Changed 4 years ago by alexg

  • Status changed from closed to reopened
  • Resolution invalid deleted

I retest it and it is as I said, even adding the layer (zope.publisher.interfaces.browser.IDefaultBrowserLayer)

In my case what I want to do is overide plone login portlet.

If the created adapter is created with None values it is less specific than the adapter of Plone login portlet, that may be why plone get the original plone login portlet and not mine.

In the case you show me, a different layer is declared, so adaptation won't confuse.

comment:3 Changed 4 years ago by optilude

  • Status changed from reopened to closed
  • Resolution set to fixed

(In [19731]) Apply patch. Fixes #7703.

comment:4 Changed 3 years ago by hannosch

  • Component changed from Portlets to Infrastructure
Note: See TracTickets for help on using tickets.