toolset.xml似乎只走了一半的路。理想情况下,它应该能够在__init__.py中取消initialize()中的ToolInit调用。但是如果没有ToolInit调用,我就无法在ZMI中显示工具图标。
发布于 2011-04-09 22:14:52
initialize函数中的ToolInit调用将工具类注册为可以添加到数据库中基于OFS的文件夹中的内容-主要是注册一个工厂来创建类的实例。这基本上与ContentInit对普通内容类所做的相同。
一旦注册了类并且知道了它的meta_type,就可以将类的实例添加到基于OFS的文件夹中。GenericSetup步骤负责管理持久内容,并可用于将工具实例添加到数据库。
如果我们想避免初始化函数中的代码,我们需要创建一些定制的ZCML指令,并在configure.zcml中使用这些指令来注册类型及其工厂。Dexterity已经走了这条路,但它不适用于基于原型的内容类型或像工具这样的通用类。
发布于 2011-04-09 17:03:39
toolset.xml的目标是将工具实例化到数据库中。它还可以用来删除工具;例如,这在升级步骤中非常有用。
示例toolset.xml:
<?xml version="1.0"?>
<tool-setup>
<required tool_id="portal_foo" class="dotted.path.to.FooTool" />
<forbidden tool_id="portal_spam" />
</tool-setup>此示例toolset.xml将在其上下文中将FooTool类实例化为portal_foo,并删除任何id为portal_spam的对象。
请注意,您可以在任何GenericSetup配置文件中使用toolset.xml,而不仅仅是在最初定义该工具的包中使用,例如,在您开发的站点的常规策略包中。
https://stackoverflow.com/questions/5603459
复制相似问题