Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / Tips / Display / View Methods

Display / View Methods

每種型別可以擁有多種顯示方式,但都會有一種預設的顯示方式,在擁有一種以上的顯示方式時,具備權限的使用者可以從「顯示」下拉選單,指定想要的顯示方式,這種功能稱為 Dynamic View。

Plone 的 Page, Image ... 預設只有一種顯示方式,通常就稱為「標準方式」,但 Folder 和 Collection 預設擁有多種顯示方式,例如「標準方式」「圖示方式」「表格方式」「所有內容」等,需要的話,可以事後為每種 Type 新增自製的顯示方式。以 Folder 為例,預設的顯示方式包括:

  • Summary view (folder_summary_view)
  • Tabular view (folder_tabular_view)
  • Album view (atct_album_view)
  • Listing (folder_listing)
  • Full view (folder_full_view)

在 ZMI /portal_types 裡可以看到設定值,或是從 plone.app.contenttypes/browser/configure.zcml 看到註冊結果。技術上要先繼承 Products.CMFDynamicViewFTI.browserdefaultBrowserDefaultMixin 類別,例如 Dexterity 的 ItemContainerPloneSite 都看得到,再透過 ZCML 的註冊 (舊版 browser:menuItem 新版 menu="plone_displayviews") 來建立自製顯示,最後再用 GenericSetup XML (例如 Folder.xml) 註冊設定值。

以 use-macro="context/@@listing_view/macros/content-core" 為例,使用的 macro 就註冊在 listing_view 裡:

<browser:pages
  for="plone.dexterity.interfaces.IDexterityContainer"
  class=".folder.FolderView"
  layer="plone.app.contenttypes.interfaces.IPloneAppContenttypesLayer"
  permission="zope2.View"
  <browser:page
    name="listing_view"
    template="templates/listing.pt"
    menu="plone_displayviews"
    title="Standard view" />
  ...

另一方面,使用者需要具備 Modify view template 權限,才能更改顯示方式。

參考 Overriding Views 說明,或利用 @@display-file 取代 (dynamic view) 還有 Listless View 的範例。

Show Default View on NavTree

Select Default View

有時候指定的 Display Method 有錯誤,必須透過 select_default_view 網址來修正,例如 http://mysite.com/myfolder/select_default_view 這樣,或是透過 obj.setLayout("my_new_and_improved_view") 程式碼

plone.displayed_types

選擇結果以打勾符號表示,如果打勾符號不見,要確認瀏覽器支援狀況

# browser/configure.zcml
<browser:page name="set_default_view" for="*" class=".view.SetDefaultView" permission="cmf.ManagePortal" /> # browser/view.py from Products.Five.browser import BrowserView from plone.protect.interfaces import IDisableCSRFProtection from zope.interface import alsoProvides from plone import api class SetDefaultViewStatus(BrowserView): def __call__(self): context = sqlf.context request = self.request alsoProvides(request, IDisableCSRFProtection) count = 1 catalog = context.portal_catalog brain = catalog() for item in brain: obj = item.getObject() logger.info("Updated %s: %s" % (count, obj.absolute_url())) obj.setLayout('view') try: api.content.transition(obj=obj, transition='publish') except: pass obj.reindexObject() count += 1

Folder Contents

orderObjects API in folder_position: 使用 http://myhost/myfolder/folder_position?position=ordered&id=title 之類的網址,就可以依標題來排序。

手動調整位置順序

Data Visualization

昇級 Plone5 造成 Display 下拉選項改變不正常

Syndication

RSS: Products.feedfeeder Really call getObjectInfo when determining updated status of FeedFeederItems

collective.syndication https://github.com/plone/Products.CMFPlone/issues/704#issuecomment-461297145 collective.sidebar for better menu