plone - 如何以编程方式控制对象的允许内容类型的添加菜单列表?

标签 plone plone-3.x

我想切实地控制单个对象的允许内容类型的添加菜单列表。

我正在使用 archgenxml 构建内容类型的集合。在一种情况下,我有一个由 RangeBase 类组成的模拟类,该类具有三个实现:valueRange、vectorRange 和uniformRange。模拟可以恰好包含一个范围,即 RangeBase 的重数为一,因此模拟的添加菜单应该提供所有三种范围类型,或者根本不提供。

为了实现这一点,我想到了订阅 IObjectInitializedEvent 和 IObjectRemovedEvent 事件;将它们各自的处理程序initializedHook 和removedHook 放置在RangeBase 类中。处理程序将请求对象的本地允许类型列表,并相应地删除或添加三个范围。在仔细阅读了 Plone 的“社区开发者文档”后,我认为initializedHook 代码可能如下所示:

  # Set allowed content types
  from Products.ATContentTypes.lib import constraintypes

  def initializedHook(obj, event):

    # Get this range's parent simulation
    parent = obj.aq_parent

    # Enable constraining
    parent.setConstrainTypesMode(constraintypes.ENABLED)

    # Remove the three ranges 
    allowedTypes = parent.getLocallyAllowedTypes()
    ranges = ('valueRange','vectorRange','uniformRange')
    for range in ranges:
      allowedTypes.remove(range)

    # Tweak the menu
    parent.setLocallyAllowedTypes(allowedTypes)
    parent.setImmediatelyAddableTypes(allowedTypes)

不幸的是,我的模拟类没有这些功能。

是否有一个适配器可以为我的模拟类提供此功能,或者是否有其他完全不同的方法来实现所需的菜单行为?如有任何建议,我们将不胜感激。

最佳答案

这是可能的。

我相信您需要重写 getLocallyAllowedType()

http://svn.plone.org/svn/collective/Products.ATContentTypes/trunk/Products/ATContentTypes/lib/constraintypes.py

AT 是在适配器之前写入的,因此 AT 没有使用它。

我建议您也可以更新有关此的文档...这是非常常见的用例。

http://web.archive.org/web/20101010142032/http://collective-docs.plone.org/content/creating.html

关于plone - 如何以编程方式控制对象的允许内容类型的添加菜单列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5194464/

相关文章:

Plone 升级 2.1.3 > 3.0.6 失败并出现目录错误

plone - 有没有办法做一个保留层次结构的portal_catalog?

plone - ZMI 目录清除和重建失败, "POSKeyError: ' 没有 blob 文件'”

python - 使用 Plone 发布地理空间数据

plone 页面中的 svg 代码

plone - 原型(prototype).schemaextender : possible to have default_method

python - 在 plone.htmlhead 中将 JSS 与 CSS 分离

caching - 我如何防止Varnish在Plone前面缓存/login_form

Plone:从站点设置中隐藏附加组件

plone - 如何给Plone 3添加博客功能?