調用,toolset.xml會完成什麼似乎toolset.xml只有一半。理想情況下,它應該能夠取消__init__.py中initialize()中的ToolInit調用。但是如果沒有ToolInit調用,我無法在ZMI中顯示工具圖標。GenericSetup:如果ToolInit仍然需要從初始化()
回答
初始化函數中的ToolInit調用將工具類註冊爲可以添加到數據庫中基於OFS的文件夾的東西 - 主要是註冊工廠以創建類的實例。這與ContentInit對普通內容類所做的基本相同。
一旦該類被註冊並且其meta_type已知,該類的實例就可以添加到基於OFS的文件夾中。 GenericSetup步驟負責管理持久性內容,並可用於將工具實例添加到數據庫。
如果我們想避免在初始化函數的代碼,我們需要改爲建立一些自定義的ZCML指令和使用這些在configure.zcml中註冊類型和它的工廠。敏捷已經走過了這條路線,但它不適用於基於原型的內容類型或類似工具的一般類。
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,不只是在定義擺在首位的工具,例如,在一般政策包,爲你開發一個網站包裝。
使用
@DavidGlick:有趣;該異常僅在該工具在配置文件相關性鏈中按要求*和*禁止列出時纔會引發。如果您無法擺脫配置文件中的依賴關係,則必須強制刪除自定義步驟。 – 2013-10-19 15:21:47
如果我們使用toolset.xml,我發現從initialize()調用Toolinit是沒有必要的。該工具在網站上創建。除了一件事 - 它缺少圖標。所以爲了讓圖標看起來正確,我必須創建初始化函數的主體並在那裏調用ToolInit。如果toolset.xml有一個方法來指定圖標,即使這不是必要的。 – sureshvv 2011-04-10 04:55:46
@sureshvv:事實上,這一切都是巧合;例如,在toolset.xml中沒有註冊工廠。 toolset.xml的目標當然不會支持這個用例。 – 2011-04-11 07:54:06
@martijn:不幸的是,開發人員體驗不到理想的,如果我們要觸及3個或4個位置的看似無關的方式來使事情發生。 – sureshvv 2011-04-13 17:35:46