要在Plone文件夹上获取一次性视图,我会执行类似这样的操作(并非显示所有代码):
在configure.zcml
:
<!-- Marker interface. Set this on the folder through the ZMI
interfaces tab.
-->
<interface interface=".interfaces.IMySpecialFolder" />
在browser/configure.zcml
:
<!-- Special case view. Set as the folder's view through the ZMI
properties tab (layout property).
-->
<browser:page
for="..interfaces.IMySpecialFolder"
name="special"
template="special.pt"
permission="zope2.View"
/>
这很有用,但我想控制文件夹的显示菜单,列出仅我的特殊情况视图。我可以添加它,它只显示在我标记的文件夹上,但我必须更改站点范围的ATFolder FTI。
在browser/configure.zcml
:
<include package="plone.app.contentmenu" />
<browser:menuItem
for="..interfaces.IMySpecialFolder"
menu="plone_displayviews"
title="Special view"
action="@@special"
description="Special case folder view"
/>
在profiles/default/types/Folder.xml
:
<?xml version="1.0"?>
<object name="Folder">
<property name="view_methods" purge="False">
<element value="special"/>
</property>
</object>
当然,如果不影响网站上的每个文件夹,我都无法删除现有的可用视图方法。
有没有办法在不更改内容类型的FTI的情况下进行一次性显示菜单调整?
实际上,此问题似乎已经解决过了。 p4a.z2utils补丁CMFDynamicViewFTI
以从IDynamicallyViewable
适配器查找中获取可用视图的列表。 (dateable.chronos将此机制用于其文件夹日历视图)。所以我的问题就变成了:
有没有办法在不更改内容类型的FTI且不修补Plone的情况下进行一次性显示菜单调整?
答案 0 :(得分:3)
plone显示菜单构建器使用ISelectableBrowserDefault
在“显示”菜单中获取可用选项(请参阅
http://dev.plone.org/plone/browser/plone.app.contentmenu/trunk/plone/app/contentmenu/menu.py#L220)
所以我认为(但我没有尝试过这个)如果你为一个更具体的界面(在你的情况IMySpecialFolder
中)定义了一个适配器,它提供了Products.CMFDynamicViewFTI.interface.ISelectableBrowserDefault
它应该可以工作。
适配器应具有上述plone.app.contentmenu.menu.DisplayMenu
所需的方法。
答案 1 :(得分:1)
回答我自己的问题,我意识到实现一次性文件夹视图最直接的方法是遵循Plone本身在Members
文件夹中应用的模式:调用的PythonScript index_html
自定义视图,例如
member_search=context.restrictedTraverse('member_search_form')
return member_search()
Products.CMFPlone
说明how to setup such a PythonScript with a GenericSetup import handler。
回想起来,我发现在我的问题场景中我不需要标记界面。答案中没有必要。
请注意,此解决方案不会导致“文件夹的显示菜单仅列出我的特殊案例视图”,但我完全取消了显示菜单。我很好。
答案 2 :(得分:0)
您可以解决的一种方法是使用遍历钩子来注册菜单项,或者在这种情况下,取消注册菜单项,或者注册具有使它们不显示的条件的菜单项。使用遍历钩子,您可以使用标记界面使其发生在某个文件夹,子部分或页面中。 你可以在这里看到我们在哪里实现了类似的代码
在这种情况下,我们只想根据控制面板配置动态注册新的显示菜单项。