跳转到主要内容

Plone网站设置向导,包含内容创建和预设配置的包系统。

项目描述

ftw.inflator

本包帮助预定义Plone站点的设置,包括内容创建(使用通用设置)、定义多个包和安装新站点时使用包的向导。

特性

  • 一个简化的站点设置向导。该向导可以自定义和品牌化。

  • 用于定义设置配置中变体的包系统。

  • 一个通用的设置站点创建导入步骤,可以在包中用于创建初始内容。它可以在不使用设置向导和包系统的情况下使用。

安装

  • ftw.inflator添加到您的buildout配置中

[instance]
eggs +=
    ftw.inflator

Dexterity支持

要创建dexterity对象(内容创建),请安装dexterity附加组件

[instance]
eggs +=
    ftw.inflator [dexterity]

兼容性

  • Plone 4.3

  • Plone 5.1

设置向导

在Zope应用的manage_main视图中,有一个额外的按钮用于安装您的产品。它将引导到站点设置向导,其中可以选择ID和包。

设置向导允许从一组预定义的包中选择一个。请参阅包部分,了解如何定义包的详细信息。

https://raw.github.com/4teamwork/ftw.inflator/master/docs/inflate.png

向导自定义

产品名称和标志可以轻松通过ZCML自定义

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:inflator="http://namespaces.zope.org/inflator"
    i18n_domain="my.package">

    <include package="ftw.inflator" file="meta.zcml" />

    <inflator:customize
        product="Product Name"
        image="resources/product-logo.png"
        />

</configure>

包系统

包定义了一个在创建新Plone站点时自动应用的一系列配置文件。

它有一个基础配置文件(默认为Plone默认基础配置文件,没有默认内容)。

定义包

包在ZCML中定义

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:inflator="http://namespaces.zope.org/inflator"
    i18n_domain="my.package">

    <include package="ftw.inflator" file="meta.zcml" />

    <inflator:bundle
        title="ftw.inflator example bundle one"
        profiles="plonetheme.sunburst:default
                  my.policy:default
                  my.policy:init-content"
        />

</configure>

ZCML属性

标题

包的(可翻译)标题,在设置向导中显示。

配置文件

一个或多个通用设置配置文件(没有profile-前缀)。

描述(可选)

包的描述,在设置向导中显示。

基础(可选)

创建Plone站点的通用设置基础配置文件。默认为Products.CMFPlone:plone,默认的Plone基础配置文件,没有内容创建。使用Products.CMFPlone:plone-content将生成默认示例内容。

标准(可选)

通过使用标准标志(standard="True")您可以定义产品包。在稍后注册自定义包而没有标记为标准的情况下,它们将在设置向导中出现在标准包之上,并且顶部被选中。

完整的ZCML示例

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:inflator="http://namespaces.zope.org/inflator"
    i18n_domain="ftw.inflator">

    <include package="ftw.inflator" file="meta.zcml" />

    <inflator:bundle
        title="MyProduct with sunburst"
        description="Installs MyProduct with the sunburst theme and plone default content"
        profiles="plonetheme.sunburst:default
                  my.product:default"
        base="Products.CMFPlone:plone-content"
        standard="True"
        />

</configure>

设置语言

当使用默认添加站点视图安装Plone站点时,语言在Products.CMFPlone:plone-content中设置,它还创建示例内容。这使得在没有创建示例内容的情况下设置语言变得困难。

为了解决此问题,ftw.inflator提供了一个ftw.inflator:setup-language通用设置配置文件,旨在在设置包时使用。您可以将它添加到包配置文件列表中。这将把Plone站点的语言设置为设置向导中选择的语言。不建议将其用作依赖项(在metadata.xml中),因为它不打算用于现有的Plone站点。

在包定义中的示例用法

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:inflator="http://namespaces.zope.org/inflator"
    i18n_domain="my.package">

    <include package="ftw.inflator" file="meta.zcml" />

    <inflator:bundle
        title="ftw.inflator example bundle one"
        profiles="ftw.inflator:setup-language
                  my.policy:default"
        />

</configure>

内容创建

