2011-08-16 9 views
5

Używając documentation na plone.org wraz z niektórymi na forum, udało mi się uzyskać niestandardowy menedżer portletów poniżej moich treści w Plone 4.0.8. Celem jest posiadanie 4 niestandardowych menedżerów poniżej zawartości ułożonej tak, jak na desce rozdzielczej.Jak dodać portlety giełdowe (z pliku plone.app.portlets) do mojego niestandardowego menedżera portletów?

W każdym razie mój menedżer pozwala mi tylko dodawać portlety statyczne i kolekcji. Po rozejrzeniu się w kodzie, stwierdziłem, że kiedy system zapełni menu rozwijane "Dodaj nowy portlet", przejdzie przez wszystkie portlety. Następnie przechodzi przez atrybuty "for_" każdego portletu, sprawdzając, czy interfejsy są dostarczane przez self - my portlet manager.

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 

Jak dodać interfejs mojego menedżera do listy "for_" każdego portletu?

+2

Zmieniłem interfejs mojego menedżera z 'klasa IBottomPortletManager (IPortletManager)' do 'klasa IBottomPortletManager (IPortletManager, iColumn)' iColumn jest zdefiniowana w plone.app.portlets, więc te portletów już zarejestrowany menedżerów, którzy zapewniają IColumn. Czy to jest idealny sposób na zrobienie tego? – Travv15

Odpowiedz

6

Twój comment jest prawdopodobnie najlepszym sposobem, aby to zrobić. Sedno polega na tym, że same portlety są rejestrowane w interfejsie menedżera portletów, między innymi interfejsami kontekstów, warstw itp. Innym sposobem na to, na przykład, byłoby dodanie dodatkowych rejestracji w twoich profilach/default/portlets.xml złożyć do interfejsu menedżera portletu dla każdego z portletów chcesz addable:

<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> 

Twoja droga jest prawdopodobnie najlepiej jednak, ponieważ brzmi jak tworząc kolumnowy menedżera portletu. Można jednak usunąć IPortletManager z klas podstawowych, ponieważ IColumn już je klasyfikuje.

+0

Z ciekawości, w jaki sposób mogę dodać dodatkowe rejestracje do mojego interfejsu menedżera? Załóżmy, że używam tylko bazy danych IPortletManager, ale chcę również portletów News. Jak dodać mój interfejs menedżera do rejestrowania portletów Wiadomości? Rozglądałem się w witrynie plone.app.portlets, próbując dowiedzieć się, jak te portlety rejestrują interfejsy bez żadnego szczęścia. – Travv15

+0

Zaktualizowałem moją odpowiedź na przykładzie. –