2012/10/23

folder_contents Customization

之前看過 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: