2011-08-16 14 views
5

Usando el documentation en plone.org junto con algunos en el foro, pude obtener un administrador de portlets personalizado debajo de mi contenido en Plone 4.0.8. El objetivo, en realidad, es tener 4 gerentes personalizados debajo del contenido dispuestos como el tablero.¿Cómo agrego portlets de stock (desde plone.app.portlets) a mi administrador de portlets personalizado?

De todos modos, mi administrador solo me permite agregar portlets estáticos y de recopilación. Después de revisar el código, descubrí que cuando el sistema va a llenar ese menú desplegable 'Agregar nuevo portlet', pasa por todos los portlets. Luego, recorre el atributo 'for_' de cada portlet para verificar si las interfaces son proporcionadas por uno mismo: mi administrador de portlet.

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 

¿Cómo agrego la interfaz de mi administrador a la lista de interfaces "for_" de cada portlet?

+2

me cambió la interfaz del gestor de mi clase 'IBottomPortletManager (IPortletManager)' a clase 'IBottomPortletManager (IPortletManager, iColumn)' iColumn se define en plone.app.portlets, por lo que los módulos de función ya están registrados para gerentes que proporcionan IColumn. Ahora, ¿es esta la forma ideal de hacer esto? – Travv15

Respuesta

6

Su comment es probablemente la mejor manera de hacerlo. La clave aquí es que los portlets están registrados en una interfaz de administrador de portlets, entre otras interfaces para contextos, capas, etc. Otra forma de hacerlo, por ejemplo, sería agregar registros adicionales en sus perfiles/default/portlets.xml presentar a la interfaz del gestor de portlets para cada uno de los módulos de función que desea se puede añadir:

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

su forma es probablemente el mejor, sin embargo, ya que suena como que son creación de un gestor de portlets columnar. Sin embargo, puede eliminar IPortletManager de las clases base, ya que IColumn ya lo subclasifica.

+0

Por curiosidad, ¿cómo agregaría registros adicionales a la interfaz de mi administrador? Supongamos que solo estoy usando IPortletManager como base, pero también quiero portlets de Noticias. ¿Cómo agrego mi interfaz de administrador a los registros del portlet Noticias? He estado buscando en plone.app.portlets tratando de descubrir cómo estos portlets registran interfaces sin suerte. – Travv15

+0

Actualicé mi respuesta con un ejemplo. –

Cuestiones relacionadas