Plone发行版支持
项目描述
Plone发行版
支持(简单)实现Plone发行版的包。
什么是Plone发行版
Plone发行版是包含特定功能、主题、模块和配置的预包装Plone版本。它是快速建立特定类型网站的一种便捷方式,因为发行版包含运行该类型网站所需的一切。
Plone发行版的例子包括
其他CMS中的类似概念
-
Drupal: Drupal提供用于博客、电子商务网站和内部网门户的发行版。
-
WordPress: WordPress有类似的概念,即“WordPress多站”,允许用户从单个WordPress安装中运行多个网站。
-
Joomla: Joomla有类似的概念,即“Joomla模板”,这是为Joomla网站预先设计的模板。
-
TYPO3: TYPO3中有一个类似的概念,称为"TYPO3发行版",它为特定类型的网站提供了预配置的TYPO3安装。
创建一个新的发行版
Plone发行版是一个Python包,可以通过pip
安装。
setup.py
该包将遵循一些约定,以便其他人可以“发现”它。
在setup.py
中,始终添加正确的Trove分类器
"Framework :: Plone",
"Framework :: Plone :: 6.0",
"Framework :: Plone :: Distribution",
并要求plone.distribution
可用
install_requires=[
"Plone",
"setuptools",
"plone.distribution",
],
configure.zcml
在你的主configure.zcml
中,确保声明了plone
XML命名空间
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
>
并包括plone.distribution
<include package="plone.distribution" />
然后声明你的包中包含的发行版
<plone:distribution
name="blog"
title="Personal Blog"
description="A Plone site already configured to host a personal Blog."
directory="distributions/blog"
/>
注册的发行版将配置一个个人博客,其中包含一些默认内容。
发行版处理器
在注册发行版时,你可以提供pre_handler
、handler
和post_handler
,它们必须是具有以下签名的函数。
def pre_handler(answers: dict) -> dict:
return answers
def handler(distribution: Distribution, site, answers: dict):
return site
def post_handler(distribution: Distribution, site, answers: dict):
return site
每个处理器将以这种方式被调用
pre_handler
:它将在创建站点之前处理对这些答案的修改handler
:它将在创建裸Plone站点之后运行,但不是安装所需的GenericSetup配置文件和创建内容的默认处理器post_handler
:它将在站点设置完毕后运行
如果你在Plone站点创建表单中添加了一些额外的字段,并想在Plone站点中进行一些额外的配置,你可以添加自己的处理器并按以下方式注册
<plone:distribution
name="blog"
title="Personal Blog"
description="A Plone site already configured to host a personal Blog."
directory="distributions/blog"
post_handler=".handlers.blog.post_handler"
/>
发行版文件夹
约定是在你的包根目录中使用distributions/<distribution_name>
文件夹来组织你的发行版配置。
在那个文件夹中,你需要提供
image.png
一张1080x768的发行版图片。这可能是一个新站点的默认页面、你的标志或其他代表这种发行版的方式。
profiles.json
一个包含在安装过程中使用的GenericSetup配置文件的JSON文件。
该文件需要包含两个键
-
base:使用此发行版创建的每个新站点的安装配置文件列表。
-
content:当用户决定创建包含示例内容的站点时安装的配置文件列表。
新Volto站点的配置是
{
"base": [
"plone.app.contenttypes:default",
"plone.app.caching:default",
"plonetheme.barceloneta:default",
"plone.volto:default"
],
"content": [
"plone.volto:default-homepage"
]
}
如何添加插件
如果你想在Plone发行版中添加Plone后端插件,那么你必须执行以下步骤。
将你的插件,如collective.person
,添加到你的setup.py
install_requires=[
"setuptools",
"Plone",
"plone.distribution>=1.0.0b2",
"plone.api",
"collective.person",
],
将其添加到你的dependencies.zcml
<!-- List all packages you depend here -->
<include package="plone.volto" />
<include package="plone.restapi" />
<include package="collective.person" />
<include package="plone.distribution" />
</configure>
将其添加到你的profiles.json
"base": [
"plone.app.contenttypes:default",
"plone.app.caching:default",
"plone.restapi:default",
"plone.volto:default",
"collective.person:default",
"plonetheme.barceloneta:default"
],
schema.json
如果在站点创建期间需要从用户那里获取额外的输入,可以使用schema.json
文件自定义表单。
该文件应包含两个键
- schema:一个JSON Schema定义。
- uischema:一个react-jsonschema-form配置,用于修改表单的显示方式。
schema应至少包含以下键
- site_id
- title
- description
- default_language
- portal_timezone
- setup_content
用于默认站点创建的schema.json
是
{
"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": {
}
}
重要 你可能已经注意到了默认_language和portal_timezone条目
{"$ref": "#/definitions/languages"}
和portal_timezone
{"$ref": "#/definitions/timezones"}
这两个定义都是通过plone.distribution
在运行时添加的,以提供安装时可用的一组语言和时间区域。
content
文件夹
包含表示此发行版内容的JSON数据的文件夹。
要从此文件夹导出站点内容,请使用bin/export-distribution
脚本。
bin/export-distribution path/to/zope.conf Plone
在上面的示例中,“Plone”是要导出的Plone站点的ID。
高级使用
隐藏发行版
默认情况下,plone.distribution
附带两个现成的发行版
- default:Plone站点(Volto前端)
- classic:Plone站点(经典UI)
如果您想限制用户选择分发版,可以通过设置环境变量ALLOWED_DISTRIBUTIONS
来使用更少的选项。
ALLOWED_DISTRIBUTIONS=default
本项目由以下机构支持
许可证
本项目采用GPLv2协议许可。
变更日志
2.0.0b1 (2024-05-17)
新功能
- 重新设计创建站点页面 [@danalvrz] #63
2.0.0a1 (2024-05-16)
重大变更
-
plone.distribution现在基于plone.exportimport而不是collective.exportimport。
导出格式中存在一些不向后兼容的变更。要将现有分发版转换为新格式,请按照以下步骤操作
- 使用plone.distribution 1.0.x从分发版创建一个站点
- 安装plone.distribution 2.0.x
- 删除分发版的
contents/items
文件夹。 - 使用
bin/export-distribution
脚本以新格式导出分发版。
@davisagli, @ericof #61
新功能
- 默认分发版:允许用户在创建站点时上传标志 [@ericof] #66
- 经典分发版:允许用户在创建站点时上传标志 [@ericof] #67
- 移除对Plone包的依赖,添加对Products.CMFPlone的依赖 [@ericof] #70
错误修复
- 从报告中获取现有分发的名称,而不是答案 [@ericof] #60
- 修复新站点创建与某些plone.rest版本冲突的问题 [@ericof] #71
- 使用pathlib.Path.read_text方法读取profile.json以避免未关闭文件异常 [@folix-01] #75
内部
- 更新
plone/meta
配置 [@ericof] #73 - 在创建站点失败时记录跟踪回溯 [@pbauer] #82
- 将
plone.exportimport
提升到1.0.0a5 [@ericof] #83
1.0.0b4 (2024-04-03)
错误修复
- 修复导出文件。 [pbauer] #58
1.0.0b3 (2024-03-08)
错误修复
- 修复在站点根上的导入块问题。 [pbauer] #56
内部
- 更新配置文件。 [plone开发者] 6e36bcc4
1.0.0b2 (2023-10-11)
新功能
- 在导出内容之前删除旧blob [@ericof] #34
- 支持新的导出/导入格式,每个JSON文件包含一个内容项 [@ericof] #47
1.0.0b1 (2023-07-10)
新功能
- 对jsonschema验证答案负载 [@ericof] #38
- 允许在创建站点之前预处理答案的分发 [@ericof] #39
- 覆盖plone.restapi中的@system以显示分发信息 [@ericof] #45
1.0.0a9 (2023-06-27)
错误修复
- 允许设置默认语言"默认"值 [@ericof] #36
1.0.0a8 (2023-06-25)
新功能
- 将@rjsf/core提升到版本5.8.2 [@ericof] #35
1.0.0a7 (2023-06-24)
错误修复
- 修复内容导出到JSON [@ericof] #33
1.0.0a6 (2023-06-23)
新功能
- 改进对测试分发的支持 [@ericof] #24
- 允许仅导出仍在开发中的分发 [@ericof] #28
- 为从分发版创建的Plone站点创建报告 [@ericof] #30
- 清理导出内容以删除对portal.absolute_url()的引用 [@ericof] #32
错误修复
- 内容语言应允许在门户配置中 [@ericof] #23
内部
- 更新配置文件。 [plone开发者] 047ec50d, 55bda5c9, d7e9e748
1.0.0a5 (2023-05-18)
错误修复
- 导入没有导入任何步骤,除了内容和门户。 [pbauer] #22
1.0.0a4 (2023-05-18)
新功能
- 增加测试覆盖率。 [ericof] #12
- 实现内容的JSON导入 [pbauer] #13
- 使用mxdev. [ericof] #18
- 以JSON形式实现默认和经典分发的默认内容。 [ericof] #20
1.0.0a3 (2023-02-08)
错误修复
- 修复Chrome的Basic身份验证。 [@ericof] #10
1.0.0a2 (2023-02-08)
新功能
- 更改概览页面的favicon以使用Plone标志 [@ericof] #7
- 将
default
和classic
分发的内容创建设置为默认值。 [@ericof] #9
错误修复
- 使用ajv8与Ajv2019类验证器来修复Firefox上的
function nested too deeply
问题 [@ericof] #4 - 处理当/acl_users不支持cookie提取时的身份验证问题 [@ericof] #6
1.0.0a1 (2023-02-08)
新功能
- plone.distribution的初始实现 [@ericof] #1
1.0.0 (未发布)
项目详情
下载文件
下载适用于您平台的项目文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
plone_distribution-2.0.0b1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c06eea31cbe2a1626b3ac7893f9a9981477a1b7a6d404653d0d28c7f65047a8d |
|
MD5 | fc3329dcfea0372e40048489f6ebcd7e |
|
BLAKE2b-256 | 13bc2baf19d01186a7e65c7c97e7e8493570337765fd18a44cc385aca35f9d29 |
plone.distribution-2.0.0b1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bc8a68ca753bed95f3158b59af82593c2ee8b23b78c1c80b362e700363b56389 |
|
MD5 | b16512dcb06d224b7d3a618e52f8bd65 |
|
BLAKE2b-256 | c02306edb5ac1fe7940737f965569ce5f0af06f6fd99df32243bf9ab467135a7 |