跳转到主要内容

Plone发行版支持

项目描述

Plone Logo

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_handlerhandlerpost_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

本项目由以下机构支持

Plone Logo

许可证

本项目采用GPLv2协议许可。

变更日志

2.0.0b1 (2024-05-17)

新功能

  • 重新设计创建站点页面 [@danalvrz] #63

2.0.0a1 (2024-05-16)

重大变更

  • plone.distribution现在基于plone.exportimport而不是collective.exportimport。

    导出格式中存在一些不向后兼容的变更。要将现有分发版转换为新格式,请按照以下步骤操作

    1. 使用plone.distribution 1.0.x从分发版创建一个站点
    2. 安装plone.distribution 2.0.x
    3. 删除分发版的contents/items文件夹。
    4. 使用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
  • defaultclassic分发的内容创建设置为默认值。 [@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 (709.2 kB 查看哈希值)

上传时间 源代码

构建发行版

plone.distribution-2.0.0b1-py3-none-any.whl (691.0 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页