hash - 如何获取为自定义 portlet 管理器分配的日历 portlet 的 portlet-hash css 类?

标签 hash calendar portlet plone

我正在尝试修复分配给自定义 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 (portlets/manager.py) 的 column.pt 所描述的行为,但我不知道如何让我的自定义管理器提供那些(即:像默认经理会这样做)。

最佳答案

您需要确保安装了知道渲染散列的 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>

关于hash - 如何获取为自定义 portlet 管理器分配的日历 portlet 的 portlet-hash css 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6404978/

相关文章:

c# - NLog 使用波斯历日期格式

Liferay Portlet id 已在使用问题

Perl -/usr/local/lib64/perl5/Net/SSH2.pm 的散列分配中的奇数个元素

java - Java 中的 CRC32 哈希

java - 在子窗口中扩大或缩小 vaadin 日历组件的大小

java - Struts2 结果类型不调用 portlet

java - Portlet 间通信页面提交

hash - 如果我们提前知道 key 和分布,任何想法如何创建快速哈希函数?

python - 使用 Python 对 CSV 进行 MD5 哈希处理

java - 月份不是从日期打印的 - Java DateFormat