2011-08-16 32 views
5

Sử dụng documentation trên plone.org cùng với một số trong diễn đàn, tôi đã có thể nhận được trình quản lý portlet tùy chỉnh bên dưới nội dung của tôi trong Plone 4.0.8. Thực tế, mục tiêu là có 4 người quản lý tùy chỉnh bên dưới nội dung được sắp xếp như trang tổng quan.Làm cách nào để thêm các portlet stock (từ plone.app.portlets) vào trình quản lý portlet tùy chỉnh của tôi?

Dù sao, người quản lý của tôi chỉ cho phép tôi thêm các portlet tĩnh và tập hợp. Sau khi nhìn xung quanh trong đoạn mã, tôi thấy rằng khi hệ thống chuyển sang trình đơn thả xuống 'Add new portlet', nó lặp qua tất cả các portlet. Sau đó, nó lặp qua từng thuộc tính 'for_' của portlet để kiểm tra xem các giao diện có được cung cấp bởi trình quản lý portlet của tôi hay không.

def getAddablePortletTypes(self): 
    addable = [] 
    for p in getUtilitiesFor(IPortletType): 
     # BBB - first condition, because starting with Plone 3.1                                 
     #every p[1].for_ should be a list                                       
     if not isinstance(p[1].for_, list): 
      logger.warning("Deprecation Warning ..." % p[1].addview) 
      if p[1].for_ is None or p[1].for_.providedBy(self): 
       addable.append(p[1]) 
     elif [i for i in p[1].for_ if i.providedBy(self)]: 
      addable.append(p[1]) 
    return addable 

Làm cách nào để thêm giao diện người quản lý của tôi vào danh sách giao diện 'for_' của mỗi portlet?

+2

tôi đã thay đổi giao diện quản lý của tôi từ lớp 'IBottomPortletManager (IPortletManager)' để lớp 'IBottomPortletManager (IPortletManager, IColumn)' IColumn được định nghĩa trong plone.app.portlets, vì vậy những portlet đã đăng ký cho các nhà quản lý cung cấp IColumn. Bây giờ, đây có phải là cách lý tưởng để làm điều này không? – Travv15

Trả lời

6

comment của bạn có lẽ là cách tốt nhất để thực hiện việc này. Điểm mấu chốt ở đây là các portlet được đăng ký với một giao diện quản lý portlet, trong số các giao diện khác cho các bối cảnh, các lớp, vv .. Một cách khác để thực hiện điều này, chẳng hạn, sẽ thêm các đăng ký bổ sung vào hồ sơ của bạn/default/portlets.xml nộp vào giao diện quản lý portlet của bạn cho mỗi portlet bạn muốn thích nghi được:

<portlet 
    addview="portlets.News" 
    title="News" 
    description="A portlet which can render a listing of recent news" 
    i18n:attributes="title; 
        description" 
    > 
    <for interface="your.package.IYourPortletManager" /> 
</portlet> 

cách của bạn có lẽ là tốt nhất, tuy nhiên, vì có vẻ như bạn tạo một người quản lý portlet cây cột. Bạn có thể loại bỏ IPortletManager khỏi các lớp cơ sở, tuy nhiên, vì IColumn đã phân lớp nó.

+0

Ngoài sự tò mò, làm cách nào để thêm đăng ký bổ sung vào giao diện người quản lý của tôi? Giả sử tôi chỉ sử dụng IPortletManager làm cơ sở, nhưng tôi cũng muốn các portlet News. Làm cách nào để thêm giao diện người quản lý của tôi vào đăng ký portlet Tin tức? Tôi đã nhìn xung quanh trong plone.app.portlets cố gắng tìm ra cách các portlet này đăng ký các giao diện mà không có bất kỳ sự may mắn nào. – Travv15

+0

Cập nhật câu trả lời của tôi với một ví dụ. –

Các vấn đề liên quan