Creating rich, interesting layouts for dynamic content through a web interface has recently been transformed in Plone by a product called Collective.Cover. Content editors can now drag and drop content “tiles” into rows and columns, arranging things as they see fit in an intuitive process.
While this makes for a nice experience and covers much of the content you might like to include in your layouts, it is possible to add your own custom “Tiles”. The developer documentation for this process is currently being developed, but it’s not too difficult to create your own tiles from the basic tiles included in the package.
I created a package for a tile that queries courses from a the Talent LMS, listing courses a user is registered for and the current completion status. Here’s what it looks like:
The current best practice for creating plone products involves using templer.plone to generate the boilerplate structure. The very short version of the creation process involves implementing the PersistentCoverTile interface from collective.cover.tiles.base and registering the new tile with the plone.app.tiles record in the plone registry. The tile template calls a custom BrowserView that requests the course details using the currently authenticated user asynchronously.
For more details, please see the repository on Github (https://github.com/a-pasquale/cloudspring.lms) that implements this custom tile.