内容创建允许在任意通用设置配置文件夹中定义一个 content_creation 文件夹,其中包含定义要创建的内容的 JSON 文件。当应用通用设置配置时,将创建内容。

内容创建特性

  • 基于 JSON 的定义

  • 支持树结构

  • 字符串国际化

  • 构造任何架构原型的 FTIs 实例

  • 添加文件和图像字段

  • 创建主题标准

  • 在创建时执行工作流转换

  • 创建有地域性的工作流策略

  • 设置属性

  • 设置约束类型

  • 设置每个对象提供的接口

  • 重新索引目录

  • 定义并锁定本地角色

结构

将一个 content_creation 文件夹添加到您的通用设置配置中。所有内容创建配置都在此文件夹中。您可以添加任意多的 *.json-文件 - 它们将被按排序文件名的顺序读取和执行(使用整数前缀排序它们很容易)。

文件夹创建示例

要创建内容,创建一个 JSON 文件(例如 profiles/default/content_creation/01-foo-folder.json),并插入一个 JSON 语法列表的哈希(字典)。每个哈希创建一个新对象。例如,在 /Plone/foo 创建一个标题为“Foo”的文件夹

[
    {
        "_path": "foo",
        "_type": "Folder",
        "title": "Foo"
    }
]

树形结构示例

对于嵌套结构,有时定义 JSON 为树很有用。使用树结构,不需要重复父路径

[
    {
        "_path": "foo",
        "_type": "Folder",
        "title": "Foo",
        "_children": [

            {
                "_id": "bar",
                "_type": "Folder",
                "title": "Bar"
            },
            {
                "_path": "bar/qux",
                "_type": "Folder",
                "title": "Bar"
            }

        ]
    }
]

请确保根节点有一个 _path,并且 _children 列表中的所有节点都有一个 _id 或一个 _path。子节点 _path 被认为是相对于父节点的相对路径。然后路径将自动连接。

国际化

使用 key:translate(domain) 语法在键中,相应的字符串值将被翻译成 Plone 网站当前默认语言。在安装带有填充器的包并创建内容时,请确保在创建内容之前安装通用设置配置 ftw.inflator:setup-language。这将确保语言配置正确。

示例

[
    {
        "_path": "foo",
        "_type": "Folder",
        "title:translate(my.domain)": "Foo",
        "_children": [

            {
                "_id:translate(my.domain)": "bar",
                "_type": "Folder",
                "title": "Bar"
            }

        ]
    }
]

多语言支持

当安装 plone.app.multilingual 时,可以为每种语言生成翻译内容。翻译基于 key:translate(domain) 语法(见上文)并可以在常规 .po 文件中翻译。

示例

[
    {"_multilingual": [
        "en",
        "de"],

     "_contents": [

         {
           "_id": "foo",
           "_type": "Folder",
           "title:translate(my.domain)": "Foo"
         }

     ]}
]

确保“_multilingual”列表中的每种语言已在 portal_languages.xml 中配置为受支持的语言

<?xml version="1.0"?>
<object>
    <default_language value="en"/>
    <supported_langs>
        <element value="en"/>
        <element value="de"/>
    </supported_langs>
</object>

使用 plone.app.multilingual 的默认设置来设置语言文件夹。

plone.app.multilingual 使用特殊的门户类型作为语言根文件夹和语言无关文件夹。有时使用自定义门户类型作为根和语言无关文件夹很有用。您可以通过 _folder_type_folder_type_language_independent 属性选择自定义类型

[
    {"_multilingual": [
        "en",
        "de"],
     "_folder_type": "my.custom.type",
     "_folder_type_language_independent": "my.custom.type",
     "_contents": []
    }
]

创建/设置属性

属性可以轻松创建。如果已经存在属性(因为对象已经存在),它将被更新。

示例

[
    {
        "_path": "foo",
        "_type": "Folder",
        "title": "Foo",
        "_properties": {
            "layout": ["string", "folder_listing_view"]
        }
    }
]

配置约束类型

要配置文件夹上的可添加类型,请使用 _constrain_types 关键字

[
    {
        "_path": "foo",
        "_type": "Folder",
        "title": "Foo",
        "_constrain_types": {
            "locally": ["Folder", "Document"],
            "immediately": ["Folder"]
        }
    }
]

提供附加接口

通过传递 _interfaces 中的点分名称列表,这些接口将被自动提供(alsoProvides)由创建的对象

[
    {
        "_path": "foo",
        "_type": "Folder",
        "title": "Foo",
        "_interfaces": [
            "ftw.inflator.tests.interfaces.IFoo",
            "remove:foo.bar.interfaces.IBar"
        ]
    }
]

通过在点分名称前加上 remove:,可以直接提供的接口被删除(noLongerProvides)。

文件和图像

使用 :file 后缀可以轻松填充文件和图像字段,提供指向要“上传”的文件的相对路径

[
    {
        "_path": "files/example-file",
        "_type": "File",
        "title": "example file",
        "file:file": "files/examplefile.txt"
    }
]

可以更改文件名(尽管这不适用于同一 Dexterity 项目上的多个文件)

[
    {
        "_path": "files/example-file",
        "_type": "File",
        "title": "example file",
        "file:file": "files/lkdfahjkewrhiu.txt",
        "file:filename": "important.txt"
    }
]

工作流转换

使用 _transitions 关键字,可以在内容创建时执行工作流转换

[
    {
        "_path": "foo",
        "_type": "Folder",
        "title": "Foo",
        "_transitions": "publish"
    }
]

位置性工作流策略

当安装了有地域性的工作流策略时,可以使用 _placefulworkflow 关键字在文件夹上激活它们

[
    {
        "_path": "intranet",
        "_type": "Folder",
        "title": "Intranet",
        "_placefulworkflow": ["intranet", "intranet"]
    }
]

您需要安装通用设置配置文件 Products.CMFPlacefulWorkflow:CMFPlacefulWorkflow 以使用区域化工作流策略。

注释

使用 _annotations,可以在对象上设置简单的注释。类型为 dict 的值被转换为 PersistentMapping,类型为 list 的值递归转换为 PersistentList。示例

[
    {
        "_path": "intranet",
        "_type": "Folder",
        "title": "Intranet",
        "_annotations": {"foo": {"bar": [1, 2, 3]}}
    }
]

部件

可以通过使用 _portlets 键轻松定义小部件,预期为字典(portlet_manager : 配置)。可以定义上下文小部件分配(assignments)并设置继承设置(blacklist_status)。

[
    {
        "_path": "foo",
        "_type": "MyType",
        "title": "Foo",
        "_portlets": {
            "plone.leftcolumn": {
                "blacklist_status": {
                    "context": "block",
                    "user": "show",
                    "group": "acquire"
                },
                "assignments": [
                    {"id": "new_navigation",
                    "portlet_type": "portlets.Navigation",
                    "name": "New Navigation",
                    "bottomLevel": 0,
                    "includeTop": false,
                    "topLevel": 1}
                ]
            }
        }
    }
]

UUID查找

有时您需要另一个对象的 UUID。由于 UUID 在创建对象时随机生成,因此您无法在 .json 文件中预测它。UUID 查找在这里帮您解决这个问题

[
    {
        "_path": "foo",
        "_type": "MyType",
        "title": "Foo",
        "relations": "resolveUUID::bar"
    }
]

使用 resolveUUID::path 语法,值被替换为具有 path 的对象的 UUID。您可以在值前加一个 / 使其相对于站点根目录,否则它相对于定义在其中的项(例如上面的示例中的“Foo”)。

路径查找

有时您需要通过路径解析已创建的对象。resolve-path 部分在这里帮您解决这个问题

[
    {
        "_path": "foo",
        "_type": "MyType",
        "title": "Foo",
        "relations": "resolvePath::bar"
    }
]

使用 resolvePath::path 语法,值被替换为解析后的对象。您可以在值前加一个 / 使其相对于站点根目录,否则它相对于定义在其中的项(例如上面的示例中的“Foo”)。

本地角色示例

您可以按照以下方式配置本地角色和阻止本地角色

[
    {
        "_path": "foo",
        "_type": "MyType",
        "title": "Foo",
        "_ac_local_roles": {
            "admin": [
                "Owner"
            ]
        },
        "_block-local-roles": true
    }
]

