Plone distribution support
Project description
Plone Distributions
Package supporting the (easy) implementation of a Plone Distribution.
What is a Plone Distribution
A Plone distribution is a pre-packaged version of Plone that includes specific features, themes, modules, and configurations. It is a convenient way to get a specific type of website up and running quickly, as the distribution includes everything needed to run that type of site.
Examples of Plone distributions include:
Similar Concept in Other CMS
-
Drupal: Drupal has distributions for blogs, e-commerce sites, and intranet portals.
-
WordPress: WordPress has a similar concept in the form of "WordPress Multisite," which allows users to run multiple websites from a single installation of WordPress.
-
Joomla: Joomla has a similar concept in the form of "Joomla Templates," which are pre-designed templates for Joomla websites.
-
TYPO3: TYPO3 has a similar concept in the form of "TYPO3 Distributions," which are pre-configured installations of TYPO3 for specific types of websites.
Creating a new Distribution
First of all, a Plone Distribution is a Python Package that can be installed by pip
.
setup.py
The package will follow some conventions, to make it "discoverable" by others.
In setup.py
, always add the correct Trove Classifiers:
"Framework :: Plone",
"Framework :: Plone :: 6.0",
"Framework :: Plone :: Distribution",
and also require plone.distribution
to be available:
install_requires=[
"Plone",
"setuptools",
"plone.distribution",
],
configure.zcml
In your main configure.zcml
, make sure to have the plone
xml namespace declared:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
>
And also include plone.distribution
:
<include package="plone.distribution" />
Then declare the distributions included in your package:
<plone:distribution
name="blog"
title="Personal Blog"
description="A Plone site already configured to host a personal Blog."
directory="distributions/blog"
/>
The registered distribution will configure a Personal Blog, with some default content.
distribution folder
A convention is to use the distributions/<distribution_name>
folder in the root of your package to organize your distribution configuration.
In that folder, you will need to provide:
image.png
A 1080x768 image of your distribution. It could be the default page of a new site, your logo, or any other way of representing this distribution.
profiles.json
A JSON
file with the GenericSetup profiles that are used by your distribution during installation.
This file needs to contain two keys:
-
base: List of profiles installed in every new site using this distribution.
-
content: List of profiles installed when the user decides to create a site with example content.
The configuration for a new Volto site is:
{
"base": [
"plone.app.contenttypes:default",
"plone.app.caching:default",
"plonetheme.barceloneta:default",
"plone.volto:default"
],
"content": [
"plone.volto:default-homepage"
]
}
schema.json
In case you require additional input from the user during site creation, you can customize the form using the schema.json
file.
The file should contain two keys:
- schema: A JSON Schema definition.
- uischema: A react-jsonschema-form configuration to modify how the form is displayed.
The schema should have at least the following keys:
- site_id
- title
- description
- default_language
- portal_timezone
- setup_content
The schema.json
used for the default site creation is:
{
"schema": {
"title": "Create a Plone site",
"description": "Adds a new Plone content management system site to the underlying application server.",
"type": "object",
"required": [
"site_id",
"title"
],
"properties": {
"site_id": {
"type": "string",
"title": "Path Identifier",
"default": "Plone",
"description": "The ID of the site. No special characters or spaces are allowed. This ends up as part of the URL unless hidden by an upstream web server."
},
"title": {
"type": "string",
"title": "Title",
"default": "Site",
"description": "A short title for the site. This will be shown as part of the title of the browser window on each page."
},
"description": {
"type": "string",
"title": "Site Description",
"default": "A Plone Site"
},
"default_language": {"$ref": "#/definitions/languages"},
"portal_timezone": {"$ref": "#/definitions/timezones"},
"setup_content": {
"type": "boolean",
"title": "Create Content",
"description": "Should example content be added during site creation?",
"default": false
}
}
},
"uischema": {
}
}
Important You probably noticed the entries for default_language:
{"$ref": "#/definitions/languages"}
and portal_timezone:
{"$ref": "#/definitions/timezones"}
Both definitions are added in runtime by plone.distribution
to provide a list of languages and timezones available on the installation.
content
folder
WIP: Folder containing json data exported by collective.exportimport
Advanced Usage
Hiding Distributions
By default, plone.distribution
ships with two ready-to-use distributions:
- default: Plone Site (Volto frontend)
- classic: Plone Site (Classic UI)
If you want to limit your users option to select a distribution, it is possible to set the environment variable ALLOWED_DISTRIBUTIONS
with fewer options:
ALLOWED_DISTRIBUTIONS=default
This project is supported by
License
The project is licensed under the GPLv2.
Changelog
1.0.0a5 (2023-05-18)
Bug fixes:
- Import did not import any steps except content and portal. [pbauer] #22
1.0.0a4 (2023-05-18)
New features:
- Increase test coverage. [ericof] #12
- Implement JSON import of content [pbauer] #13
- Use mxdev. [ericof] #18
- Implement default content for default and classic distributions as JSON. [ericof] #20
1.0.0a3 (2023-02-08)
Bug fixes:
- Fix Basic Authentication for Chrome [@ericof] #10
1.0.0a2 (2023-02-08)
New features:
- Change overview page favicon to use Plone logo [@ericof] #7
- Set content creation on
default
andclassic
distributions to be default. [@ericof] #9
Bug fixes:
- Use ajv8 with Ajv2019 class validator to fix
function nested too deeply
on Firefox [@ericof] #4 - Handle authentication when /acl_users does not support cookie extraction [@ericof] #6
1.0.0a1 (2023-02-08)
New features:
- Initial implementation of plone.distribution [@ericof] #1
1.0.0 (Unreleased)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for plone.distribution-1.0.0a5.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72676e265fa4f00ee620eb4572cd3425da76ac0806ecd568f46b5d4cf315f4ab |
|
MD5 | c2305f3d761ee737e3a2667f1a24769a |
|
BLAKE2b-256 | 8a02392de8507897f2dda760848c4473d94e26f0d32c765df9661faed0aca438 |
Hashes for plone.distribution-1.0.0a5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fd90ff251c1bfa7cfe673a97e260dd89446e8b99932e27b51df809c137544e23 |
|
MD5 | 7a793bdd60c16719e0f4ee064d5eefcd |
|
BLAKE2b-256 | dbdf62a09ffd83678da5bc4bbdfe431de8a4d0d23fe24f92d76db0fb7d9e24e8 |