預設的 ATContentType 提供 relatedItems 欄位,可以用來建立或指定關連項目,想在程式裡指定的話,可以參考下列的資訊:
>>> app.mysite['front-page'].setRelatedItems(app.mysite.news)
>>> app.mysite['front-page'].getRelatedItems() [<ATFolder at /mysite/news>]
setRelatedItems() 每次只接一個參數,因此後來接的參數,原則上就是蓋掉之前的設定值。想要清空內容的話,就是使用 setRelatedItems(''),想要指定多值,或是加入新值的話,可用串列的技巧:
>>> app.mysite['front-page'].setRelatedItems ([app.mysite.news,app.mysite.events])
還有個 getRawRelatedItems() 可以傳回 UID:
>>> app.mysite['front-page'].getRawRelatedItems() ['f8a2a96821f6e3df8dafd19d16b68fb2', '04b2e1267906691beccdff58dd861176']
可以試試 getRelatedItems() + UID() 是否跟 getRawRelatedItems() 結果是否相同。另外,在plone.app.layout/viewlets/content.py 裡的 ContentRelatedItems 程式碼片段,示範如何存取及顯示:
class ContentRelatedItems(ViewletBase): index = ViewPageTemplateFile("document_relateditems.pt") def related_items(self): context = aq_inner(self.context) res = () if base_hasattr(context, 'getRawRelatedItems'): catalog = getToolByName(context, 'portal_catalog') related = context.getRawRelatedItems() if not related: return () brains = catalog(UID=related) res = list(brains) return res
No comments:
Post a Comment