The collectionmultiview portlet is a collection portlet which supports multiple view modes. It inherits the built-in plone.portlet.collection and extend it with view adapters support.
Creating an additional view is as simple as writing a class which inherits from BaseRenderer, and register it as a named adapter
Sample code:
from collective.portlet.collectionmultiview import BaseRenderer from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile class MyCustomRenderer(BaseRenderer): title = 'My Custom Renderer' template = ViewPageTemplateFile('path/to/template.pt')
ZCML:
<configure xmlns="http://namespaces.zope.org/zope"> <adapter name="mycustomrenderer" factory=".package.MyCustomRenderer"/> </configure>
You can also extend the portlet schema with additional fields by setting the 'schema' attribute in the renderer class.
Sample code:
from collective.portlet.collectionmultiview import BaseRenderer from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile from zope import schema from zope.interface import Interface from plone.app.form.widgets.wysiwygwidget import WYSIWYGWidget class IExtraFields(Interface): my_extra_field = schema.Text(title=u'Extra field') class MyCustomRenderer(BaseRenderer): title = 'My Custom Renderer' schema = IExtraFields template = ViewPageTemplateFile('path/to/template.pt') #optional custom_widgets = { 'my_extra_field': WYSIWYGWidget }