跳转到主要内容

为plone构建演示内容

项目描述

一个用于在plone网站上安装内容的plone产品。

功能

  • 安装内容

  • 安装产品

  • 删除内容

  • 应用zope接口

  • 修改内容

  • 生成测试内容

如何安装

将zkaffold添加到您的产品中

  • 在setup.py中,将“zkaffold”添加到您的产品install_requires中

  • 在您的产品configure.zcml中添加<include package="zkaffold" />

  • 将“profile-zkaffold:default”作为依赖项添加到您的产品metadata.xml中

  • 运行 ./bin/buildout

zkaffold现在应该已安装。请注意,zkaffold不能从门户快速安装程序中安装/卸载。

如何使用

在您的plone网站上安装zkaffold后,您可以通过以下方式为您的plone网站构建内容:

  • 在您的产品中创建“initial”配置文件,

  • 在profile/initial中创建一个名为“zkaffold”的目录,

  • 创建structure.xml(示例structure.xml位于zkaffold/exportimport/tests/test_exportimport.py中),

您还可以通过以下方式在您的plone网站上创建默认用户:

  • 创建members.xml(示例members.xml位于zkaffold/exportimport/tests/test_exportimport.py中)

如果您使用buildout,在您的buildout.cfg中

  • 在[plonesite]部分,将您的产品初始配置文件(例如mysite:initial)添加到“profiles-initial”,

  • 运行 ./bin/buildout

您的Plone网站现在应该已填充了结构.xml中指定的内容。请注意,如果运行buildout之前您的Plone网站已存在,它将不会添加任何内容。您需要删除您的Plone网站或运行zkaffold导入步骤来添加内容。

您可以使用不同的配置文件来创建不同的内容,例如,如果您想要测试内容,您可以在需要构建测试内容时创建另一个配置文件并将其添加到profiles-initial中。

zkaffold默认通过尝试将“发布”转换应用于对象来发布所有对象。如果您的对象需要不同的发布方式,请查看zkaffold/exportimport/tests/test_exportimport.py。

zkaffold XML模式

所有zkaffold XML文件都应该以以下基本模式开始:

<?xml version="1.0" encoding="UTF-8"?>
<site xmlns:zkaffold="http://www.isotoma.com/zkaffold">
</site>

site 元素是唯一的根元素,代表Plone门户对象。

遍历对象树

可以通过对象的ID遍历对象,以便达到需要修改的对象。这是通过指定具有与所涉及对象ID相同标签名的元素来完成的。例如,要遍历到路径为“portal/my_folder/my_obj”的对象,可以使用以下语法

<site>
  <my_folder>
    <my_obj>
      ...
    </my_obj>
  </my_folder>
</site>

添加新对象

要将新对象插入到文件夹对象中,首先遍历到目标容器,然后插入一个具有与您希望添加的门户类型相同标签名的新元素,并带有应在ZODB中拥有的ID的id属性。

<site>
  <my_folder>
    <MyContentType id="my_new_obj">
    </MyContentType>
  </my_folder>
</site>

参数

通常,在创建对象时,人们会想要指定字段的值。为此,请向代表新对象的元素添加一个params子元素,该子元素本身应包含一个代表每个字段的param元素。该param标签应将name属性设置为相关字段的名称,将type属性设置为textlipsumlipsum_htmlreferenceimagefilebooleanlistreference_list之一。然后,param元素包含应赋予该字段的价值。不需要为内容类型的每个字段指定param元素,如果未指定字段,将使用默认值。

type属性设置为lipsumlipsum_htmlparam元素具有可选的paras属性,该属性指定生成该字段值的Lipsum段落数。它们也不包含子元素。lipsum值导致生成带有换行符的普通Lipsum,而lipsum_html生成带有必要的段落标签的Lipsum。

<site>
  <my_folder>
    <MyContentType id="my_new_obj">
      <params>
        <param name="title" type="text">My new object</param>
        <param name="text" type="lipsum_html" paras="5" />
        <param name="isNew" type="boolean">True</param>
        <param name="old_obj" type="reference">/my_folder/my_obj</param>
        <param name="thumb" type="image">new_obj_thumb.jpg</param>
      </params>
    </MyContentType>
  </my_folder>
</site>

如上例所示,引用作为引用对象的路径字符串给出。图像和文件作为相对于XML文件目录的文件名给出。

