允许在每个视图的基础上分配 portlet。
项目描述
介绍
这个包扩展了默认的 Plone portlets 框架,允许在每个视图的基础上分配 portlet。
概述
有时,将不同的 portlet 分配给不必耦合到任何内容对象的独立视图可能真的很有用。您可能认为在这种情况下,可以创建一个新的内容对象并将该视图应用于它,然后最终将所需的 portlet 分配给该对象。但是,在Plone中,您最终可能会为每个独立的 zope3 视图创建新的内容对象 - 从内容管理的角度来看这是不正确的。
在我们的一个项目中,我们有很多独立视图,需要将不同的 portlet 分配给独立视图(例如,在用户配置文件视图、站点地图视图、z3c.form表单视图、主页视图上拥有一组单独的 portlet , ETC。)
为了方便在那里添加portlet,我们开发了这个包,称为 collective.viewportletmanager。它旨在供Plone集成商使用,并且不是开箱即用的。为了能够将 portlet 分配给您的 zope3 视图,您必须遵循一些简单的规则。
更多关于这在下面如何使用部分。
兼容性
该插件在Plone 3.3.5和Plone 4.1上进行了测试
安装
要将包添加到您的Zope实例,请按照docs/INSTALL.txt文件中的说明进行操作
然后重启你的Zope实例
并从 ``portal_quickinstaller工具中安装View Portlet Manager 包
如何使用
该软件包允许您将Plone 3 portlet 分配给您的自定义 zope3 视图。为了能够做到这一点,我们只需要一个额外的步骤:使用IPortletsAwareView接口标记您的视图:
from zope.interface import implements
from Products.Five.browser import BrowserView
from collective.viewportletmanager.interfaces import IPortletsAwareView
class MyZope3View(BrowserView):
implements(IPortletsAwareView)
# your zope3 view code goes here
在您声明您的 zope3 视图实现 IPortletsAwareView接口 后,重新启动您的 zope 实例并呈现您的视图。从现在开始,您将看到Manage view portlets链接。此链接将带您进入与默认管理 portlet视图完全相同的 portlet 管理屏幕。唯一的区别是Manage view portlets视图将允许您管理IPortletsAwareView标记视图的 portlet。
您在该视图上添加的 portlet 将仅在访问您的自定义 zope3 视图时可用。
这里更重要的一点是,portlet 不是仅基于视图分配的,而是基于上下文对象的。所以我们可以说基于视图的portlet 实际上是基于视图上下文的portlet。
View portlet 将紧跟在基于上下文的 portlet 之后,就像其他站点范围的 portlet 一样。
您还可以通过标准的管理 portlet屏幕阻止基于视图的 portlet。
设计说明
主要的是,视图 portlet 像任何其他站点范围的 portlet 类别一样保存到Plone站点根注释中,但同时视图类别映射保存上下文对象 UID,因此实际上视图类别看起来不像站点范围但基于上下文的 portlet类别。
查看 portlet 类别使用下一个分配键格式:
"<object_uid>:<view_name>"
因此,对于 uid 等于“123”的对象,它的视图名为“my-view”,我们将在全局站点 portlet 管理器注释内的“view”类别中的“123:my-view”键下保存 portlet 分配。
对于不提供“UID”属性的站点根目录,我们使用字符串占位符“nouid”。例如,“sitemap”视图的portlet 分配将保存在“nouid:sitemap”键下。
这个包覆盖了一堆标准的Plone portlets 框架组件,以便将视图 portlet 类别添加到标准 portlet 类别列表中:上下文、用户、组和内容类型。
在这里,我们将尝试描述究竟是什么被覆盖:
PortletContext用于站点根目录和站点内容,以便将视图类别添加到标准类别列表中。此上下文还负责根据对象“UID”和视图名称生成视图键。要获取视图名称 portlet 上下文检索视图作为其 globalPortletCategories方法的参数,这实际上破坏了默认的Plone portlets 框架设计的 API。为了传递视图对象,我们还必须覆盖 portlet manager 渲染器和 portlet 检索器。
PortletManagerRenderer:将视图对象向下传递给 Portlet 检索器类。
PortletRetriever:将视图对象向下传递给PortletContext,PortletContext 又将使用它来生成视图类别键。
ContextualEditPortletManagerRenderer视图提供视图类别黑名单状态以在标准管理 portlet屏幕上使用。
EditPortletManagerRenderer在管理视图 portlet屏幕上禁用继承的 portlet 。这对于视图类别 portlet 没有多大意义。
ManageContextualPortlets提供设置黑名单状态方法,该方法还将处理查看类别黑名单状态。
ManageViewPortlets : 我们自己的管理视图 portlets视图
ManageViewPortletsLinkViewlet:我们自己的视图,它呈现管理视图 portlet链接,指向当前内容对象和 zope3 视图的适当 portlet 管理屏幕。链接仅出现在启用IPortletsAwareView 的 zope3 视图上。
活生生的例子
学分
公司
贡献者
变更日志
1.0(2011 年 8 月 23 日)
初始版本 [piv]
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。