首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GenericSetup:如果仍然需要从initialize()调用ToolInit,toolset.xml会做什么?

GenericSetup:如果仍然需要从initialize()调用ToolInit,toolset.xml会做什么?
EN

Stack Overflow用户
提问于 2011-04-09 15:06:58
回答 2查看 218关注 0票数 1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-09 22:14:52

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2011-04-09 17:03:39

toolset.xml的目标是将工具实例化到数据库中。它还可以用来删除工具;例如,这在升级步骤中非常有用。

示例toolset.xml:

代码语言:javascript
复制
<?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,而不仅仅是在最初定义该工具的包中使用,例如,在您开发的站点的常规策略包中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5603459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档