3
我想以編程方式進行一些註冊,這些註冊取決於存儲在plone.app.registry中的數據。具體而言,我想將menuItems添加到通常通過zcml完成的對象的顯示菜單中。如何在啓動時初始加載plone站點時訂閱
這種「plone loaded」事件的「標準」方法是什麼?
途徑,我認爲是:
- 使用站點根目錄遍歷前鉤,使註冊,然後設置某種標記,以防止重新註冊
- 傾聽一個Zope啓動事件(如zope.processlifetime.IProcessStarting),然後找到在ZODB所有的Plone站點並進行註冊
感謝您的回答。我也意識到,我需要處理註冊表中的設置在運行時更改的情況,那麼menuItems也需要更改。我說的像menuItem這樣的註冊是每個線程嗎?在這種情況下,我不知何故需要在每個線程上重新安裝我的menuItems。所以我認爲beforeSiteTraverse需要查看數據庫中的時間戳或散列,以確定menuItems是否仍然有效。這是否會執行?有沒有更好的方法來做到這一點? – djay 2012-07-27 01:15:07
聽起來像你需要重新考慮這整個設置,並使用動態菜單?在任何情況下,組件註冊都不是每個線程,儘管它們可能會被每個線程緩存。並且持久保存本地組件註冊表,然後應用通常的落實邊界和每個線程對象實例緩存。 – 2012-07-27 08:03:29