Skip to main content

A sane, working, editor-friendly way of creating front pages and other composite pages. Working now, for mere mortals.

Project description

Life, the Universe, and Everything

collective.cover is a package that allows the creation of elaborate covers for website homepages, especially for news portals, government sites and intranets that require more resources than a simple page or collection can offer. However, despite offering rich resources to build a cover, collective.cover also provides a very easy mechanism for managing its contents, built around a drag-and-drop interface.

collective.cover is based on Blocks and Tiles, like Mosaic, the new layout solution for Plone.


For impatient types, there is a demo installation of collective.cover on Heroku. It needs about 60 seconds to spin up and it will purge all changes after about an hour of non-usage.

Use cases

Suppose you are running The Planet, a news portal that has a bunch of editors focused on getting news on different topics, like Economy, Health or Sports.

If you are the main publisher of the site, you may want to delegate the construction of the front page of the Economy section to the people working on that content area, but you might not want them messing around the Sports section as well.

Also, suppose you have the final game of the World Cup and the match is going to be defined on penalties: you may want to prepare a couple of cover pages and publish the right one focused on the team that won in the end.

These are the kind of issues we want to solve with this package; we are still far from it, but that is the idea.

Who is using it?

These are some of the sites using collective.cover:

The Presidency of Brazil uses collective.cover on the front page of its site.

Mostly Harmless

Got an idea? Found a bug? Let us know by opening a support ticket.

Known issues

See the complete list of bugs on GitHub.

Don’t Panic

We are currently working on the documentation of the package; this is what we have right now (contributions are always welcomed):


To enable this package in a buildout-based installation:

Edit your buildout.cfg and add the following to it:

eggs =

If you want to use the relation field you must use the [relations] extra in your buildout configuration.

eggs =
    collective.cover [relations]

After updating the configuration you need to run ‘’bin/buildout’’, which will take care of updating your system.

Go to the ‘Site Setup’ page in a Plone site and click on the ‘Add-ons’ link.

Check the box next to collective.cover and click the ‘Activate’ button.


We use webpack to process static resources on this package. webpack processes SCSS and JS files, minifies the resulting CSS and JS, and optimizes all images.

To contribute, you should start the instance in one shell and start webpack watcher on another with the following command:

$ bin/watch-cover

Then go to webpack/app folder and edit SCSS and JS files; webpack watcher will automatically create the final resources in the right place.

There are also other commands added to handle more complex scenarios.

The following command will set the buildout node installation in the system PATH, this way you can use webpack as described on their documentation.

$ bin/env-cover

The following command generates JS and CSS without the minify step (it can be used to check the code being generated in a human readable way).

$ bin/debug-cover

The following command rebuilds static files and exit (insted of keep watching the changes):

$ bin/build-cover

Upgrading from 1.x to 2.x

In version 2.0b1 we removed a hard dependency on You must use the [relations] extra in your buildout configuration as stated above, or your site will break with the following error:

AttributeError: type object 'ICatalog' has no attribute '__iro__'

Not entirely unlike

Over the years there have been some packages designed to solve the problem of creating section covers in Plone. We have used and have taken ideas from the following:


Very old; the legacy code is so complex that is not maintainable anymore. It has (arguably) the best user interface of all. Layouts can not be created TTW. Viewlets are just page templates associated with content types; you can drag&drop viewlets around the layout. Publishers love it.


Code is very old, but still maintained (at least works in Plone 4). Allows to create complex layouts TTW and use any layout as a template. Easy to extend and edit (but is terrible to find a content to use). Needs a lot of memory to work and aggressive cache settings.


Allows the creation of layouts TTW but it has (arguably) the worst user interface of all. It is easily extended and there are several add-ons available that provide new functionality for it.

Home Page Editor of the Brazilian Chamber of Deputies Site

Strongly based on Collage, this package was presented at the World Plone Day 2012 Brasilia. It allows editing of home pages and the definition of permissions on blocks of content. Works under Plone 3 only.


A new package that lets site editors add portlets to a set of new locations: above and below page contents, portal top and footer. The package comes with a number of flexible layouts that are used to position the portlets, and locations can be fixed to the nearest site object, to facilitate inheritance. In collective.cover (this package), we don’t want to use portlets at all.

Releasing using zest.releaser

