Fixing Plone 5, the Framework

A story of early adoption.

Plone is known to be a great CMS and also a great framework for CMS-ish applications.

Because of the many improvements in Plone 5 we used it for our projects, even before it's official release.

Like with any Dot-Zero release, this comes with a cost: bugs, regressions, missing functionality.

But this is open source, so we gave back and - together with the Plone community - fixed all the problems along the way to everyone's benefit.

BlueDynamics Alliance

About the talk

We often use Plone in its depth - as a framework to build on

It is possible to do this close by the Plone core.

Plone 5 helped us a lot to meet and exceed the requirements.

But due to the early adoption, we had to face a lot of problems and find solutions which we brought back upstream.

The end result is again far closer to a Plone-the-framework as we need it.

The Plone 5.0 Release

Why was it released, when it wasn't ready yet?

  • It was ready a CMS - UI-Level worked.
  • It was not ready as a framework.
  • Important to get it out of the door, so people start using it.

About the projects

We realised some projects with Plone 5.

Here 3 examples

This talk is about the requirements we had, the problems we faced and the solutions we found on three example projects:

Porsche Informatik Salzburg

by Klein & Partner KG

Our involvement

Customer Requirements

Project Characteristics

Architekturstiftung Österreich

by programmatic, Johannes Raggam in cooperation with Klein & Partner KG and The Schubiduquartett Design Agency

Our involvement

Customer Requirements

  • layout/tiles/mosaic w/o editor
  • not a single viewlet or portlet used/written
  • collective.lineage
    • rewritten Js and large parts of backend
    • plone.scale/plone.namedfile refactored at large
  • collective.easyform integrated (merging plone5)

Project Characteristics

Swiss Bankers Association

by agitator websolutions, Peter Holzer in cooperation with Klein & Partner KG

Our involvement

Customer Requirements collective.linguatags

About our involvement in Open Source

Giving back via Pull Requests

portal tabs Add review state to portal tabs results #1689

resource registry Simpler generate gruntfile/ compile resources #1500 make Gruntfile.js generator more verbose #1496 better formatting of generator and generated file in orer to increase… #1425 Fix GenericSetup bundle compile error with missing resources #1647 Fix plone-legacy RequireJS errors in development mode #1784

toolbar Prettify toolbar #1733 Minor toolbar cleanup: #1426 Add less variable for width of secondary toolbar column #1416

related items Relateditems refactoring + more #696 WIP Related Items Optimizations #676 allowUpload JSON view, content-type json for all #101

structure pattern Structure pattern: Alert design #660 Structure pattern action items changes #651 WIP: Making structure pattern more flexible to customization options #618

tinymce Use official TinyMCE bower dependency #637 multiple TinyMCE styles from theme bundle #1598


Porsche Informatik

default ILayoutAware ... alles kann ILayoutAware werden ... jeder context kann ILayoutAware gerendert werden.

Also clean up of all the code. adapterize ILayoutAware #37 add subresponse_exception_handler in order to deal more sane with 401… #34 Take permissions and visibility of viewlets in tiles into account. #27 Fix missing view permissions info on tiletype registration #7 Optional show all fields #179 WIP Use adaptarized >=4.0.0 #226

Lineage Navroot subjects setting #1629 folder contents: fix breadcrumbs and toolbar for subsites and VH #82 enable non-portal-root published sites to deliver the translations fo… #93 Optional keywords of current navigationroot only. #35 fix #1513 - Wrong portal_url used for TinyMCE in multilingual site #1514 Use getSite() instead of portal url for controlpanel portlets #1459

Optimizations deferred initialize to reduce costs of adapter lookup. #348 configure edit urls for locking support #359 Change all text getters on ob… #308 IRichText indexing for all and html to plain transform #288 IRichText indexing for all and html to plain transform #287 The defaults of exclude from navigation is now obtained from an adapter. #215 plone.autoform.directives and more generic javascript #228 Don't validate empty start/end #227 More graceful dates_for_display when no start/end #223 Add traceback info with record name to importer in order to ease debugging #22 Give RecordsProxy a parent. #10 Allow to pass a custom exception handler for the response. #9 Fixes out-of-memory errors when using lots of subrequests #8

unload protection Enable unload protection by using pattern class pat-formunloadalert i… #112 Enable unload protection by using pattern class pat-formunloadalert i… #48 Enable unload protection by using pattern class pat-formunloadalert i… #1730 Enable unload protection by using pattern class pat-formunloadalert i… #48

patterns Call callables in pattern options #46 Allow to set CSS class via plone.autoform directives #45 Allow time options to be customized for DatetimeWidget. #24

forms orderable fieldsets #15 Enable override of fieldset label/description in a subsequent directive. #13 Sane ordering for fields. #11 Thet improvements #9 masonry, imagesloaded upd. uncompressed in resource registry #7 WIP: bower, pat-leaflet, pat-gallery, cleanup #6 Cleanup: don't scale images up for direction "down", GIF handling, zero as flexible width #11 use latest plone.scale scaling factories #24 Use ZCA to fetch the scaling factory using IScalingFactoryFetcher #22 Added events to notifiy before/after all/single transform(s) are executed #5

Lessons learned

Want to contribute?

This is a really good idea!

be part of the world wide community

Ask questions at

File issues at GitHub!

If in doubt file at plone/Products.CMFPlone

Enhance the documentation

Your future self and coworkers will love you!

Fix bugs

Enhance Addons


Plone Improvement Proposals (PLIP)

Enhance the ecosystem around Plone

Right, Down, Page DownNext slide
Left, Up, Page UpPrevious slide
POpen presenter console
HToggle this help