我正在尝试修复为自定义portlet管理器分配的日历portlet的月份导航。从具有以下内容的特定浏览器页面模板调用此管理器:
<div id="calendar"
tal:content="structure provider:my.custom.portletmanager" />
不幸的是管理器没有为我渲染带有哈希的包装器,所以我试图手动将 kssattr-portlethash css类附加到上面的<div>
标签中使月导航工作( refreshPortlet()需要它)。我试过这个:
from plone.portlets.utils import hashPortletInfo
class SectionHomeView(BrowserView):
"""SectionHome browser view
"""
implements(ISectionHomeView)
def __init__(self, context, request):
self.context = context
self.request = request
@property
def getHash(self):
info = dict(manager = 'my.custom.portletmanager',
category = 'context',
key = '/my-section',
name = 'mycalendar',
)
return hashPortletInfo(info)
使用此代码我得到一个哈希,但日历导航仍然无效。 如何才能访问portlet信息,例如经理,类别,密钥和名称,以便正确计算?
我希望我有来自 plone.app.portlets.browser.templates 及其类 ColumnPortletManagerRenderer 的 column.pt 所描述的行为( portlets / manager.py )但我不知道如何让我的自定义管理器提供那些(即:像默认管理器那样)。
答案 0 :(得分:4)
您需要确保安装了PortletManagerRenderer和EditPortletManagerRenderer才能呈现哈希值,例如:
class MyCustomPortletManagerRenderer(ColumnPortletManagerRenderer) :
""" This custom version of ColumnPortletManagerRenderer points to a new
template so that HTML can be customised.
"""
adapts(Interface, IThemeSpecific, IBrowserView, IMyCustomPortletManager)
template = ViewPageTemplateFile('column.pt')
def can_manage_portlets(self):
context = self._context()
if not ILocalPortletAssignable.providedBy(context):
return False
mtool = getToolByName(context, 'portal_membership')
return mtool.checkPermission("Portlets: Manage portlets", context)
class MyCustomEditPortletManagerRenderer(ContextualEditPortletManagerRenderer):
"""To allow edit support of the above.
"""
adapts(Interface, IThemeSpecific, IManageContextualPortletsView, IMyCustomPortletManager)
template = ViewPageTemplateFile('edit-column.pt')
column.pt的位置如下:
<tal:block repeat="portlet options/portlets">
<div tal:attributes="class string:portletWrapper kssattr-portlethash-${portlet/hash};"
tal:content="structure python:view.safe_render(portlet['renderer'])" />
</tal:block>