以 standalone 方式安裝 Plone3 installer 後,可用 zinstance 目錄裡 bin/plonectl 程式來啟動 Zope/Plone,bin/plonectl 功能和之前的 bin/instance 一樣。例如執行 bin/plonectl fg 後,除了啟動 Zope/Plone 外,還可以在 shell 即時顯示系統訊息。使用 fg 或 start 參數啟動 Zope/Plone 後,它會鎖住 Data.fs 檔案,代表這種啟動方式只允許一個 client 存取 ZODB。想要多個 client 同時存取 ZODB,必須改用 zeo 安裝方式。
在 Data.fs 沒被鎖住的情況下,可以執行 bin/plonectl debug 手動存取 ZODB 內容。
$ bin/plonectl debug instance: Starting debugger (the name "app" is bound to the top-level Zope object) >>> dir() ['Zope2', '__builtins__', '__doc__', '__name__', 'app', 'configure'] >>> app.Plone['front-page'].getRawTitle() 'Welcome to Plone' >>> app.Plone['front-page'].setTitle("New Title for Plone Site") >>> import transaction >>> transaction.commit() >>> myitem = app.mysite['my-folder']['001'] >>> myitem.meta_type 'MyType'
以上是最簡單的範例。下列是其他範例,記得改過內容的話,都要使用 transaction.commit() 來確認寫進 ZODB。
>>> for k, v in app.Plone.Members.marr.objectItems(): ... print k, v.getRawText() ... >>> for obj in app.Plone.Members.marr.objectValues(): ... obj.setText('<h2>My Test</h2>') ...
另外還可以把指令寫成 script 檔案,例如 updateTitle.py 的內容:
app.Plone['front-page'].setTitle("New Title Updated by Script") import transaction transaction.commit()
再用 bin/plonectl run updateTitle.py 執行結果。如果需要 admin 權限的話,要事先加上權限宣告:
import os import transaction from AccessControl.User import UnrestrictedUser from AccessControl.SecurityManagement import newSecurityManager admin = UnrestrictedUser('admin', '', ['Manager'], '') newSecurityManager(None, admin) app['mysite'].mytype['my-item'].setStartDate('1918/01/01') transaction.commit()
No comments:
Post a Comment