1

似乎toolset.xml 只进行了一半。理想情况下,它应该能够取消 __init__.py 中的 initialize() 中的 ToolInit 调用。但是如果没有 ToolInit 调用,我无法在 ZMI 中显示工具图标。

4

2 回答 2

3

初始化函数中的 ToolInit 调用将工具类注册为可以添加到数据库中基于 OFS 的文件夹的东西 - 主要它注册了一个用于创建类实例的工厂。这与 ContentInit 对普通内容类所做的基本相同。

一旦类被注册并且它的 meta_type 是已知的,类的实例可以被添加到基于 OFS 的文件夹中。GenericSetup 步骤负责管理持久内容,并可用于将工具实例添加到数据库。

如果我们想避免初始化函数中的代码,我们需要创建一些自定义 ZCML 指令,并在 configure.zcml 中使用这些指令来注册类型及其工厂。敏捷已经走这条路,但它不适用于基于原型的内容类型或工具等通用类。

于 2011-04-09T14:14:52.010 回答
2

toolset.xml 的目标是将工具实例化到数据库中。也可用于拆卸工具;例如,这在升级步骤中非常有用。

示例工具集.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,而不仅仅是在首先定义该工具的包中,例如,在您开发的站点的一般策略包中。

于 2011-04-09T09:03:38.977 回答