2011-06-19 37 views
5

Tôi đang cố gắng sửa điều hướng tháng của một portlet lịch được gán cho một trình quản lý portlet tùy chỉnh. quản lý này được gọi từ một mẫu trang trình duyệt cụ thể với:Làm thế nào để có được lớp css portlet-băm cho một portlet Calendar được gán cho một trình quản lý portlet tùy chỉnh?

<div id="calendar" 
    tal:content="structure provider:my.custom.portletmanager" /> 

Đáng tiếc là người quản lý không làm cho một wrapper với băm đối với tôi, vì vậy tôi đang cố gắng để tự nối thêm một kssattr-portlethash css class vào thẻ <div> ở trên để thực hiện công việc điều hướng trong tháng (refreshPortlet() cần có). Tôi cố gắng này:

from plone.portlets.utils import hashPortletInfo 
class SectionHomeView(BrowserView): 
    """SectionHome browser view 
    """ 
    implements(ISectionHomeView) 

    def __init__(self, context, request): 
     self.context = context 
     self.request = request 

    @property 
    def getHash(self): 
     info = dict(manager = 'my.custom.portletmanager', 
        category = 'context', 
        key = '/my-section', 
        name = 'mycalendar', 
        ) 
     return hashPortletInfo(info) 

Sử dụng mã này tôi làm được một băm, nhưng chuyển hướng lịch vẫn không hoạt động. Làm cách nào để truy cập thông tin portlet như trình quản lý, danh mục, khóa và tên để tính toán đúng?

Tôi ước gì có những hành vi được mô tả bởi column.pt từ plone.app.portlets.browser.templates và các lớp học ColumnPortletManagerRenderer (portlet/manager.py) nhưng tôi không biết cách làm cho trình quản lý tùy chỉnh của tôi cung cấp cho người quản lý tùy chỉnh đó (ví dụ: như những người quản lý mặc định làm).

+0

Bạn có thể cung cấp một số mã để cung cấp cho chúng tôi một gợi ý về nơi để giúp bạn? – marcosfromero

Trả lời

4

Bạn cần phải chắc chắn rằng bạn có một PortletManagerRenderer và một EditPortletManagerRenderer cài đặt mà biết để render băm, chẳng hạn như:

class MyCustomPortletManagerRenderer(ColumnPortletManagerRenderer) : 
    """ This custom version of ColumnPortletManagerRenderer points to a new 
    template so that HTML can be customised. 
    """ 
    adapts(Interface, IThemeSpecific, IBrowserView, IMyCustomPortletManager) 
    template = ViewPageTemplateFile('column.pt') 

    def can_manage_portlets(self): 
     context = self._context() 
     if not ILocalPortletAssignable.providedBy(context): 
      return False 
     mtool = getToolByName(context, 'portal_membership') 
     return mtool.checkPermission("Portlets: Manage portlets", context) 

class MyCustomEditPortletManagerRenderer(ContextualEditPortletManagerRenderer): 
    """To allow edit support of the above. 
    """ 
    adapts(Interface, IThemeSpecific, IManageContextualPortletsView, IMyCustomPortletManager) 
    template = ViewPageTemplateFile('edit-column.pt') 

đâu column.pt trông giống như:

<tal:block repeat="portlet options/portlets"> 
<div tal:attributes="class string:portletWrapper kssattr-portlethash-${portlet/hash};" 
    tal:content="structure python:view.safe_render(portlet['renderer'])" /> 
</tal:block> 
Các vấn đề liên quan