如何覆盖Plone的特殊案例内容显示菜单?

Dan*_*cka 6 plone

要在Plone文件夹上获得一次性视图,我会执行类似这样的操作(并非显示所有代码):

configure.zcml:

<!-- Marker interface. Set this on the folder through the ZMI
     interfaces tab.
  -->
<interface interface=".interfaces.IMySpecialFolder" />
Run Code Online (Sandbox Code Playgroud)

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"
  />
Run Code Online (Sandbox Code Playgroud)

这很好用,但我想控制文件夹的显示菜单,列出我的特殊案例视图.我可以添加它,它只显示在我标记的文件夹上,但我必须更改站点范围的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"
  />
Run Code Online (Sandbox Code Playgroud)

profiles/default/types/Folder.xml:

<?xml version="1.0"?>
<object name="Folder">
 <property name="view_methods" purge="False">
  <element value="special"/>
 </property>
</object>
Run Code Online (Sandbox Code Playgroud)

当然,我不能删除现有的可用视图方法而不影响站点上的每个文件夹.

有没有办法在不改变内容类型的FTI的情况下进行这种一次性显示菜单调整?

实际上,似乎此问题已经解决过.p4a.z2utils补丁CMFDynamicViewFTI,用于从IDynamicallyViewable适配器查找中获取可用视图的列表.(dateable.chronos将此机制用于其文件夹日历视图).所以我的问题变成:

有没有办法在不更改内容类型的FTI且不修补Plone的情况下进行一次性显示菜单调整?

Dan*_*cka 1

回答我自己的问题,我意识到实现一次性文件夹视图的最直接方法是遵循 Plone 本身在文件夹中应用的模式:调用自定义视图的MembersPythonScript ,例如index_html

member_search=context.restrictedTraverse('member_search_form')
return member_search()
Run Code Online (Sandbox Code Playgroud)

Products.CMFPlone说明如何使用 GenericSetup 导入处理程序设置此类 PythonScript

回想起来,我意识到我的问题场景中不需要标记界面。在答案中也没有必要。

请注意,此解决方案不会导致我要求的“文件夹的显示菜单仅列出我的特殊情况视图”,而是完全取消了显示菜单。我对此很满意。