有关详细信息,请参阅: https://collectivejsonmigrator.readthedocs.io/en/latest/ac_local_roles.html

导入单个项目

导入器配置的 transmogrifier 配置可以在代码中使用 single_item_content_creation 配置来导入单个项

item = {'_path': 'foo',
        '_type': 'Folder',
        'title': 'Foo'}

mogrifier = Transmogrifier(portal)
mogrifier(u'ftw.inflator.creation.single_item_content_creation',
          jsonsource=dict(item=item))

变更日志

1.12.1 (2019-11-26)

  • 删除旧通用设置依赖项 Products.PloneLanguageTool。[jone]

  • 修复 ftw.testing >= 2.0 的测试。[buchi]

1.12.0 (2019-11-08)

  • 用 collective.jsonmigrator 替换已停止使用的 collective.blueprint.jsonmigrator。[djowett-ftw]

1.11.0 (2019-06-13)

  • 实现覆盖默认 plone.app.multilingual 根和语言无关文件夹类型的能力。[elioschmutz]

  • 修复 Plone 4 与 plone.app.multilingual 2.x 的兼容性,这应该是新 Plone 4 项目的默认值。[elioschmutz]

1.10.0 (2019-03-19)

  • Plone 5.1 兼容性 [mathias.leimgruber, jone, busykoala, njohner]

  • 停止支持 Plone 4.2。[busykoala]

1.9.0 (2018-05-14)

  • 添加小部件更新器部分,允许创建小部件。[phgross]

1.8.1 (2016-08-12)

  • 修复 Plone 5 中的多语言导入错误。[Guido A.J. Stevens]

1.8.0 (2016-05-20)

  • 即使已经安装了站点,也显示安装按钮。[raphael-s]

  • 停止支持 Plone 4.1。[jone]

  • 使“:filename”键后缀更改文件名。[jone]

1.7.0 (2016-03-15)

  • 内容创建:记录进度。[jone]

1.6.0 (2016-03-04)

  • 修复多语言导入错误。[elioschmutz]

  • 添加创建单个项的 transmogrifier 配置。[jone]

1.5 (2015-04-22)

  • 使用 ftw.profilehook 而不是自定义导入步骤(setuphandlers)。[jone]

  • 添加解析路径的对象部分。[deiferni]

1.4 (2014-06-05)

  • 添加本地角色定义和阻止本地角色。[phgross, deif]

1.3.2 (2014-03-10)

  • 将相对路径支持添加到初始内容子节点。[deif]

1.3.1 (2014-01-27)

  • 添加对 dexterity 文件创建的支持。[deif]

1.3.0 (2014-01-21)

  • 实现设置多语言根文件夹属性的支持。[deif]

1.2.1 (2014-01-16)

  • 修复未解决的泛型设置导入步骤依赖。只有当安装了plone.app.multilingual时,“languagetool”才可用。[jone]

1.2 (2013-12-11)

  • 实现内容创建的plone.app.multilingual支持。[jone]

1.1.2 (2013-05-30)

  • 确保在应用我们的补丁之前应用Products.CMFPlone ZMI补丁。[jone]

1.1.1 (2013-05-24)

  • 支持将UTF-8编码的字符串作为:translate()的值。[treinhard]

1.1 (2013-02-27)

  • 实现UUID查找。[jone]

  • 将Dexterity支持添加到内容创建中。使用ftw.inflator[dexterity]附加组件。[jone]

  • 在创建类型之后运行内容创建。[jone]

  • 将网站创建移动到包类中,这样就可以在不使用视图的情况下创建带有包的网站。这对于测试或自动化设置很有用。[jone]

  • 使用key:translate(domain)键语法支持国际化。[jone]

  • 添加对嵌套树结构的支持。[jone]

1.0.1 (2013-02-13)

  • 修复不良页面模板表达式。[jone]

1.0 (2013-02-13)

  • 初始实现。[jone]

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

ftw.inflator-1.12.1.tar.gz (235.6 kB 查看哈希值)

上传时间

由以下机构支持