Static resources on this package are generated using webpack and aren’t included in VCS. If you release using zest.releaser you have to upload manually the files to PyPI or you will end with a broken distribution:

  • run longtest and fullrelease, as usually

  • answer “no” when asked to upload to PyPI and continue normally

  • do a checkout to the tag you’re releasing

  • run bin/build-cover to update static files

  • create the distribution files using python sdist bdist_wheel as usual

  • upload the files using twine upload dist/*

In case of errors you will have to create a new release as the PyPI Warehouse doesn’t allow for a filename to be reused.

Share and Enjoy

collective.cover would not have been possible without the contribution of the following people:

  • André Nogueira

  • Asko Soukka

  • Carlos de la Guardia

  • Cleber J. Santos

  • Daniel Jowett

  • Davi Lima

  • Denis Krienbühl

  • Érico Andrei

  • Franco Pellegrini

  • Fred van Dijk

  • Fulvio Casali

  • Giorgio Borelli

  • Gonzalo Almeida

  • Héctor Velarde

  • JeanMichel FRANCOIS

  • Juan A. Díaz

  • Juan Pablo Giménez

  • Kuno Woudt

  • Laura Pérez Mayos

  • Marcos F. Romero

  • Maurits van Rees

  • Rodrigo Ferreira de Souza

  • Silvestre Huens

  • Thiago Curvelo

  • Thiago Tamosauskas

  • Launched Pixels (icon)

You can find an updated list of package contributors on GitHub.

Development sponsored by Open Multimedia, Ravvit and Simples Consultoria.


There’s a frood who really knows where his towel is.

3.0.0 (2023-03-29)

  • Adds icons for the Cover content type and for the Compose and Layout tabs. [wesleybl]

  • Fix error when clicking on a folder in Content Tree. [idgserpro]

  • Fix error when clearing content chooser input (fixes #942). [wesleybl]

  • Improve content chooser search input layout. [wesleybl]

  • Fix layout scroll - impossible to save. [idgserpro]

  • Remove patch in Products.ZCatalog.query.IndexQuery. Products.ZCatalog 5.4 fix bug when search parameter is a record. [wesleybl]

  • Drop suport to Python 3.6. [wesleybl]

  • Use plone resource instead of browser resource. [wesleybl]

  • Remove javascript customization that was making ajax calls synchronous. [wesleybl]

  • Shows selected folder path in Content Tree (fixes #921). [wesleybl]

  • Add missing dependencies: Products.MimetypesRegistry, Products.ZCatalog, persistent, plone.locking, zope.container, zope.traversing, ZODB and Zope. [wesleybl]

  • Remove unused dependencies:,, cssselect, testfixtures and transaction. [wesleybl]

  • Fix link integrity (fixes #615). [wesleybl]

  • Unlock Cover when editor leaves Compose/Layout tabs (fixes #916). [wesleybl]

  • Fix PicklingError when editing basic tile that contains an image (fixes #907). [wesleybl]

  • Reorganizes the js events register in Compose when we drag content from one tile to another, in order to prevent the content from remaining on the source tile. [wesleybl]

  • In PersistentCoverTileDataManager set, purge tile after put values into storage to prevent old values from being cache, since purge accesses Also updated the attribute where data is saved for [wesleybl]

  • Show Cover in navbar. [wesleybl]

  • Remove custom message of onbeforeunload popup. Browsers no longer display the custom message. [wesleybl]

  • Apply patch in Products.ZCatalog.query.IndexQuery, to avoid error when clicking on a day with event in the calendar tile. [wesleybl]

  • Fix calendar tile in Plone 5.2 (fixes #633). [wesleybl, pbauer]

  • Remove old upgrade steps. [wesleybl]

  • Add suport to Python 3.6, 3.7 and 3.8. [pbauer]

  • Drop support for Plone 4.x [cleberjsantos]

  • Add support to Plone 5.2. [cleberjsantos]

  • Drop PFG support [cleberjsantos]

  • Fix plone.namedfile scales [cleberjsantos]

  • Correction of the visualization of the image scales [cleberjsantos]

  • Fix Js registry with new concepts in Plone 5 [cleberjsantos]

  • Drop Deco grid [cleberjsantos]

  • Refactor tests [cleberjsantos]

2.2.3 (2021-02-02)

  • Fix removing a list tile item. [fredvd]

  • Fixed changing the order in a list tile by drag and drop. [maurits]

2.2.2 (2019-12-27)

  • Fix brown bag release. [hvelarde]

2.2.1 (2019-12-24)

  • Fix multiple regressions caused by the migration of JavaScript code to webpack in release 2.2.0 (fixes #859, #861, #868 and #871). [Mubra]

2.2.0 (2019-02-26)

  • Deprecate resource registries; instead, we now use a viewlet in plone.htmlhead to load JavaScript code. This simplifies maintainance of the add-on among multiple Plone versions. [rodfersou]

  • Process static resources using webpack. [rodfersou]

2.1b2 (2018-10-04)

  • Fix behavior of remote_url field on Basic tiles as populating them from an alternate URL could result on incorrect links stored. Remove upgrade step from profile version 22 used to update the field; we include a new upgrade step that lists suspicious tiles to help fix any issue by hand (fixes #839). [hvelarde]

2.1b1 (2018-09-28)

  • Fix remote_url field definition in Banner tile and hide a tag if no URL is defined. [hvelarde]

  • Links on Basic tiles are now editable (fixes #397). [hvelarde]

  • Avoid TypeError when a style used on a tile was removed (fixes #827). [rodfersou]

  • Avoid KeyError when tile schema has changed (refs. [hvelarde]

  • Fix package uninstall. [hvelarde]

2.0b1 (2018-08-24)

  • Update package dependencies. [hvelarde]

  • Deprecate PFG tile; it will remain available in Plone 4, but not in Plone 5. [hvelarde]

  • Remove hard dependency on; if you’re ugrading from a previous version of collective.cover you must add the extra [relations] (closes #684). [hvelarde]

  • Remove predefined layouts as they were created using Deco grid system and they are broken in Plone 5 (closes #652). You can still create your own layouts using your favorite grid system as usually. [rodfersou]

  • Remove upgrade steps for old, unsupported releases. [hvelarde]

  • Remove deprecated adapters CollectionUIDsProvider, FolderUIDsProvider and GenericUIDsProvider. [hvelarde]

  • Fix retrieval of available image scales in tile layout configuration for Plone 5 (fixes #781). [rodfersou]

  • Fix edit list element in compose tab on Plone 5 (fixes #770). [rodfersou]

  • Fix display of tabs in content chooser for Plone 5. [cdw9, rodfersou]

1.7b3 (2018-07-09)

  • Review multiple class selection when there are many classes (closes #785). [rodfersou]

  • Small code refactor to increase future Python 3 compatibility. [hvelarde]

1.7b2 (2018-04-27)

  • Fix multiple CSS class selection in tile configuration for tiles different from basic tile. [rodfersou]

1.7b1 (2018-04-27)

  • Update i18n, Brazilian Portuguese and Spanish translations. [hvelarde]

  • Allow selection of multiple CSS classes in tile configuration. [rodfersou]

  • Small code refactor to increase future Python 3 compatibility; add dependency on six. [hvelarde]

  • Provide alternative text for image fields in tiles (closes #628). [hvelarde]

1.6b5 (2017-11-21)

  • Fix purging of tile annotations when removing tiles from the cover layout. This solves exponential growth of cover objects when using versioning, leading to check in/check out ( timeouts on backends using proxy servers (fixes #765). [rodfersou]

  • Do not auto include package dependencies, but declare them explicitly. [hvelarde]

1.6b4 (2017-10-30)

  • Revert declaring cover_layout field in content type schema as readonly (fixes #761). [hvelarde]

1.6b3 (2017-10-23)

  • Fix edit view of carousel tile when one carousel item has a unicode character in its title (fixes #757). [fulv]

  • Explicitly declare cover_layout field in content type schema as readonly; Robot Framework tests pass again with latest version of Plone 4.3 (fixes #759). [hvelarde]

1.6b2 (2017-09-01)

  • Use correct image/x-icon MIME type for ICO file format (fixes #750). [hvelarde]

  • Fix IDatetimeWidget tile override if using >= 1.1.1: collective.z3cform.datetimewidget is merged into plone.formwidget.datetime, so the zcml must override the template from plone.formwidget.datetime.z3cform.interfaces.IDatetimeWidget as well. (closes #745). [idgserpro]

  • Review tile refresh using custom event. [rodfersou]

1.6b1 (2017-06-23)

  • Fix deprecation of adapters made in previous release, as they were incorrectly removed. Code removal will still happen in collective.cover v1.7. [idgserpro]

  • Use absolute URL for root in content chooser tree (fixes #733). [maurits]

  • Fix content chooser clear button to update results (closes #727). [rodfersou]

  • Drop support for Plone 4.2. [hvelarde]

  • Fix typo in basic tile template (is_empty is not a property but a function). [hvelarde]

1.5b1 (2017-06-12)

  • Information stored on basic tiles populated with private content is no longer shown to users without proper permissions (fixes #721). [hvelarde]

  • Dropping a folder on a carousel tile no longer populates the tile with the items inside the folder; populating the carousel tile with the results of the query in a collection is still supported. [rodfersou, hvelarde]

  • Dropping a folder or a collection into a list tile previously resulted in the tile being populated with the items inside the folder or the results of the query in the collection, making impossible to have folders or collection as items of the list tile themselves (fixes #713). [rodfersou, hvelarde]

  • Update recommended versions of Blocks dependencies to keep in sync with current Mosaic development. [hvelarde]

  • Fix order of UUIDs of sorted function in ListTile’s ‘results’ method. [idgserpro]

  • Review content chooser events to happen just at Compose tab (fixes #710). [rodfersou]

  • Do not assume all tile types have schemas. [alecm]

  • Do not declare the Cover class as an implementer of IDAVAware; This makes absolutely no sense and is causing an error when doing a GenericSetup export (fixes #396). [hvelarde]

1.4b1 (2016-12-14)

  • Fix @@updatetilecontent view to avoid rendering outdated data. [hvelarde]

  • Fix TypeError when changing default image scale on basic tiles (fixes #686). [rodfersou]

  • Fixed adding a ‘more’ link in list tiles. Previously you could select an item to use as ‘more’ link, but it did not stick. [maurits]

  • The replace_with_objects method was removed from the list tile; use replace_with_uuids instead. [hvelarde]

  • “Add Content” button is now shown also in Plone 5. [hvelarde]

  • Avoid exceptions while using the content chooser in Plone 5. [hvelarde]

  • Add helper function to get the human representation of a mime-type on Dexterity-based content types. This fixed an AttributeError that was causing an exception on Plone 5. [hvelarde]

  • We now get the types that use the view action in listings in Plone 5 also. [hvelarde]

  • ESI support was refactored; now all tiles inherit from ESIPersistentTile by default. [hvelarde]

  • Add plone.protect when save layout (fixes #651). [rodfersou]

  • Use pat-modal instead of prepOverlay for Plone 5 (fixes #641). [rodfersou]

  • Enforce usage of >= 1.1.0 to avoid creation of zillions of empty blob files when using versioning (fixes #532, huge HT @datakurre). [hvelarde]

1.3b1 (2016-09-12)

  • Update Traditional Chinese translation. [l34marr]

  • Remove dependency on five.grok (closes #510). [l34marr, rodfersou]

  • Use the X-Robots-Tag header to avoid indexing of image scales on default view; this will reduce the number of 404 (Not Found) responses generated by crawlers visiting the site in search of volatile content. [hvelarde]

  • Enforce usage of plone.api >= 1.4.11 to avoid TypeError while running upgrade step to profile 14. [hvelarde]

1.2b1 (2016-07-04)

  • A new calendar tile was added. The tile dislays a calendar that highlights the events taking place on the current month, the same way as the standard calendar portlet does. [rodfersou]

  • Handle AssertionError on upgrade step to profile 13 to avoid failures when a cover object has duplicated tiles on it. Now, an error message will be logged and the object will be skipped; you must manually remove the duplicated tiles (closes #619). [hvelarde]

1.1b1 (2016-03-31)

  • Enforce usage of 2.2.1 to avoid issues with tiles breaking the whole cover page. [hvelarde]

  • Add option to select random items in collection tile (closes #608). [rodfersou]

  • Carousel tile now uses a relative ratio to set its height (fixes #414). [terapyon, hvelarde]

  • Remove hard dependency on as Archetypes is no longer the default framework in Plone 5. Under Plone < 5.0 you should now explicitly add it to the eggs part of your buildout configuration to avoid issues while upgrading. [hvelarde]

  • Link integrity was refactored to work on all tiles and under Plone 5; a hard dependency on Products.Archetypes was removed (fixes #578). [hvelarde, rodfersou]

  • Do not use the calendar tool to discover Event-like objects as it was removed on Plone 5. Instead, try to guess if an object is an Event by using its catalog metadata. [hvelarde]

  • Package is now also tested with installed; a few bugs related with API incompatibilities among Archetypes and Dexterity were fixed. [hvelarde]

  • Remove Grok dependency for vocabularies. [l34marr]

  • You can now use a collection to populate a carousel tile; search results without a lead image will be bypassed (fixes #574). [rodfersou]

  • Shows message to user if an exception is thrown in a tile in AJAX calls. (closes #581). [idgserpro]

  • Fix date format in collection tiles (closes #584). [tcurvelo]

  • RichText tile no longer breaks with installed (closes #543). [frapell, rodfersou]

  • Add missing dependency on collective.z3cform.datetimewidget. [hvelarde]

  • Remove hard dependency on as that package is no longer needed in Plone 5. Under Plone < 5.0 you should now explicitly add it to the eggs part of your buildout configuration to avoid issues while upgrading. [hvelarde]

  • Implement drag and drop among tiles (closes #487). [rodfersou]

  • Clean up static files. [rodfersou]

Previous entries can be found in the HISTORY.rst file.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

collective.cover-3.0.0.tar.gz (1.7 MB view hashes)

Uploaded source

Built Distribution

collective.cover-3.0.0-py3-none-any.whl (358.5 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page