Content: Blog


What we're working on: improvements to the structure board

Daniele Procida

May 12, 2017

A preview of work in progress to improve the core editing experience

Sometimes the work on django CMS that most excites us isn't to implement new features or grand architectural plans - it's to improve basic mechanisms that users interact with all the time.

We've begun work on the django CMS structure board, the representation of placeholders and plugins that you see when you switch into structure mode on a page.

This first made its appearance in django CMS 3.0, implemented as an overlay on top of the rendered page that allows editing access to the plugins generating it. It has been a familiar core of the django CMS editing experience ever since then, and is still based on fundamentally the same mechanism.

Though it has worked extremely well, we feel it's time to improve it. Since users spend such a lot of time interacting with it, even small improvements will make a lot of difference to their experience.

Decoupling content and structure modes

We plan to do this by decoupling the two modes. At present, the structure mode is parasitic on the content mode, as an overlay. 

This has certain implications. For example, it means that any change to a plugin (such as saving it, or moving it) entails re-rendering the entire output of the page, hiding it, and then finally regenerating the structure view. It also requires developers to implement work-arounds for plugins that don't necessaily produce output just so that they can be exposed in the structure mode.

Decoupling the two modes will eliminate the need to render the page while editing, speeding it up significantly in complex pages, and simplifying the behaviour that plugins need to implement.

It's also going to make future development of the structure mode easier, because changes there will no longer have implications for the content mode, and vice-versa.

Finally, our efforts towards a "headless" django CMS will benefit too, as editing and production of content no longer come to depend on a fixed conception of its rendered output.

We're just starting this work. Perhaps for the casual passer-by, it might not seem very significant, but this is something we're doing for the user who spends a lot of time working with django CMS. It's going to make things better for them every time they use it - and that's meaningful to us.

Do you want to test django CMS?

Try django CMS