如何让Plone Dexterity容器看起来像Archetypes文件夹

时间:2013-01-03 18:21:44

标签: plone dexterity

我创建了一个Dexterity产品,其中包含容器和非容器Dexterity内容类型。在发现了collective.documentviewer(yay!thanks!huzzah!)后,我想使用它的dvpdf-group-view,但是在ZCML中注册为for Folders,而我的Dexterity容器没有资格。我查看了我的容器类型上可用的Web界面,添加了SiteRoot,并且启用了视图,但也完全错误。

我确信有一种正确的方法可以做到这一点,我很确定它是整个适配器/接口机制的核心,但我在任何一本书中都找不到它。

有人想尝试解释吗?首先,一行或两行将使Dexterity容器假装它也是一个文件夹;第二,如何更改Dexterity类型的单个实例的默认视图,以便它呈现外部组件的视图?

感谢。

1 个答案:

答案 0 :(得分:4)

<强> 1。注册敏捷容器的视图

视图是为Archetypes文件夹界面(Products.CMFCore.interfaces._content.IFolderish)注册的,但您的dexterity容器不提供此界面(但plone.dexterity.interfaces.IDexterityContainer)。 原因可能是产品和/或视图与灵巧性不兼容。

Anway,你可以通过在你的包中IDexterityContainer放一点ZCML来注册configure.zcml界面的视图来自己尝试一下(参见Creating a package部分Dexterity Developer Manual):

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser">

    <configure package="collective.documentviewer">

        <browser:page
            name="dvpdf-group-view"
            for="plone.dexterity.interfaces.IDexterityContainer"
            class=".views.GroupView"
            template="templates/group-view.pt"
            permission="zope2.View"
            layer=".interfaces.ILayer" />

    </configure>

</configure>

<browser:page>是从collective.documentviewer configure.zcml复制的,但我已将界面for=更改为dexterity容器界面,因此该视图也适用于灵巧容器。

内部<configure package="collective.documentviewer">告诉ZCML解析器应该应用配置,好像configure.zcml将直接在collective.documentviewer中 - 这允许您使用原始模板(否则你会必须复制或做一些讨厌的事情。)

我自己没有测试过:可能仍然是视图需要一个原型容器,并且不能使用灵巧容器。您可能还需要从文档查看器中为灵活容器注册更多组件(可能是菜单?请查看original configure.zcml中注册的内容。

如果一切正常,您应该考虑直接在github上对collective.documentviewer进行更改并向作者发出拉动请求(请注意,灵巧不是plone-core)。但首先要问你是否以及如何做到这一点: - )

<强> 2。更改默认视图

使用plone可以为特定类型定义多个视图。然后可以在每种类型的实例的显示菜单中选择视图。如果您打开http://localhost:8080/Plone/portal_types/manage_main并点击类型,则会有一个字段Available view methods,您可以在其中添加视图名称(dvpdf-group-view)。

创建类型的新对象或访问现有对象后,您将拥有一个“显示”菜单,该列表应列出视图。选择它,此对象现在默认为此视图。

(如果你想让视图在这种类型的其他对象上无法选择,你可以将它从类型配置中删除,这样就不再可以选择了 - 你的对象的现有配置将会保留。)