多值参数

对于可能包含多个值(如ReferenceListLinesField)的字段,param元素采用type属性listreference_list。然后它应包含一个items元素,该元素包含零个或多个具有适当type属性和作为其内部XML的值的item元素。

<site>
  <my_folder>
    <MyContentType id="my_new_obj">
      <params>
        <param name="title" type="text">My new object</param>
        <param name="options" type="list">
          <items>
            <item type="text">Option 1</item>
            <item type="text">Option 2</item>
          </items>
        </param>
      </params>
    </MyContentType>
  </my_folder>
</site>

接口

有时可能需要向对象添加它们自动不提供的接口,尤其是标记接口。这可以通过使用 interfaces & interface 标签来实现,如下所示

<site>
  <my_folder>
    <MyContentType id="my_new_obj">
      <interfaces>
        <interface>identifier.of.IMyMarker</interface>
        <interface>identifier.of.IReplacementObject</interface>
      </interfaces>
      <params>
        <param name="title" type="text">My new object</param>
      </params>
    </MyContentType>
  </my_folder>
</site>

这将把指定的接口添加到对象中。

已经应用到对象上的接口可以通过将 interface 元素替换为 remove 元素来类似地移除,如下所示

<site>
  <my_folder>
    <MyContentType id="my_new_obj">
      <interfaces>
        <remove>IMyMarker</remove>
      </interfaces>
      <params>
        <param name="title" type="text">My new object</param>
      </params>
    </MyContentType>
  </my_folder>
</site>

修改现有对象

现有对象可以通过与添加类似的方式修改。只需下到要修改的对象,将其 modify 元素附加到它,并根据需要添加 paramsinterfaces 元素作为其子元素。字段未指定时,将保留其当前值,而不是取默认值

<site>
  <my_folder>
    <my_new_obj>
      <modify>
        <params>
          <param name="title" type="text">My updated title for my new object</param>
        </params>
      </modify>
    </my_new_obj>
  </my_folder>
</site>

设置文件夹对象的默认页面

要设置新或现有文件夹对象的默认页面,请使用具有 setDefaultPage 属性的 modify 元素

<site>
  <my_folder>
    <modify setDefaultPage="my_new_obj">
      ...
    </modify>
  </my_folder>
  <FolderishType id="another_folder">
    <modify setDefaultPage="folder_home" />
    <params>
      ...
    </params>
    <ContentType id="folder_home">
      ...
    </ContentType>
  </FolderishType>
</site>

删除对象

可以通过下到容器对象并插入一个具有其 id 属性设置为要删除的对象 ID 的 delete 元素来删除现有对象。该 delete 元素还具有可选参数 ctype,可以用来指定特定内容类型,该对象必须位于该内容类型才能被删除

<site>
  <my_folder>
    <!-- I never liked that new object anyway... -->
    <delete id="my_new_obj" ctype="MyContentType" />
  </my_folder>
</site>

依赖关系

zkaffold 依赖于 lxml,而 lxml 依赖于 libxml2-dev 和 libxslt-dev。在 Debian 中,您可以使用

  • sudo aptitude install libxml2-dev libxslt-dev

插件

zkaffold 支持用于导出内容的插件系统

  • 首先为您的配置文件添加一个导入步骤

  • 为您的字段创建一个导出器,它应该返回一个 lxml.etree.Element 对象用于 <param> 或 (lxml.etree.Element 对象用于 <param>,文件名,文件内容)

    def my_field_exporter(plone_object, field):
        ...
        return param
  • 创建导入步骤以注册字段导出器

    from zkaffold.contextexporter import IContentExporter
    
    def register_field_exporters(context):
        portal = context.getSite()
        sm = portal.getSiteManager()
        exporter = sm.getUtility(IContentExporter)
        exporter.register_field_exporter('mysite.fields.MyField',
            'mysite.field_exporters.my_field_exporter')

测试

要运行 zkaffold 的测试,您需要

  • 在 buildout.cfg 的 [test] 部分“eggs”中添加“zkaffold [test]”,

  • 运行 ./bin/buildout,

  • ./bin/test

项目详情


下载文件

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

源分布

zkaffold-0.0.11.tar.gz (26.0 kB 查看哈希)

上传时间

由以下机构支持

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