2011-04-09 39 views

回答

3

初始化函數中的ToolInit調用將工具類註冊爲可以添加到數據庫中基於OFS的文件夾的東西 - 主要是註冊工廠以創建類的實例。這與ContentInit對普通內容類所做的基本相同。

一旦該類被註冊並且其meta_type已知,該類的實例就可以添加到基於OFS的文件夾中。 GenericSetup步驟負責管理持久性內容,並可用於將工具實例添加到數據庫。

如果我們想避免在初始化函數的代碼,我們需要改爲建立一些自定義的ZCML指令和使用這些在configure.zcml中註冊類型和它的工廠。敏捷已經走過了這條路線,但它不適用於基於原型的內容類型或類似工具的一般類。

+0

如果我們使用toolset.xml,我發現從initialize()調用Toolinit是沒有必要的。該工具在網站上創建。除了一件事 - 它缺少圖標。所以爲了讓圖標看起來正確,我必須創建初始化函數的主體並在那裏調用ToolInit。如果toolset.xml有一個方法來指定圖標,即使這不是必要的。 – sureshvv 2011-04-10 04:55:46

+0

@sureshvv:事實上,這一切都是巧合;例如,在toolset.xml中沒有註冊工廠。 toolset.xml的目標當然不會支持這個用例。 – 2011-04-11 07:54:06

+0

@martijn:不幸的是,開發人員體驗不到理想的,如果我們要觸及3個或4個位置的看似無關的方式來使事情發生。 – sureshvv 2011-04-13 17:35:46

2

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,不只是在定義擺在首位的工具,例如,在一般政策包,爲你開發一個網站包裝。

+0

使用按需要預先標記爲一個tool_id引發了一個異常:ValueError異常:工具[tool_id]是必需的!我如何實際刪除工具? – 2013-10-19 04:24:56

+0

@DavidGlick:有趣;該異常僅在該工具在配置文件相關性鏈中按要求*和*禁止列出時纔會引發。如果您無法擺脫配置文件中的依賴關係,則必須強制刪除自定義步驟。 – 2013-10-19 15:21:47