我想切实地控制单个对象的允许内容类型的添加菜单列表。
我正在使用 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()
AT 是在适配器之前写入的,因此 AT 没有使用它。
我建议您也可以更新有关此的文档...这是非常常见的用例。
http://web.archive.org/web/20101010142032/http://collective-docs.plone.org/content/creating.html
关于plone - 如何以编程方式控制对象的允许内容类型的添加菜单列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5194464/