之前看過 collective.edm.listing 例子,它提供類似 Contents 頁籤看到的顯示介面,不過,究竟 Contents 頁籤的表格式管理介面該如何修改呢?
每個目錄網址後面,加上 /folder_contents 就可以進入 Contents 管理介面,它的程式碼到 plone.app.content 找得到,先看 browser/configure.zcml 檔案:
<browser:page for="*" class=".foldercontents.FolderContentsView" name="folder_contents" template="folder_contents.pt" permission="cmf.ListFolderContents" />
再看 browser/foldercontents.py 檔案:
class FolderContentsView(BrowserView): ... def contents_table(self): table = FolderContentsTable(aq_inner(self.context), self.request) return table.render() class FolderContentsTable(object): ... def __init__(self, context, request, contentFilter=None): self.context = context self.request = request self.contentFilter = contentFilter is not None and contentFilter or {} self.items = self.folderitems() url = context.absolute_url() view_url = url + '/folder_contents' self.table = Table(request, url, view_url, self.items, show_sort_column=self.show_sort_column, buttons=self.buttons) def render(self): return self.table.render()
其中的 Table() 是載自 plone.app.content.browser.tableview:
class Table(object): """ The table renders a table with sortable columns etc. It is meant to be subclassed to provide methods for getting specific table info. """ def __init__(self, request, base_url, view_url, items, show_sort_column=False, buttons=[], pagesize=20, show_select_column=True, show_size_column=True, show_modified_column=True, show_status_column=True):
這 Table() 執行的結果,不只是產生內容項目的列表,它可以透過 checkbox 選擇項目,再個別或批次執行 portal_actions 的 Copy、Cut、Rename、Delete、Change State 等動作,或是利用 drag 功能 (配合 draggable 和 draggingHook 的 CSS 設定值) 來調整項目的順序,項目數量超過預設的 20 之話,就會啟用分頁功能。
No comments:
Post a Comment