使用post publication钩子将xdv deliverance实现与plone集成以转换内容
collective.xdv的Python项目详细描述
简介
这个包提供了一种使用 xdv引擎。如果您不熟悉xdv或基于规则的主题, 查看xdv文档。
内容
- 导言
- 安装
- 用法
- python包中的资源
- 静态文件和css
- 使用portal css管理css"id="id7" rel="nofollow">使用portal css管理css
- 控制plone的默认css
安装
collective.xdv取决于:
< Buff行情>- plone.transformchain 将转换挂接到发布服务器中
- plone.registry 和 plone.app.registry 来管理设置
- plone.autoform , plone.z3cform 和 plone.app.z3cform 来呈现 控制面板
- 对于内部请求,分别为:five.globalrequest和zope.globalrequest。 Access
- xdv本身包含xdv的xdv
- lxml 执行最终转换
如果使用zc.buildout和 按照安装说明进行操作。
将collective.xdv安装到你的plone实例,找到文件 在文件系统上plone实例目录的根目录中buildout.cfg, 在文本编辑器中打开它。找到如下所示的部分:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions
它在"extends"部分也可能有一个url,类似于注释掉的 第一行,取决于是否从 网络或本地。
要将collective.xdv添加到我们的设置中,我们需要一些稍有不同的版本 两个包中的一个,所以我们用一个版本列表扩展了基本配置 从好的py服务中,更改配置的这一部分,使其看起来 像这样:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions
注意,上面url的最后一部分在 之前? 是xdv版本 号码。当你读到这篇文章的时候,可能有一个更新的版本,所以请查看 的概述页 已知的好集。
更换 ?plone=3.3.5 与您正在使用的plone版本相同。这个 适合您的plone的依赖关系版本。
这里发生的是collective.xdv的依赖列表指定 一些新的版本为您通过良好的py网址。这样,你不必 担心得到正确的版本,BuildOut会帮你处理。
下一步是在 buildout.cfg.查找如下所示的部分:
eggs = Plone
如果已经有其他加载项,则此部分可能还有其他行 安装。只需在单独的行上添加collective.xdv,如下所示:
eggs = Plone collective.xdv [Zope2.10]
注意使用了[zope2.10]extra,它带来了 ZpublisherEventsBackport包与Zope 2.12的前向兼容性/ PLONE 4。如果你使用的是zope 2.12或更高版本(例如plone 4),你应该 做:
eggs = Plone collective.xdv
注意,不需要像collective.xdv那样添加zcml slug。 z3c.autoinclude自动配置自身。
一旦将这些行添加到配置文件中,就可以运行 buildout,以便系统可以为您添加和设置collective.xdv。去 命令行,并从plone实例的根目录(与 cfg位于),按如下方式运行buildout:
$ bin/buildout
您将看到类似的输出:
Getting distribution for 'collective.xdv==1.0'. Got collective.xdv 1.0. Getting distribution for 'plone.app.registry'. Got plone.app.registry 1.0a1. Getting distribution for 'plone.synchronize'. Got plone.synchronize 1.0b1. ...
如果一切都按计划进行,现在已经安装了collective.xdv 在您的zope实例中。
接下来,启动zope,例如:
$ bin/instance fg
然后以管理员的身份转到plone中的"附加组件"控制面板,然后 安装"xdv主题支持"产品。你应该注意到一个新的 plone站点设置中的"xdv主题"控制面板。
用法
在"xdv theme"控制面板中,您可以设置以下选项:
< Buff行情> < DL>注意,当zope处于调试模式时,主题将在 每一个请求。在非调试模式下,启动时编译一次,然后 只有在更改了控制面板的值时。
在指定规则、主题和/或xslt扩展文件时,应该 通常使用文件路径。如果您正在用python分发主题 使用分发/设置工具(如标准 通过buildout安装的plone包),您可以使用特殊的python 引用文件的URL方案。
例如,如果您的包名为 my.package 并且它包含 目录mytheme,您可以在其中引用文件rules.xml 文件为:
``python://my.package/mytheme/rules.xml``
这将由collective.xdv解析为一个绝对的 文件:// URL。
静态文件和css
通常,主题将引用静态资源,如图像或 样式表。把这些东西都放在一个地方通常是个好主意, 顶级目录,将与plone内容路径冲突的风险降至最低。
如果使用的是zope/plone单机版,则需要将 通过zope提供的资源,或者从一个单独的(子)域为它们提供服务。 在这里,您有几个选择:
< Buff行情>- 通过plone将静态资源创建为 文件 内容对象。
- 在zmi的 门户皮肤/custom 文件夹中创建资源。
- 通过文件系统产品安装资源。
如果您正在分发主题,则后者是最合适的选择 作为一个python包。在这种情况下,可以在 ZCML喜欢这样:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions0
mytheme目录应该与 配置.zcml 文件。现在可以将主题、规则和静态 这里有资源。
如果您确保您的主题只使用相对url来引用任何 它需要的样式表、javascript文件或图像(包括 从样式表中引用),现在应该可以查看 主题链接如下:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions1
现在可以将"绝对前缀"配置选项设置为 "/++资源++my.package"。然后xdv将把这些相对url转换成 带有此前缀的适当绝对URL。
如果你把apache、nginx或iis放在zope前面,你可能会想要服务 而是直接从Web服务器获取静态资源。
使用门户css管理css
plone的"资源注册",包括 portal\u css 工具,可以使用 管理css样式表。与简单的链接相比,这提供了几个优点 到模板中的样式表,例如:
- 对样式表排序的详细控制
- 合并样式表以减少呈现所需的下载次数 您的页面
- 动态样式表压缩(例如空白removal)
- 基于表达式包含或排除样式表的能力
通常需要(有时是完全必要的)离开 主题文件未被更改,但您仍然可以使用 门户网站css 来管理 样式表。诀窍是去掉主题的样式,然后包含所有 巴隆的风格。例如,您可以添加以下规则:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions2
对于 <;append/>; 规则中的内容使用"或"表达式意味着 保持精确的顺序。
例如,如何在产品安装时使用 常规设置,见下文。简而言之-使用 cssregistry.xml 导入步骤 在您的genericsetup profile目录中。
然而,有一个重要的警告。您的样式表可能包括 以下表单的URL引用:
< Buff行情> 背景图片:url(../images/bg.jpg);如果样式表位于资源目录中(例如,它在 带有id +resource++my.package/css/styles.css的门户网站 只要注册表(和zope)处于调试模式,就可以正常工作。这个 相对URL将由浏览器解析为 +resource++my.package/images/bg.jpg
但是,您可能会发现在放置注册表时,相对url会中断 进入生产模式。这是因为资源合并也会更改url 样式表的格式如下:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions3
要更正此问题,您有几个选项:
- 将静态样式表替换为动态样式表,以便 在飞行中相对绝对路径计算它。这显然不会 如果您想独立查看主题,请使用。
- 更改您的url以使用绝对路径,例如。 /+resource++my.theme/images/bg.jpg 。再次,这将打破 原始样式表。但是,您可以创建一个plone-only覆盖 重写使用url()的每个css属性的样式表。
- 避免对静态样式表使用portal css。
- 使用plone 4。:-)在plone 4(b3及更高版本)中, 门户css 工具有一个 为相对URL解析样式表并应用绝对前缀的选项 基于样式表的调试模式url。这个选项叫做 cssregistry.xml语法中的applyprefix 。 < > >
控制plone的默认css
在样式化的站点中显示plone的一些css有时很有用。你 可以使用xdv <;append/>; 规则或类似的方法来复制 从plone生成的css <;head/>; 进入主题。你可以使用 使用"门户"css工具关闭不需要的样式表。
但是,如果您还希望站点在非主题模式下可用(例如 一个单独的url),当 未使用xdv。为了简化这个过程,可以使用以下表达式 作为portal-css工具(以及portal-javascripts、portal-kss)中的条件, 在门户操作、页面模板和其他使用tal表达式的位置 语法:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions4
如果当前已启用xdv,则此表达式将返回true,在这种情况下 将设置一个http头"x-xdv"。默认情况下,这将检查 xdv控制面板中的"enabled"标志,以及当前域。如果你以后 将主题部署到前端Web服务器(如nginx),可以设置 即使collective.xdv是 已卸载。
使用:# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions5
从主题站点"隐藏"样式表。
一个成功的例子
有很多方法可以设置xdv主题。例如,您可以上传 《公共图书馆》的主题与内容规则配置它们的路径。 您还可以从一个单独的静态web服务器为它们提供服务,甚至可以加载 它们来自文件系统。
但是,要创建可部署主题,最好创建一个 python包。这也为主题相关的 自定义,如模板覆盖。
尽管详细的教程超出了本帮助文件的范围,但是, 示例如下所示。
创建一个包并将其安装到构建中:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions
6
< > >
-
在新创建的包中编辑setup.py
< > >
安装所需的列表应该是:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions
7重新运行构建:
$ bin/buildout
-
在新创建的包中编辑configure.zcml
< > >
在 <;configure/>; 标记中添加资源目录。请注意,您可以 需要添加 浏览器 命名空间,如图所示。
< Buff行情> < DL>- <;配置
xmlns= http://namespaces.zope.org/zope " xmlns:browser="http://namespaces.zope.org/browser" xmlns:i18n="http://namespaces.zope.org/i18n" xmlns:genericsetup="http://namespaces.zope.org/genericsetup" i18n_domain="my.theme">;
< DL>- <;常规设置:注册表配置文件
- name="默认" title="我的主题" directory="配置文件/默认" description="安装my.theme包" 提供="products.genericsetup.interfaces.extension" /gt;
- <;浏览器:资源目录
- name="我的主题" directory="静态" /gt;
<;/配置>;
在这里,我们使用包名 my.theme 作为资源目录 姓名。根据需要进行调整。
- 在configure.zcml旁边添加一个 static 目录
- 将主题和规则文件放入此目录。 < > >
- 创建安装配置文件 < > >
- 测试 < > >
- http://localhost:8080 (或任何配置为样式的 (领域)为一个风格的巴隆。如果您使用上面的示例规则,这将 看起来几乎与主题完全相同,但是带有 <;title/>; 标记 (通常显示在网页浏览器的标题栏中)取自plone。
- http://127.0.0.1:8080(假设这是plone所在的端口 (奔跑)为一个没有风格的扑通声。
- http://localhost:8080/+resource++my.theme/theme.html的原始版本 主题。这是一个静态资源,几乎就像 在文件系统上打开。
例如,您可能有一个 theme.html 引用 子目录 images/ 和子目录 css/ 中的样式表。地点 这个文件和新创建的 static 中的两个目录 目录。
确保主题使用相对URL(例如 <;img src="images/foo.jpg" />; ) 参考它的资源。这意味着您可以从 文件系统并以其华丽的外观查看它。
同时在那里放置一个 rules.xml 文件。参见xdv文档 有关其语法的详细信息。你可以从一些非常简单的规则开始 您只想测试:
# extends = http://dist.plone.org/release/3.3/versions.cfg extends = versions.cfg versions = versions
9这些规则将拉入 <;title/>; 标记(即浏览器窗口的 title),标记 <;base/>; (某些plone url工作所必需的 正确),以及plone的样式表。
有关更多有用的规则,请参见下面的内容。
上面为 <;genericsetup:registerprofile/>; 标记生成的代码 包含对目录profiles/default的引用。你可能需要 如果还不存在,则在configure.zcml旁边创建它。 创建一个新目录profiles并在其中创建另一个目录 默认值
在此目录中,添加名为metadata.xml的文件,其中包含:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions
0当my.theme通过 稍后打开附加控制面板。
同时创建一个名为registry.xml的文件剩余内容:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions
1将 my.theme 替换为您自己的包名,并将 rules.xml 替换为 主题.html 视情况而定。
此文件配置XDV控制面板后面的设置。
提示:如果您玩过控制面板并想导出 设置,您可以在zmi中的 portal_setup 工具中创建快照。 检查创建的registry.xml文件,并选择 与 collective.xdv 相关。您应该去掉 <;field/>; 标记 在导出中,这样您就只剩下 <;record/>; 和 <;value/>; 标记 如上图所示。
另外,在profiles/default目录中添加一个cssregistry.xml 配置 门户css 工具:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions
2这显示了如何在现有样式表上设置条件,以及 注册一个全新的。我们在这里将applyprefix设置为true 上面解释过。这只适用于plone 4.b3及更高版本。更早 版本,只需取出即可。
启动zope并进入你的plone站点。你的新包裹应该显示为 可安装在附加产品控制面板中。安装时,它应该 将collective.xdv作为依赖项安装,并将其预配置为使用您的主题 和规则集。默认情况下,主题未启用,因此您需要转到 打开控制面板。
现在,您可以比较您的未接触主题、未设置样式的plone站点和 使用以下URL为网站设置主题:
-
在新创建的包中编辑configure.zcml
< > >
有关详细信息,请参见构建手册
如果您最近安装了一个zopeskel,这应该可以工作。选择 简单 模式。当被问及是否要注册个人资料时,回答"是"。
然后编辑buildout.cfg以将新包( my.theme 添加到 制定 和 鸡蛋 清单。
常见规则
复制页面标题:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions3
要复制 <;base/>; 标记(plone的链接工作所必需的):
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions4
从主题中删除所有样式和javascript资源并复制它们 取而代之的是plone的门户css工具:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions5
复制plone的javascript资源:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions6
复制 <;body/>; 标记的类(对于某些plone是必需的 正确工作的javascript函数和样式:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions7
其他提示
-
firebug是一个极好的工具,当
建立规则。它甚至有一个xpath提取器。
-
阅读xpath。它不像看上去那么复杂,而且功能强大。
-
在开发时以调试模式运行zope,这样就不需要重新启动
查看主题、规则或资源的更改。
更改日志
1.0rc11-2010年9月5日
-
添加法语翻译,在python文件中使用真正的msgid并清除过时的
日文翻译。
[LaZ]
-
不喜欢打印输出-它会破坏浏览器渲染并引入
不必要的空格。
[Erro ]
-
修复windows上的python://url解析。
[选项]
-
澄清空格分隔符警告。
[fvandijk]
1.0rc10-2010年8月5日
-
使用plone.subrequest。
[Erro ]
-
使用空格作为替代主题的分隔符。""在re中很常见龈的
表达。
[Erro ]
-
支持xdv 0.4<;theme>;指令,因此在设置时不需要theme。
[Erro ]
-
修复外部包含的网络(http/https)url的解析。
[Erro ]
1.0rc9-2010年8月5日
-
在plone站点根上使用ibeforetraverseevent而不是
要挂接在x-xdv请求头中的ipubaftertraversal事件。这使得
标题处理404个错误页。
[选项]
-
将collective.directoryresourcepatch添加到zope2.10 extras。这允许
运行时由资源注册表遍历的子目录
扑通声3/Zope 2.10。
[邓拉普]
-
要求lxml>;=2.2.4。zope2 kgs列出了lxml=2.2,这个版本在
无效的HTML。
[Erro ]
-
修复extra.xsl支持。
[Erro ]
1.0rc8-2010年5月24日
-
支持使用带有子路径的虚拟主机设置站点的样式。
https://bugs.launchpad.net/xdv/+bug/517244
[Erro ]
-
暂时性除外。
https://bugs.launchpad.net/xdv/+bug/527807
[Erro ]
1.0rc7-2010年5月23日
升级说明:在"附加组件"控制面板中重新安装产品。
始终打开xinclude处理。
[Erro ] < /P>
修复Windows安装。要在Windows上的Plone 4下运行,必须指定:
extends =
versions.cfg
http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5
versions = versions
8
< Buff行情>
直到新的lxml windows二进制egg发布。
[埃尔罗]
-
让lxml读取网络,而不是外部解析器。你现在必须
在控制面板中显式启用"读取网络"。
[Erro ]
1.0rc6-2010年5月21日
-
修复转换缓存以解释同一个的不同虚拟主机
站点和使缓存失效跨zeo客户端工作。
[Erro ]
1.0rc5-2010-04-21
-
通过
在hrefs中的相对路径。
[选项]
-
确保绝对前缀即使在虚拟主机中也能工作
站点根目录的aboslute路径为"/"的方案。
[选项]
-
添加了一个事件处理程序,它将设置一个http请求头'x-xdv'
如果为传入域启用了xdv。这可以用作支票
例如,在portal-css中,例如
"请求/http_x_xdv无"。@xdv check/enabled方法
现在也检查一下这个变量的存在性。我的想法是
在纯xslt部署场景中使用
已禁用collective.xdv,例如在
nginx或apache。
[选项]
-
使所有zope路径相对于plone站点解析。
[马歇尔]
-
添加对使用http/ftp绝对url和zope路径解析文件的支持。
[马歇尔]
-
如果需要,在plone站点路径前面加上绝对前缀。这意味着
以/开头的绝对前缀总是相对于plone
站点根。
[选项]
-
为主题、规则和
Extrauri文件。有关详细信息,请参阅readme.txt。
[选项]
-
改进控制面板中的措辞
[选项]
-
修复缓存转换(在非调试模式下)泄漏的错误
在同一实例中跨越plone站点。
[选项]
-
删除
样板
参数。改用
extraurl
。
[选项]
-
让collective.xdv依赖于新的xdv egg,而不是dv.xdvserver。
[选项]
-
仅当collective.xdv实际上已安装时调用转换d.
注意:升级后可能需要重新安装产品。
[选项]
-
使用plone.transformchain对转换活动进行排序。在…之间
另外,这有助于我们避免在
链中的其他事物更喜欢使用
反应。它还有助于控制发布后事件的顺序。
[选项]
-
zope 2.12/倍体4相容性。
[LROW]
1.0rc4-2009年10月27日
-
样式错误响应以及成功响应。
[LROW]
-
为了兼容性,请使用zpublisher事件而不是plone.postpublicationhook
佐佩2.12/扑通4.对于zope2.10/plone 3.x,现在必须指定
"collective.xdv[zope2.10]"在您的构建中引入包
ZpublisherEventsBackport。
[LROW]
-
添加了对extraurl参数的支持
[Mura]
-
添加替代主题和修改的转换,以便它可以由路径决定
将用于哪个主题和规则文件的正则表达式
转型
[Mura]
-
在未设置样式的路径中添加/管理默认列表。
[编码]
1.0a2-2009年7月12日
-
跟上plone.registry的api的变化。
[选项]
1.0a 1-2009年4月17日
-
初始版本
1.0rc11-2010年9月5日
-
添加法语翻译,在python文件中使用真正的msgid并清除过时的
日文翻译。
[LaZ]
-
不喜欢打印输出-它会破坏浏览器渲染并引入
不必要的空格。
[Erro ]
-
修复windows上的python://url解析。
[选项]
-
澄清空格分隔符警告。
[fvandijk]
1.0rc10-2010年8月5日
-
使用plone.subrequest。
[Erro ]
-
使用空格作为替代主题的分隔符。""在re中很常见龈的
表达。
[Erro ]
-
支持xdv 0.4<;theme>;指令,因此在设置时不需要theme。
[Erro ]
-
修复外部包含的网络(http/https)url的解析。
[Erro ]
1.0rc9-2010年8月5日
-
在plone站点根上使用ibeforetraverseevent而不是
要挂接在x-xdv请求头中的ipubaftertraversal事件。这使得
标题处理404个错误页。
[选项]
-
将collective.directoryresourcepatch添加到zope2.10 extras。这允许
运行时由资源注册表遍历的子目录
扑通声3/Zope 2.10。
[邓拉普]
-
要求lxml>;=2.2.4。zope2 kgs列出了lxml=2.2,这个版本在
无效的HTML。
[Erro ]
-
修复extra.xsl支持。
[Erro ]
1.0rc8-2010年5月24日
-
支持使用带有子路径的虚拟主机设置站点的样式。
https://bugs.launchpad.net/xdv/+bug/517244
[Erro ]
-
暂时性除外。
https://bugs.launchpad.net/xdv/+bug/527807
[Erro ]
1.0rc7-2010年5月23日
升级说明:在"附加组件"控制面板中重新安装产品。
始终打开xinclude处理。
[Erro ] < /P>
修复Windows安装。要在Windows上的Plone 4下运行,必须指定:
extends =
versions.cfg
http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5
versions = versions
8
< Buff行情>
直到新的lxml windows二进制egg发布。
[埃尔罗]
-
让lxml读取网络,而不是外部解析器。你现在必须
在控制面板中显式启用"读取网络"。
[Erro ]
升级说明:在"附加组件"控制面板中重新安装产品。
始终打开xinclude处理。 [Erro ] < /P>
修复Windows安装。要在Windows上的Plone 4下运行,必须指定:
extends = versions.cfg http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5 versions = versions8
1.0rc6-2010年5月21日
-
修复转换缓存以解释同一个的不同虚拟主机
站点和使缓存失效跨zeo客户端工作。
[Erro ]
1.0rc5-2010-04-21
- 通过 在hrefs中的相对路径。 [选项]
- 确保绝对前缀即使在虚拟主机中也能工作 站点根目录的aboslute路径为"/"的方案。 [选项]
- 添加了一个事件处理程序,它将设置一个http请求头'x-xdv' 如果为传入域启用了xdv。这可以用作支票 例如,在portal-css中,例如 "请求/http_x_xdv无"。@xdv check/enabled方法 现在也检查一下这个变量的存在性。我的想法是 在纯xslt部署场景中使用 已禁用collective.xdv,例如在 nginx或apache。 [选项]
- 使所有zope路径相对于plone站点解析。 [马歇尔]
- 添加对使用http/ftp绝对url和zope路径解析文件的支持。 [马歇尔]
- 如果需要,在plone站点路径前面加上绝对前缀。这意味着 以/开头的绝对前缀总是相对于plone 站点根。 [选项]
- 为主题、规则和 Extrauri文件。有关详细信息,请参阅readme.txt。 [选项]
- 改进控制面板中的措辞 [选项]
- 修复缓存转换(在非调试模式下)泄漏的错误 在同一实例中跨越plone站点。 [选项]
- 删除 样板 参数。改用 extraurl 。 [选项]
- 让collective.xdv依赖于新的xdv egg,而不是dv.xdvserver。 [选项]
- 仅当collective.xdv实际上已安装时调用转换d. 注意:升级后可能需要重新安装产品。 [选项]
- 使用plone.transformchain对转换活动进行排序。在…之间 另外,这有助于我们避免在 链中的其他事物更喜欢使用 反应。它还有助于控制发布后事件的顺序。 [选项]
- zope 2.12/倍体4相容性。 [LROW]