2010/11/24

Archetype Content Customization

在 Plone 4 初期,Archetype 還活著,它仍是自製表單的常見方式,即使日後要改用 Dexterity,也有機會透過 transmogrifier轉移內容。想要客製化 Archetype 表單,常見的工作是修改 view 和 edit 的程式碼,以 MyType 的 view 為例,它是由 base_view.pt 來管理 js、css、header、body、folderlisting、footer 六個 macro 設定值,預設會去拉 mytype_view.pt 來顯示,找不到的話就使用 base.pt 來顯示,base.pt 提供四個 macro 設定值,能夠滿足小規模的調整需求。原則上不需要修改 base_view.pt 內容,想要大規模地修改 view 動作,可以在 browser/configure.zcml 裡註冊新的顯示方式。
使用 ReferenceField 的話,要搭配 ReferenceBrowserWidget,它要從 archetypes.referencebrowserwidget 載入,利用 allowed_types=('Document',) 之類的設定值,可以限定項目種類,利用 allow_search=True 可以決定是否提供搜尋欄位。
想要修改 schemata 的話,是使用類似 schema.changeSchemataForField('related_category', 'reference') 這樣的語法。預設的 Dublin Core metadata 相關欄位,設定在 Products/Archetypes/ExtensibleMetadata.py 檔案裡,例如 rights 欄位的資訊:
TextField(
'rights',
accessor="Rights",
default_method='defaultRights',
widget=TextAreaWidget(
label=_(u'label_copyrights', default=u'Rights'),
description=_(u'help_copyrights',
default=u'Copyright statement.'),
)),
透過 default_method 可以指定預設的內容,例子裡的 defaultRights 就是呼叫 portal_metadata 的 listSchemas() 來比對是否存在預設值,而且在 Products/ATContentTypes/content/schemata.py 檔案裡,利用 finalizeATCTSchema() 來指派各欄位的 schemata 位置。
另外,使用 Plone 4 的朋友,記得參考新的網頁管理方式

No comments: