17. Extending Plone With Add-on Packages

  • There are more than 2,000 add-ons for Plone.

  • Using them saves a lot of development time.

  • Their target, complexity and configurability varies a lot.

  • Add-ons that do not fit the projects needs exactly can be customized by an additonal self-written add-on.

Plone 6 plays with two groups of add-ons: Add-ons for Plone and such for the frontend Volto.

The need of Plone add-ons is depending if you use Plone with or without Volto frontend. As by now, development took place in Plone. Now development will be done in Plone exclusively like before or both in Plone and in ReactJS.

Plone add-ons enrich the CMS by

  • adding content types

  • adding behaviors with new fields and relations for existing content types

  • adding content assembling features for overview pages

  • customizing the editor experience

  • designing the layout

Having a Volto frontend in place, you will apply Plone add-ons with some of the characteristics like above but also Volto add-ons that care about presentation of the content and editor experience.

We start with the scenario of Plone for both backend and frontend. So we use a classic Plone setup without Volto and with the huge repertoire of classic Plone add-ons. This is still be an option in particular as the number of Volto add-ons is just on the way to catch up on all the features and posibilites of Plone add-ons.

Chapter Using Volto add-ons explains how to apply one of the awsome Volto add-ons for enhancing editor experience, adding features like displaying data as charts, searching with a faceted navigation and a lot more.

17.1. Some notable Plone add-ons for a classic Plone setup without Volto frontend

collective.easyform

A form generator for editors.

A simple form created with collective.easyform.

A simple form created with collective.easyform.

Editing a form field through the web.

Editing a form field through the web.

plone.app.mosaic

Layout solution to easily create complex layouts through the web.

collective.geo

Flexible bundle of add-ons to geo-reference content and display in maps

collective.mailchimp

Allows visitors to subscribe to mailchimp newsletters

eea.facetednavigation

Create faceted navigation and searches through the web.

collective.lineage

Microsites for Plone - makes subfolders appear to be autonomous Plone sites

collective.behavior.banner

Add decorative banners and sliders

17.2. How to find add-ons

It can be very hard to find the right add-on for your requirements. Here are some tips:

17.3. Installing Plone Add-ons

Installation is a two-step process.

17.3.1. Making the add-on packages available to Zope

First, we must make the add-on packages available to Zope. This means that Zope can import the code. Buildout is responsible for this.

Look at the buildout.cfg file. In section [instance] is a variable called eggs, which has a list of eggs as a value. For example:

eggs =
    Plone
    collective.easyform

You add an egg to the configuration by adding a new line containing the package name. You must write the egg name indented: this way, buildout understands that the current line is a value of the last variable and not a new variable.

If you add new add-ons, you will have to run buildout and restart the site:

$ bin/buildout
$ bin/instance fg

Now the code is available from within Plone.

17.3.2. Installing add-ons in your Plone Site

Your Plone site has not yet been told to use the add-on. For this, you have to activate the add-on in your Plone Site.

Note

Why the extra step of activating the add-on package? You may have multiple Plone sites (instances) in a single Zope installation. It’s common to activate some add-ons in one site, others in another site.

In your browser, go to Site Setup (shortcut: add /@@overview-controlpanel to the Plone site URL), and open the Add-ons Panel. You will see a list of available add-ons.

Link to Site Setup.

Link to Site Setup

Install EasyForm (the human-readable name of collective.easyform) now.

This is what happens: The GenericSetup profile of the product gets loaded. This does things like:

  • Configuring new actions

  • Registering new content types

  • Registering css and js files

  • Creating some content/configuration objects in your Plone site.

Let’s have a look at what we just installed.

17.4. collective.easyform

There are many ways to create forms in Plone:

  • Pure: html and python in a BrowserView

  • Framework: z3c.form

  • TTW: collective.easyform

The concept of collective.easyform is that you create a form and add some fields. Form submissions may be automatically emailed and saved for download.

Let’s build a registration form:

  • Add an object of the new type ‘EasyForm’ in the site root. Call it “Registration”.

  • Save and view the result, a simple contact form.

  • Select “Define form fields” in menu action.

  • Remove field “comments”.

  • Add fields for name (a text line field) and for experience (a choice field).

  • Select “Define form actions” in menu actions.

  • Add a new action and select “Save Data” as the type. This stores the form data of incoming registrations.

  • Customize the mailer to address the course organisator and the person registering.

Note

Need CAPTCHAs to prevent spam? Read the instructions how to add a captcha field to easyform

17.5. Add page layout management with plone.app.mosaic

plone.app.mosaic supports content assembling on a page of your site.

  • Add plone.app.mosaic to the eggs section in the buildout.

  • Activate the Mosaic add-on.

  • Go to a page in your site and select “Mosaic” of the Display menu.

  • Edit the page to select a Mosaic layout and try inserting some content blocks: text, existing page, list of news.

  • You can read more about the concepts and use of this add-on in the Mosaic documentation

17.6. Internationalization

Plone can run the same site in many different languages.

We’re not doing this with the conference site since the lingua franca of the Plone community is English.

We would use the built-in add-on plone.app.multilingual for this.

Building a multi-lingual site requires activating plone.app.multilingual, but no add-on is necessary to build a site in only one language. Just select a different site language when creating a Plone site, and all text in the user-interface will be switched to that language.

17.7. Summary classic Plone

You are now able to customize and extend many parts of our website. You can even install extensions that add new functionality.