How should a CMS best publish information for an organisation. That’s his question. He’s had a lot of experience, mostly as a user, with lots of different systems and CMSs.
There are problems. You have to repeat yourself a lot. Data gets wasted and lost. It becomes inconsistent. Everyone has its own idea of which information belongs where and how it should be written.
There doesn’t seem to be a happy middle road. The users don’t have enough freedom to do all that they want to do. And at the same time they have too much freedom as they can mess it up.
A way to get at a solution: we want information instead of data. Look at organizations, for instance. An organization needs to be contacted. An organization has members. Holds events. Has news. Has relations to other organizations. And so on.
He set out to try and get it to work for Cardiff university’s school of medicine. Find some CMS that could do this or that could be adjusted.
He started with an entity concept. An entity can be a complete school or a group of people or a department or whatever. An entity has links to other items like news items and pages. This makes it easy to selectively query the system to put the correct set of contact addresses on a contact page. And the relevant news on a department’s news page.
A contact information page and a news page will also be something in the system. If a user set up the metadata correctly and associated the page with the correct entity, it’ll all work.
A core tenet: don’t waste people’s time. So make it easier to re-use content than to re-enter content.
Recently, 120 people moved to another building. They only had to modify one address on their website and all 120 person’s contact information was up to date again!
The Arkestra system is build with/on django-cms. It started early on in the live of django-cms. The plugin mechanism of django-cms originated in arkestra, for instance. Arkestra has integration with placeholders, pages, plugins, menus.
On the subject of editors. You often only can get two out of three of the following:
Complicated flexible multi-column layout.
Produce well-structured semantic HTML.
No HTML/CSS skills needed.
All their pages have their styling done through the editor. Multiple columns and so on is configurable. So they tried a semantic editor that did all three. (Note: nice button names. ‘undo last mistake’, ‘redo last mistake’, ‘scary html view’). Semantic editing in this case means inserting ‘start new column’ and ‘start new row’ instructions. And every column/row can have additional characteristics set on them like ‘double width’, ‘images with shadows’.
How did django and arkestra work for them? It was a big leap of faith for them. They were not a real open source shop. But it works great! 4k pages per day. About 10k pages of content, about 90% automatically generated by arkestra. 40 web editors. 500 news articles. Everyone is really happy wih the system. It simply works well.
Daniele knew nothing about programming in 2009. During the building of arkestra he basically learned python and django. He was already working on arkestra before he even really understood what a method was :-) But he thought like a user. He suffered like a user. He was a user. That was his strong point. (And it also shows how easy it is to get started with django and python!)
He started out as a complaining and disgruntled user of badly designed CMSs that he could do nothing about. Now he is the happy and content author of a well-working CMS that works well :-)
A number of sites apart from the school of medicine are using it now. And there’s even a chance that the whole university of Cardiff will use it, but he’s got to get multilingual content working for a few remaining items first.
For more information: http://arkestra-project.org/ and https://github.com/evildmp/Arkestra
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):