使用post publication钩子将xdv deliverance实现与plone集成以转换内容

collective.xdv的Python项目详细描述


简介

这个包提供了一种使用 xdv引擎。如果您不熟悉xdv或基于规则的主题, 查看xdv文档。

安装

collective.xdv取决于:

< Buff行情>

如果使用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>
启用是/否
是否启用转换。
将与之匹配的域(包括端口)的列表 用于确定是否应应用主题的主机头。注意 127.0.0.1从来没有被设置过样式,以确保总是有一种方法返回到plone 改变这些设置。但是,"localhost"应该可以正常工作。
主题
指向主题文件的文件路径或url。这只是一个 静态HTML文件。
规则
规则xml文件的文件系统路径。
备选主题
不同主题和规则文件的定义列表 路径。应采用"路径主题规则"的形式,其中路径可以使用 正则表达式语法,theme是指向该主题的文件路径或url 模板和规则是规则文件的文件路径。如果主题或 规则字符串以"python://"开头路径解析已完成,因此 示例您可以将主题包中的主题文件引用为 python://yourtheme.xdvtheme/static/page.html.
xslt扩展文件
可以使用自定义xslt文件扩展xdv。 如果你有这样一个文件,请在此处提供其URL。
绝对前缀
如果给定,则在 <;img/>; <;链接中的任何相对url /&主题HTML文件中的gt; <;style/>; <;script/>; 将 编译主题时以此url片段为前缀。就这样 使用相对路径在文件系统上更容易开发主题html/css 它仍然可以在服务器上的任何url上工作。
未设置样式的路径
这用于提供URL模式列表(使用常规 表达式语法)对于即使xdv是 启用。默认情况下,这包括必需的"emptypage"视图 让kupu编辑器工作,以及组成zmi的manage_ux页面。

注意,当zope处于调试模式时,主题将在 每一个请求。在非调试模式下,启动时编译一次,然后 只有在更改了控制面板的值时。

python包中的资源

在指定规则、主题和/或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 = versions
0

mytheme目录应该与 配置.zcml 文件。现在可以将主题、规则和静态 这里有资源。

如果您确保您的主题只使用相对url来引用任何 它需要的样式表、javascript文件或图像(包括 从样式表中引用),现在应该可以查看 主题链接如下:

# extends = http://dist.plone.org/release/3.3/versions.cfg
extends = versions.cfg
versions = versions
1

现在可以将"绝对前缀"配置选项设置为 "/++资源++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 = versions
2

对于 <;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 = versions
3

要更正此问题,您有几个选项:

  1. 将静态样式表替换为动态样式表,以便 在飞行中相对绝对路径计算它。这显然不会 如果您想独立查看主题,请使用。
  2. 更改您的url以使用绝对路径,例如。 /+resource++my.theme/images/bg.jpg 。再次,这将打破 原始样式表。但是,您可以创建一个plone-only覆盖 重写使用url()的每个css属性的样式表。
  3. 避免对静态样式表使用portal css。
  4. 使用plone 4。:-)在plone 4(b3及更高版本)中, 门户css 工具有一个 为相对URL解析样式表并应用绝对前缀的选项 基于样式表的调试模式url。这个选项叫做 cssregistry.xml语法中的applyprefix
  5. < > >

控制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 = versions
4

如果当前已启用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 = versions
5

从主题站点"隐藏"样式表。

一个成功的例子

有很多方法可以设置xdv主题。例如,您可以上传 《公共图书馆》的主题与内容规则配置它们的路径。 您还可以从一个单独的静态web服务器为它们提供服务,甚至可以加载 它们来自文件系统。

但是,要创建可部署主题,最好创建一个 python包。这也为主题相关的 自定义,如模板覆盖。

尽管详细的教程超出了本帮助文件的范围,但是, 示例如下所示。

  1. 创建一个包并将其安装到构建中:

    # extends = http://dist.plone.org/release/3.3/versions.cfg
    extends = versions.cfg
    versions = versions
    
    6
  2. < > >

    有关详细信息,请参见构建手册

    如果您最近安装了一个zopeskel,这应该可以工作。选择 简单 模式。当被问及是否要注册个人资料时,回答"是"。

    然后编辑buildout.cfg以将新包( my.theme 添加到 制定 鸡蛋 清单。

    1. 在新创建的包中编辑setup.py < > >

      安装所需的列表应该是:

      # extends = http://dist.plone.org/release/3.3/versions.cfg
      extends = versions.cfg
      versions = versions
      
      7

      重新运行构建:

      $ bin/buildout
      
      1. 在新创建的包中编辑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 作为资源目录 姓名。根据需要进行调整。

        1. 在configure.zcml旁边添加一个 static 目录
        2. 将主题和规则文件放入此目录。
        3. < > >

          例如,您可能有一个 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的样式表。

          有关更多有用的规则,请参见下面的内容。

          1. 创建安装配置文件
          2. < > >

            上面为 <;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及更高版本。更早 版本,只需取出即可。

            1. 测试
            2. < > >

              启动zope并进入你的plone站点。你的新包裹应该显示为 可安装在附加产品控制面板中。安装时,它应该 将collective.xdv作为依赖项安装,并将其预配置为使用您的主题 和规则集。默认情况下,主题未启用,因此您需要转到 打开控制面板。

              现在,您可以比较您的未接触主题、未设置样式的plone站点和 使用以下URL为网站设置主题:

              • http://localhost:8080 (或任何配置为样式的 (领域)为一个风格的巴隆。如果您使用上面的示例规则,这将 看起来几乎与主题完全相同,但是带有 <;title/>; 标记 (通常显示在网页浏览器的标题栏中)取自plone。
              • http://127.0.0.1:8080(假设这是plone所在的端口 (奔跑)为一个没有风格的扑通声。
              • http://localhost:8080/+resource++my.theme/theme.html的原始版本 主题。这是一个静态资源,几乎就像 在文件系统上打开。

常见规则

复制页面标题:

extends =
    versions.cfg
    http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5
versions = versions
3

要复制 <;base/>; 标记(plone的链接工作所必需的):

extends =
    versions.cfg
    http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5
versions = versions
4

从主题中删除所有样式和javascript资源并复制它们 取而代之的是plone的门户css工具:

extends =
    versions.cfg
    http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5
versions = versions
5

复制plone的javascript资源:

extends =
    versions.cfg
    http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5
versions = versions
6

复制 <;body/>; 标记的类(对于某些plone是必需的 正确工作的javascript函数和样式:

extends =
    versions.cfg
    http://good-py.appspot.com/release/collective.xdv/1.0?plone=3.3.5
versions = versions
7

其他提示
  • 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日

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日
  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
多线程如何在读取文本文件时使用Java进度条?   ChromeDriver出现“java.lang.module.InvalidModuleDescriptorException:提供程序类org.apache.bsf.BSFManager不在模块中”错误   java如何将Google日历链接到应用程序?   java线程信令序列   java StackOverflowerr不知道出了什么问题   从azure mobile apps easy tables获取表格时,java Android应用程序冻结   java Android应用程序无法连接到firebase数据库   java如何将属性文件中的值注入字段?   无法创建java Spring引导CXF XMLOutputFactory   javaui:月份选择器   获取java数组中n个最大值的索引   java注入servlet调度器中的EntityManagerFactory(非托管)   我在Android Studio中编写java代码,需要从特定网页获取并显示特定行的数据   java如何在Hibernate中设置内部查询的限制?   java如何编写接受一个数组和两个整数的交换方法   基于递归的java快速供电方法