A sane, working, editor-friendly way of creating front pages and other composite pages. Working now, for mere mortals.
Python RobotFramework JavaScript CSS
Latest commit ff18fbc Dec 14, 2016 @hvelarde hvelarde Back to development: 1.4b2
Failed to load latest commit information.
docs Clarify requirements for Bootstrap Grids (#660) Sep 14, 2016
src/collective Issue 686 - Use timestamp instead of string of timestamp to represent… Dec 13, 2016
.coveragerc Simplify .coveragerc Mar 31, 2016
.csslintrc Add CSS Lint configuration Aug 19, 2013
.gitignore Remove hard dependency on plone.app.stagingbehavior as that package i… Jan 14, 2016
.jshintignore Clean up static files Dec 7, 2015
.travis.yml Kill Firefox after_script to avoid never ending "GConf-WARNING **: Th… Nov 17, 2016
CHANGES.rst Back to development: 1.4b2 Dec 14, 2016
CONTRIBUTORS.rst Update CHANGES with fix for listing expired content in carousel compo… Apr 21, 2015
HISTORY.rst Move previous changelog entries to HISTORY.rst Mar 31, 2016
MANIFEST.in Fix MANIFEST.in. Jan 10, 2014
README.rst Added Climate-Adapt website (#691) Dec 12, 2016
bootstrap.py Update bootstrap.py Jul 17, 2015
buildout.cfg Set deprecation-warnings = on Oct 28, 2016
cover.png Add screenshot of the site of the Presidency of Brazil (closes #390) Aug 11, 2014
heroku.cfg Fix Heroku configuration May 4, 2016
setup.cfg Update code analisys part to use recommended extra Mar 31, 2016
setup.py Back to development: 1.4b2 Dec 14, 2016
versions-4.2.x.cfg Remove plone app robotframework (#679) Oct 28, 2016
versions-4.3.x.cfg Upgrade plone.app.blocks to 3.1.0 (#666) Sep 20, 2016
versions-5.0.x.cfg Upgrade plone.app.blocks to 3.1.0 (#666) Sep 20, 2016
versions-5.1.x.cfg Add build for Plone 5.1 Aug 18, 2016



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 add the following to it:

eggs =

collective.js.bootstrap =
plone.app.blocks = 3.1.0
plone.app.drafts = 1.0
plone.app.tiles = 1.1.0
plone.tiles = 1.8.0

If you are using Plone 4.2.x you need to add the following also:

collective.js.jqueryui =
plone.app.jquery = 1.7.2
plone.app.jquerytools = 1.5.7
plone.app.z3cform = 0.6.3
plone.directives.form = 1.1

If you want to use a newer release of collective.js.bootstrap, you will need to update plone.app.jquery:

plone.app.jquery = 1.8.3

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.


You may have to empty your browser cache and save your resource registries in order to see the effects of the product installation.

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.