我想务实地控制单个对象的允许内容类型的添加菜单列表。
我正在使用 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)
不幸的是,我的模拟类没有这些功能。
是否有一个适配器可以为我的模拟类提供此功能,或者是否有其他完全不同的方法来实现所需的菜单行为?任何建议,将不胜感激。