The 2023 editon of the anual Plone conference happend from October 2nd to 8th in Eibar, Basque Country
The kitconcept team was present with 8 developers. Our team members gave plenty talks, keynotes and trainings.
kitconcept and friends having team dinner
Two days filled with trainings. Free for all conference attendees. This offer is unique in the Plone community and kitconcept team members were the backbone of the trainings about how to use Plone 6. From deployment to development to deep insides into how Volto and Plone 6 works.
Alok Kumar and Jakob Kahl did a two day training to help developers get started with Volto and React:
https://2023.ploneconf.org/schedule/training/volto-and-react
Check out their trainings online if you want to catch up:
Our colleague Érico Andrei gave a training about installing Plone on Day 2, the 3rd of October
https://2023.ploneconf.org/schedule/training/installing-plone
Víctor Fernandez de Alba is kitconcept CTO and the Volto Release Manager. Tiberiu Ichim is a Volto team member and one of the key contributors to Volto. They gave key insights into how to work effectively with Volto. If you have experience with Volto and you want to become a real pro, this is the training you should go to.
https://2023.ploneconf.org/schedule/training/effective-volto
https://training.plone.org/effective-volto/index.html
On day one, kitconcept team members presented two talks, including the main keynote of the day.
Team members Érico Andrei, Víctor Fernández de Alba and Timo Stollenwerk together with Maurits van Rees of Zest Software and Eric Steele of Salesforce presented the very first Keynote of the Conference titled “State of Plone”.
Our colleague Víctor Fernández de Alba gave a presentation about the challenges faced by the Plone content management system in keeping up with modern frontend developments and the growing popularity of headless CMSs.
Breaking boundaries: Plone as headless CMS
https://2023.ploneconf.org/schedule/breaking-boundaries-plone-as-headless-cms
Day Two was a informative Day, packed with interesting Talks, Panels and Presentations.
Timo Stollenwerk, Sally Kleinfeldt, Tiberiu Ichim,, Eric Steele, Eric Bréhault, Rikupekka Oksanen, Érico Andrei and Guido Stevens hosted a very interesting Panel about the Future of Search Algorithms in Plone.
This panel provided a brief history and modern examples of Plone search, followed by a discussion of what improvements are needed - both from a marketing and technical perspective. This topic was first discussed at the 2011 conference and it was interesting to see how opinions had changed.
Meanwhile, kitconcept frontend developer Alok Kumar held a Presentation about what makes a developer friendly Volto Addon, and how we as a developer ourselfes can improve on the way we develop addons for Volto.
https://2023.ploneconf.org/schedule/is-your-volto-addon-developer-friendly
Later in the afternoon kitconcept developer Rob Gietema held an intriguing Talk about Nick, a headless CMS written in Node.js and how easy it is to build a website with it.
https://2023.ploneconf.org/schedule/how-to-build-a-site-using-nick
Following Rob, kitconcept Employee David Glick shared some Details and Stories on hosting large Plone sites in a Docker Swarm Cluster.
https://2023.ploneconf.org/schedule/tales-from-a-production-plone-cluster
In this talk, Érico Andrei guided us through the feature-rich world of Plone Distributions.
https://2023.ploneconf.org/schedule/unlocking-the-power-of-plone-distribution-a-hands-on-guide
In the evening CodeSyntax organized a showcase of different local sports, including stone lifting, wood chopping and wood sawing. Timo represented kitconcept in this together with Phillip Bauer of Starzel. After that we concluded the day with cold drinks and Pinxos at the conference party.
Day 3 was filled with quite technical presentations, providing Information on the Cutting Edge Technology Plone has to offer.
On the third Day of the Plone Conference, kitconcept Employee Fred van Dijk shared the News on automating a plone Release and how to host and operate a small Docker Swarm cluster using Plone.
https://2023.ploneconf.org/schedule/how-the-plone-foundation-ai-team-manages-its-websites-with-ci-cd
After a quick coffee break Víctor Fernández de Alba shared the progress on the Volto-Light-Theme and its inner workings.
https://2023.ploneconf.org/schedule/volto-light-theme-volto-theming-in-2023
CEO Timo Stollenwerk indulged us in the Story of the Challenges of migrating large, goverment-owned websites into a Plone project.
A little later in the afternoon, Érico Andrei presented us with a better, improved way to test Plone codebases.
https://2023.ploneconf.org/schedule/testing-your-plone-codebase-with-pytest
In his presentation Rohit Kumar shared the progress regarding implementing a visual workflow Manager in Volto.
https://2023.ploneconf.org/schedule/workflow-manager-in-volto
The kitconcept team continues to drive innovation in the Plone community. Volto is the default frontend for Plone 6 and dominated the topics during the conference. We are happy to be part of such an amazing community.
We will again host the Beethoven Sprint in Bonn, 13-17 May 2024.
Plone portal from Brasil. https://github.com/plonegovbr
1.2 billion page view per year, 28 sites, 800k+ content items.
Plone conference Brasilia 18-24th November 2024.
PLone Improvement Proposals for Volto. See on GitHub.
What to do when Maurits tells you to update five packages with security fixes? We made a product for this. DigitalOcean API to get all the project lists, scp to get the instance files (bin.instance, yarn.lock), and search.
The winner is Kim Nguyen with a picture of a blue house.
The Tau manifesto. Tau is 2 times pie. Pie is only half the story. 1 tau is 1 turn. Much easier to teach to children. See https://tauday.com/tau-manifesto.
Do you want glory? Do you want to help Plone? Help Plone help you. Get your Plone provider listing today!
Go to https://plone.org/providers and register.
In 2014 I moved from Australia to Bangkok. I started a meetup for Python. We are at meetup 94 now. There is a PyCon in Thailand December 13-15 this year.
Do you live in a town that does not have Python meetups? Create one! Build it and they will come. You need a venue. Anyone who is interested in developers, can help you. How do you get people to talk: twist their arm, get them drunk. Have two short talks rather than one big one.
The Python foundation now pays for meetups. You can use meetup.com, but you do not have to. You need a code of conduct. I needed a page, I used pyscript, Python in the browser.
Erico promised me a beer if I did something useful for him. Open an Plone site, do exportimport, you can now export it to one file per item.
I had ideas for talks, but did not do it, so quickly they are here.
pas.plugins.oidc. Created by Mauro Amico. OpenID Connect is a layer of identification. You can install the PAS plugin in Plone and talk to such a server [works in a test setup for me as well, Maurits]. Works with various identity providers, like Google Workspace, Keycloak, EU Login. Click a link, redirect to the provider and identify there, callback, internal connection to provider, user is created in Plone and group management granted. We use it in production in two scenarios. See https://github.com/collective/pas.plugins.oidc.
Lichess: Open source chess server. Free, free, free, no ads, no tracking. 93M games played last month. I wanted to translate it into Basque. They use CrowdIn. Can we use something similar for Plone? Weblate maybe? We use this at CodeSyntax. Perhaps I will work on this the coming months for the core Plone translations.
This Plone conference started at Beethovensprint 2022. Last of of the sprint, after last dinner, with last beer in our hands, a few guys were there and approached us: "You are going to organise the conference, right?"
Thank you everyone!
This year the Foundation membership voted in favour of a change to the bylaws, making it more inclusive, and moving to two cohorts for the Plone Foundation board, each cohort serving for two years.
New Foundation members this year: Mauro, Tanya, Jan, Karel, André, Brian, Joao, Martin. We have 100 active members from 21 countries. It you are an emeritus member and want to reactivate, contact the board.
There is a new contributor agreement process, more digital now, not fully automated yet, but easier to handle. There were 43 real new contributors, not including some hopeful GSoc students that never did anything. There were 5 real active GSoc students, thank you for your work, and thank you Google for sponsoring this. Others see that we are handling this well as organisation. And we try to bring the students here to the conference to present their work. Unfortunately there are strict rules in the EU making it hard to get visa for everyone.
Election for the next Plone Foundation Board of Directors. The result of the vote is in. For a one year term: Brian Davis, Kim Paulissen, Martin Peeters, Paul Roeland. For a two year term: Eric Brehault, Guido Stevens, Mikel Larreategi. Congratulations. Thank you outgoing directors: William, Jens, T. Kim and Erico.
Meeting adjourned.
The 2022 editon of the anual Plone conference happend from October 10th to 16th in Namur, Belgium.
The kitconcept team was present with nine developers. Our team members gave three trainings, two keynotes, and six talks.
The kitconcept team in action at #ploneconf2022. pic.twitter.com/wQV4qeVCxB
— kitconcept (@kitconcept_gmbh) October 13, 2022
Two days filled with trainings. Free for all conference attendees. This offer is unique in the Plone community and kitconcept team members were the backbone of the trainings about how to use Plone 6. From deployment to development to deep insides into how Volto and Plone 6 works.
Alok Kumar and Jakob Kahl did a two day training to help developers get started with Volto and React:
https://2022.ploneconf.org/schedule/training/volto-and-react
Check out their trainings online if you want to catch up:
Our colleague Érico Andrei gave a training about installing Plone with Jens Klein on day one about how to install Plone:
https://2022.ploneconf.org/schedule/training/installing-plone
Victor Fernandez de Alba is kitconcept CTO and the Volto Release Manager. Tiberiu Ichim is a Volto team member and one of the key contributors to Volto. They gave key insights into how to work effectively with Volto. If you have experience with Volto and you want to become a real pro, this is the training you should go to.
https://2022.ploneconf.org/schedule/training/effective-volto
https://training.plone.org/2022/effective-volto/index.html
On day one, kitconcept team members presented three talks, including the main keynote of the day.
Plone Foundation president, and our teammate, Érico Andrei kicked off the first day of the conference with a keynote about the Plone community.
kitconcept CEO Timo Stollenwerk presented a case study about how kitconcept relaunched hundreds of websites with the Plone 6 stack.
Plone at Scale: How Plone Powers Hundreds of Websites at one of the Largest Research Institutions in Europe
Alok Kumar presented “A Deep Dive Into Internals Of Volto” where he explained the different configuration options in Volto.
Volto Release Manager Victor Fernandez de Alba presented the roadmap for Plone 6 and Volto beyond 2022.
https://2022.ploneconf.org/schedule/talks/plone-6-beyond-2022
https://2022.ploneconf.org/schedule/talks/the-past-present-and-future-of-how-we-test-plone
30 Million visitors on a single day. 670k content objects. If you are running a Plone site at scale you definitely want Érico Andrei on your team. He helped the Electoral Justice department in Brazil to run and scale Plone for the upcoming elections.
https://2022.ploneconf.org/schedule/talks/brazil-still-loves-plone
Rob Gietema started plone-react together with Roel Bruggink at the Beethoven Sprint 2017 in Bonn at the kitconcept office. This first became Volto and later Plone 6.
For Rob, this isn’t enough. Check out his latest “pet project” Nick CMS. A NodeJS-based CMS headless CMS backend that works flawlessly with Volto.
https://2022.ploneconf.org/schedule/talks/nick-a-nearly-headless-cms
Plone Release Managers Maurits van Rees, Eric Steele, Victor Fernández de Alba, and Timo Stollenwerk started day three of the Plone Conference with the third keynote about “The State of Plone”:
https://2022.ploneconf.org/schedule/talks/state-of-plone
The kitconcept team continues to drive innovation in the Plone community. Volto is the default frontend for Plone 6 and dominates the topics during the conference. We are happy to be part of such an amazing community.
Volto continues to innovate at a fast pace towards Plone 6. Today we released another major milestone on our road to Plone 6: Volto 14.
Volto 14 was in the making since September 2021 and it is in active use in various projects at Eau de Web, Red Turtle, Rohberg, kitconcept, and others.
Volto 14 comes with a set of new exiting features: a new search block that supports faceted search, locking support, a new seamless mode that makes deploying Volto easier, a new mobile navigation and support for Node 16.
The new search block allows editor to create sophisticated faceted searches through the web without writing a single line of code.
Editors can define criteria for the content that is listed, like in the existing listing block in Volto.
Then editors can then choose arbitrary facets that are displayed to the users to choose from to narrow down the search.
Locking in a Content Management System is a mechanism to prevent users from accidentially overriding each others changes.
When a user edits a content object in Plone, the object is locked until the user hits the save or cancel button. If a second user tries to edit the object at the same time, she will see a message that this object is locked.
Content object in Volto 14 that is locked by another user
Locking requires at least plone.restapi 8.9.0 or plone.restapi 7.4.0 to be installed.
The new “seamless mode” allows zero configuration deployment by avoiding hardcoded environment variables in builds involved, and establishing good sensible defaults when setting up deployments (and also in development). So the developer/devOps doesn’t have to overthink their setups.
These are its main features:
and these immediate benefits:
Seamless Mode requires at least plone.rest 2.0.0a1 to be installed.
We polished the mobile navigation for Volto 14 to improve the user experience on mobile.
New mobile navigation in action on the Plone Conference 2021 website
Volto 16 will support Node 16 in addition to Node 14 and Node 12. Node 16 will receive security updates until April 2024.
Node 16 release schedule from nodejs.org
Volto 14 is an important step towards Plone 6. Volto 15 will switch the default editor from DraftJS to Slate editor and it is planned to be ready in Q1/Q2 2022. This is the last big step for Volto before Plone 6 can be released.
Distilled from the latest work done in Volto, we're showcasing some patterns, features, or enhancements that have landed in Volto from the last year to the present. We will also have a glimpse of what is ahead in the future of Volto with the new features roadmap.
In the past year we had four major releases, 40 minor releases, 36 alpha releases, 25 patch releases, for a total of 105 releases. Plus some new tooling and tool releases, like plone i18n and plone generator.
New Volto config, dubbed as Volto's Configuration Registry, introduced to fix circular import dependency problems. Hot Module Reloader was fixed. Read the upgrade guide.
New i18n (internationalisation) infrastructure. This is now a separate package. Same is used for generation of i18n in add-ons.Read the upgrade guide.
Forms as schema. Forms should be constructed from schemas instead of by hand. InlineForm allows us to create forms for blocks from a schema. Blocks can have variations, or we can extend it. Read the edit component documentation.
New widgets:
New core blocks:
Pluggable framework, similar to React's Portal component. See the talk by Tiberiu and see the Pluggables development recipe.
Storybook provides a sandbox to build and test visual components in isolation. Currently it is only setup to be used by Volto core. We need help with work to have storybook setup with adding. See the Storybook talk held by Victor, and see the storybook itself.
Critical CSS: inline the critical CSS for improved performance. Run critical-cli to output critical.css. This is then inlined in the headers, while regular CSS is moved to the bottom of the body. See the deployment documentation.
Lazy Loading utilities. Introduced injectLazyLibs HOC wrapper to inject lazy-loaded libraries as properties to your components. These components are only loaded once all your main libs are loaded.
Express.js middleware. Volto uses this for SSR and static resources serving. You can now write custom middleware and add it to settings.expressMiddleware
.
API expanders allow the expansion of different API endpoints from Volto with calls from your custom endpoints. Avoid adding too many expanders if they are not critical to the initial page.
External routes: useful when another application is published under the same top domain as Volto. If Volto would fetch the content for that path, it will break. You can disable this path in config.settings.externalRoutes
. You can also use regular expressions.
Seamless mode, introduced in Volto 13, enhanced in Volto 14, which has already seen a lot of alpha releases. Originally, we tried to unify both frontend and backend servers under the same path, but this was tricky, causing various problems. We settled on a new ++api++
traversal for getting information from the backend. Also, to come closer to zero config, you can now pass environment variables at runtime instead of build time. This means you can generate one build, and use this in all environments (testing, production). Read the deployment documentation.
Context navigation component. This is a navigation portlet component, similar to Classic Plone. The view is there, but you need to enable it. See the development recipe.
There is some work in progress:
Future work:
I did nothing, I just brag about what others have done. So thank you Volto early adopter community!
This presentation is an introduction to the new Volto developer-targeted feature, the Pluggables framework. It is more an argument for extensibility in CMS UI and in Volto.
Basically, with Pluggable a central component provides a pluggable slot that other components can fill, like this:
<div className="toolbar">
<Pluggable name="toolbar-main" />
</div>
// ...
<Plug id="quicklinks" pluggable="toobar-main">
<Button />
</Plug>
This is a Volto port of https://github.com/robik/react-view-slot.
The big picture:
In React, data flow is top to bottom. A parent component passes properties to children and children communicate with the parent by emitting events. This makes sense and works well. For "out of tree" data you need Redux. There is no protocol for add-hoc communication between components.
UI state is fluid. Extensibility means reusability and scalability. This is hard. You need to design upfront. Plone backend uses the Zope Component Architecture, which means pluggability is baked in, it is very natural. You can view Pluggables as viewlets-on-demand, but they are really not. But yes, you can think about a Pluggable as a viewletmanager and a Plug as a viewlet.
You can overwrite a Plug with a Plug, by registering it with the same id. So if the original Plug gives you color blue, you can overwrite it with color red.
You can do custom rendering of Plugs within your Pluggable, by iterating over all Plugs and for example wrapping each in a div with a class name.
Showcase: volto-workflow-progress
(main toolbar plugin) and volto-editing-progress
("sidebar" for plugin).
Limitations:
Implementation in pseudocode:
First the context:
<PluggablesProvider>
<Pluggable name="top" />
<Plug name="delete" />
</PluggablesProvider>
Then the dumb version of the Plug:
const Plug = ({id, children}) => {
const { register } = useContext(PluggablesProvider.Context);
React.useEffect(() => {
register(id, () => children);
});
return null;
}
Takes a bit of study, but in the end it is not so hard.
The Pluggable becomes a bit simpler:
const Pluggable = (name) => {
const { getPlugs } => useContext(PluggablesProvider.Context);
return getPlugs(name).map(f => f());
}
I am one of the Plone Release Managers, and have been working on Plone 6, which is now in alpha stage. But my personal website was still using the ancient Plone 2.5:
Often I have made plans to update my site to:
Long ago it was clear to me that an inline migration would not be practical. It would take too many steps: update the code to Plone 3.3, migrate the data, to Plone 4.3, migrate data, to Plone 5.2 Python 2.7, migrate data, Plone 5.2 Python 3, migrate data, Plone 6, migrate data.
Additionally, the question was how to handle the weblog, which is the main content. This was using Products.Quills
, a Plone add-on for blogs. Updating to Plone 3 could have worked at the time, but this was made harder by some some custom code I added. This enabled me to use it as a podcast. I used this to enrich some of my summaries of sermons from my church with the actual audio of the sermon. I doubted whether to even include this content in Plone 6, as the last sermon was from 2008. I hate breaking links, so I kept it, although a bit hidden.
Another point that needed some extra attention, was that most, if not all, blog entries were not written in html, but in ReStructuredText. I make a lot of summaries of talks when there is a Plone Conference. The html editor on Plone 2.5 did not work anymore, or I disabled it to a simple textarea
. I always open up the same text editor that I use for programming (previously Emacs, currently VSCode), and type the summary there. I much prefer writing ReStructuredText there, especially when I simply need text without any markup. I then paste it in Plone, without fear of losing all my work when my internet connection dies.
Lastly, I have an RSS/atom feed which is used by planet.plone.org and maybe others to stay updated when I add a new blog entry. I did not want this url to change.
Anyway, about six years ago I decided that I would use collective.jsonify
to export my site, and then import it using transmogrifier. But time passed without any progress. This year, collective.exportimport
was shaping up to be the preferred way to import the data. For export you can use it in Plone 4.3 as well, but definitely not in Plone 2.5.
At the beginning of this week I looked at jsonify. Didn't I have a local copy of my website on my laptop, with collective.jsonify
installed? No! And it was not installed on the live site either. And installation would be hard, because the site uses Python 2.4, and currently you cannot even reach PyPI with older versions of Python 2.7.
Mildly panicked, I started on a custom script to export the content, still as json. Some details aside, this actually was not so hard. I looked at what collective.exportimport
expected, and created the Python list of dictionaries accordingly. Then do a simple json.dumps()
call and you are done. Except that this gave an ImportError: the json module is not available in Python 2.4. Okay, install simplejson
package. But you need PyPI access for that, which does not work. Workaround:
cp bin/instance bin/instance-json
bin/instance-json run export_mvrsite25.py
After that, it was not too hard anymore. I used plonecli
to create a new add-on with Plone 6.0.0a1. I actually do not yet use the add-on code, except for loading a minor patch that I added, but this gave a reasonable, modern Plone 6 buildout. Create a Classic Plone site, tweak a few settings (let Folder use folder_workflow, allow English and Dutch, navigation depth 1, enable syndication, configure caching and mail), import the content with collective.exportimport
, edit a bit, and done.
The weblog now consists of standard Folders and Pages. To improve the view, I added a Collection, showing the latest pages first, and showing all content of the last seven blogs. I enabled syndication here, so it has an RSS/atom feed.
The weblog has always advertised two atom feeds:
https://maurits.vanrees.org/weblog/atom.xml
https://maurits.vanrees.org/weblog/topics/plone/@@atom.xml
In the new site, the first one kind-of worked out of the box, but it only showed the items that were directly in the weblog folder, and this is not where my weblog entries are. I solved this with a patch to Products.CMFPlone.browser.syndication.views.FeedView
: when atom.xml is viewed on a folder, check if it has a default page, and show the atom.xml of this default page instead. In this case, the default page is a Collection with the correct settings. So the general feed will keep working.
For the second one, my first idea was to create a folder 'topics' and within it a Collection with id 'plone'. Problem: 'plone' is a reserved word and cannot be used as id of a content item, so the id became 'plone-1'. Solution here: create the 'plone-1' collection directly in the weblog folder, and do a redirect in the frontend server (nginx):
rewrite ^/weblog/topics/plone/@@atom.xml /weblog/plone-1/atom.xml last;
And that's it! My website is now on Plone 6.0.0a1:
There are some more details that I could go into, like splitting up the buildout into multiple parts, with tox
as main way to build everything, in preparation for moving more and more parts to pip-only. But that will have to be for another time.
Meanwhile: have a look around, and enjoy the fresh look!
Volto 14 alpha 23 is out. So still in alpha, but companies are using it in production. Should be final soon. Some plans for Volto 15. Created plone.volto integration package, where we try to give an easy transition from earlier company-specific versions. plone.restapi as always is pretty boring, stable. Erico worked on Docker integration.
Plone 6 alpha 1 is out. Eric sent an email for some coordination, like docs, training, accessibility, installers. If you want to be involved, let me know.
Franco has stepped out of the Framework Team, thank you for all your work. There is discussion about the role of the Framework Team. Plan is to keep it running, some more people have been asked.
Membership team: we have some people in sight as new members. Erico is stepping down as team lead, Victor is stepping up.
Security: Plone 6 will have 5 years security support. Synchronizing with Zope team. Some new members may be coming.
Marketing: busy with conference, also after the conference. Busy with plone.org renewal.
Installers: see the talk by Jens Klein earlier. Plone 6: no more installer, but we do have tooling. There are Docker images. We may want to reduce the role of buildout, and focus more on pip.
Plone Conference: you are looking at it. Some tasks to do afterwards. If anyone is interested in getting a certificate for following a training, ask us, and we can send it.
Internationalization: new branches for Plone 6, so Plone 5 uses different branch. New releases for 5 and 6. Updating po files, looking at i18n in Mockup.
Admin/Intrastructure: servers are still running. Cat herding sysadmins for doing stuff, keeping things up to date.
Trainings: relaunch is complete. We have three new trainings: Theming Plone Classic, Deploying Plone 6, Getting Started with Plone 6 (that one only in video). Various have seen major updates. Need to work on landing pages (we have two), remove the number 5 from the url, update some more trainings. Maybe Mastering Plone Classic training, but hard with navigation due to duplicate section targets when copying. Migration training would be good. We need to prune and tag some.
Plone Classic: We did polishing on Barcelonate, it is pretty ready. Focussing on bobtemplates before the trainings, making theming easier. JavaScript/ES6 is the remaining big issue. Plan is to finish it this year, we are quite far. We need other people helping us out.
Documentation: will be releasing a new Plone 5 branch today. For the new stuff, the tech stack is ready. New version of automated screen shot is about ready. We don't want a duplicate of the training, but we can automatically include code of it, so there is only one source of truth. The style guide is not always followed, seeing what we can do about that. Biggest point is missing documentation. There are now branches where the various teams can add and edit their content. We may change things, but we take this as input for the final structure.
This is a basic rundown and summary of our beloved subjects like ZODB persistence. Traversal. The view/viewlet/portlet trinity. How is a call handled in Plone. The differences between zcml and generic setup. Utilities and the ZCA. restrictedTraverse. The Plone catalog.
These are surprises that I have encountered myself, or that I have seen on faces of people I have trained or worked with during the years.
Zope vision from the nineties. Why don't we use this dynamic language called Python so we can change things TTW? It's so easy.
It starts easy, but then you hit what we call a Z-shaped learning curve. Dynamic Python makes things easy, and then it makes things hard, at least when you put Zope on it, then CMF, then Plone. Plone the product on top of a CMS on top of a framework on top of a language. We have a product, a framework, a stack, so it is hard.
It helps to teach all the levels. Give new users a drawer for each level, so they have a box that they can put some info in.
You have:
4 Same language/formats on different levels:
But: there is no magic. It is just advanced technology.
Startup:
So the ZCA overrides components in runtime. The alternative is to edit core files, maybe compile them, and restart. Much less nice and not sustainable.
So now we have a Plone process running.
Over HTTP Zope gets a request, does traversal, finds an object in the ZODB, loads it in memory. Then on top of this object we show a browser view / template. The template hooks into a main template, maybe does some sub requests, some Diazo, and we end up with some html and we are done.
This is all still 'lies to children'. It is simplified until we are able to understand more. With increment exposure to these concepts, it will stick more. It is complicated, but there is no magic.
It is traversal in the wrong direction.
There is so much Plone content online: training, docs, youtube, github, discourse. We all learn in different ways, with own preferences, reading, viewing. There are so many repositories on github that you can explore for new ideas. Just yesterday Philip did a talk about exportimport and afterwards I did it, but from a different angle. It helps.
The community is our biggest asset.
Brought to you by Philip Bauer of https://www.starzel.de and Fred van Dijk of https://zestsoftware.nl
Watch it on Youtube Channel https://www.youtube.com/channel/UCPo8CirtIfvt8GO4rm-dD4g
Two weeks ago we cut two important releases on the road to Plone 6. Plone REST API 7 introduces a new link integrity feature for blocks-based pages. Volto 12 improves the add-on ecosystem by introducing a new configuration registry to avoid circular dependencies.
Photo by Stephen Leonardi on Unsplash
Linking pages is one of the core idea of the world wide web. Keeping links within a website intact is therefore one of the core features that any Content Management System needs to provide.
One of the core features of Plone has always been that editors can copy and move single pages as well as large content trees without breaking internal links to other parts of the site. This is accomplished by using unigue IDs (UUIDs) instead of relative or absolute paths when adding a link to another page. Plone uses “portal transforms” internally to rewrite those links in RichText fields on save operations.
Plone 6 (aka Volto) introduces blocks-based page layouts, that store a JSON structure internally instead of HTML. This more structured way of storing page content and layout allows more complex page layouts. Though, because of this change, the existing portal transforms mechanism that rewrites links to UUIDs did not work any longer.
Blocks-based Volto page in edit mode (with kitconcept-blocks-grid)
Werkbank, a Plone agency from Bochum, Germany, stepped up to sponsor the development of link integrity in 2020, since they needed that for a client project.
I started to draft a possible solution and wrote a first prototype. Thomas Buchenberger from 4teamwork picked up that work at the Plone Conference sprint in Ferrara, Italy.
Andrea Cecchi from RedTurtle joined our efforts and refactored the resolveUID algorithm into a blocks transformer, that we started to use for other use cases and that made the resolveUID transformer more generic and flexible.
After that, we cut a first plone.restapi 7 alpha release and entered a longer period of quality assurance and testing.
Two weeks ago, after we tested the new feature in multiple projects at kitconcept, I cut a final release of Plone REST API 7.
After the first alpha release, the ResolveUID transformation was added to links and images. In addition plone.restapi 7 comes with a new blocks serialization mechanism and an important fix that makes sure files are opened directly by Plone for anonymous users.
We also added a “smart fields” concept that allows integrators to mark a blocks field as searchableText field.
A new @contextnavigation endpoint was added that allows for local navigations. We enhanced the navigation endpoint to expose an optional navigation title (“nav_title”) field.
Since the final 7 release, we cut six more releases and REST API 7 was included in Plone 5.2.4 release.
Photo by Gaelle Marcel on Unsplash
Tiberiu and Victor worked on a new Volto configuration registry which is the new central point to store and retrieve Volto configurations. The configuration registry is a singleton that ensures a setting only exists once. With more an more Volto add-ons that started to depend on each other, we started to run into circular dependencies issues that we can avoid now with the new configuration registry.
You can find more details about it in the Volto docs and in the Volto 12 upgrade guide.
Plone REST API 7 and Volto 12 were two very important releases on our road to Plone 6.
We plan to cut another Plone REST API 8 branch and release for Plone 6, which will support Python 3 only.
Volto will continue to move at very high pace towards Plone 6. We started to organize a series of Plone 6 “Micro-Sprints” to push things further.
Check out the Volto Roadmap on github for more details.