为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属性设置为text、lipsum、lipsum_html、reference、image、file、boolean、list或reference_list之一。然后,param元素包含应赋予该字段的价值。不需要为内容类型的每个字段指定param元素,如果未指定字段,将使用默认值。
将type属性设置为lipsum或lipsum_html的param元素具有可选的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文件目录的文件名给出。
多值参数
对于可能包含多个值(如ReferenceList或LinesField)的字段,param元素采用type属性list或reference_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 元素附加到它,并根据需要添加 params 和 interfaces 元素作为其子元素。字段未指定时,将保留其当前值,而不是取默认值
<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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7c41af15eb0d5fdf469c2fb1b5bd46b66853763e4a289c9ba7d133fa9dc7836b |
|
MD5 | 1f6004b8aee60fade340b35b80031085 |
|
BLAKE2b-256 | 0b24b5814eacaad4c8d066645a30cd25ec98fb0f91a90cbb449beb151ee3a1c5 |