将重氮主题引擎与plone集成

plone.app.theming的Python项目详细描述


这个包提供了一种使用重氮主题引擎开发和部署plone主题的简单方法。如果您不熟悉Diazo,请查看Plone 5.0或更高版本附带的
《Diazo文档》<;http://diazo.org>;` ` ` `.

《Plone.app.theming`(1.2.x)》。对于plone 4.3,请使用plone.app.theming 1.1.x.


它附带了一个用户指南,如下所示,可通过主题化
控制面板获得。




==plone版本4中的重氮主题化概述.3及以上。

…内容::内容
:本地:

要求。
本指南介绍如何使用plone的这一功能。

请参阅"plone.app.theming简介视频"http://vimeo.com/42564510>;` ` `.


什么是重氮主题?
——


"主题"使网站(在本例中,由plone提供动力的网站)呈现出一种特殊的外观和感觉。

*diazo*(以前称为xdv)是一种可用于主题
网站的技术。它不是特定于plone本身,而是由plone
社区创建的,从plone 4.3开始,它提供了将主题应用于
plone站点的默认方法。你可以在http://diazo.org上了解更多关于diazo的信息。

diazo主题可能与你在其他
系统中创建的主题有些不同,甚至与你在
plone的早期版本中创建的主题也有些不同。重氮主题实际上是将一些内容(在本例中是"vanilla"plone的输出)转换成一组不同的html标记,方法是应用一组规则将您想要的最终结果的静态html模型与plone的动态内容结合起来。与之相比,plone站点的主题(与许多其他
内容管理系统的主题一样)依赖于有选择地重写
模板和脚本,plone使用这些模板和脚本构建一个具有生成不同html标记的自定义版本
的页面。后一种方法可能更强大,
当然,但也需要对plone的内部结构有更深入的了解,并且需要对服务器端技术(如zope页面模板甚至python)有更深入的了解。
相比之下,diazo主题对于web设计人员和非开发人员来说更容易理解。同样的。

重氮主题由三个元素组成:

1。一个或多个HTML模型,也称为*theme*文件,表示
所需的外观。


这些模型将包含
plone内容管理系统提供的内容的占位符。实体模型通常按相对路径引用css、javascript
和图像文件。创建主题的最常见方法是使用桌面软件(如Dreamweaver)或文本编辑器创建相关的标记、样式和脚本,并在Web浏览器中本地测试主题。
2。主题化的内容。在本例中,这是
plone.
3的输出。一个*规则文件*,它定义如何用内容中的相关标记替换主题中的占位符(即
html模型)。

规则文件使用xml语法(类似于html)。这里有一个非常简单的例子:

<;?xml version="1.0"encoding="utf-8"?>;
<;规则
xmlns="http://namespaces.plone.org/diazo"
xmlns:css="http://namespaces.plone.org/diazo/css"
xmlns:xsl="http://www.w3.org/1999/xsl/transform">;`

<;主题href="theme.html"/>;

<;替换css:content children="content"css:theme children="main"/>;

<;rules>;

这里,我们将主题文件(``theme.html``,与``rules.xml``文件位于同一目录中,由``theme/>;``规则引用)中的html id``main``替换占位符元素的内容(子节点)
wi
plone生成的标记中html id为"content"的元素的内容(子元素)。

由主题
id``main``中的节点标识的占位符将由plone的主内容区域填充。

构建一个简单而实用的主题,公开plone的大部分核心功能。建议您学习它,特别是"rules.xml"
文件,以了解有关重氮主题如何工作的更多信息。

在plone的*站点设置中,ear将显示所有可用的主题,

o在新选项卡或窗口中打开该主题的预览。预览是可导航的,但表单提交和一些高级功能将不起作用。


选择主题
~~~~~~~~~~~~~~~~~~~~~

要应用现有主题,只需单击
主题预览下面的*激活*按钮。当前活动的主题将以黄色突出显示。如果
停用当前活动的主题,则不会应用重氮主题,即
"香草"重氮主题将应用。

*注意*:控制面板上的"主题"永远不会是MD,确保您可以始终停用可能导致控制面板不可用的错误主题。
因此,在启用主题之后,您可能不会立即看到任何差异。不过,只要导航到plone站点中的另一个页面,您就会看到应用了
主题。


ng*
控制面板,并在显示的窗体中输入标题和说明。
将创建一个简单的主题,您将进入*修改
主题*屏幕(见下文),在该屏幕上您可以编辑或创建主题和规则文件。
*单击任何现有项下的*复制*按钮。ng theme并在出现的表单中输入标题和
说明。将创建一个新主题作为现有主题的副本,您将被带到*修改主题*(请参见下面的
),在这里您可以编辑或创建主题和规则文件。

包含html模型和规则
文件。若要下载现有主题,请单击"主题化"控制面板"主题化"选项卡上"
"主题下的"*download*"按钮。

若要将此类zip文件上载到其他站点,请使用"*theming*控制面板"的"主题化"选项卡上的"*upload zip file*"按钮。您可以选择是否使用相同的名称替换任何现有主题(基于zip文件中包含的顶级目录的名称)。


plone不可知的web设计器。

在本例中,是一个基本的"规则"。将添加ml``文件,以便开始使用*modify theme*屏幕构建主题(参见下文)。
生成的规则文件将假定主html模型文件名为
``index.html``,但您可以在``rules.xml``中更改此项。

成功上载主题zip文件后,您将被带到
*修改主题*屏幕(见下文),您可以在其中编辑或创建它们。e个文件。

*提示:*如果您收到"上载的文件不包含有效的主题存档"之类的错误消息,这通常意味着您上载了包含多个文件和文件夹的zip文件,而不是一个包含所有主题资源的顶级文件夹。如果通过直接将主题或html模型的文件和文件夹添加到zip归档文件中来压缩
,而不是压缩它们所在的目录,则可能会发生这种情况。要解决此问题,
只需将计算机上的存档解压缩到一个新目录中,上移一级,
然后将该目录自身压缩到一个新的zip文件中,然后可以将其上载到


在"主题化"控制面板的
*Themes*选项卡中的主题下。创建或上载新主题时,此屏幕也会自动启动。

*注意:*只有通过*主题化*控制面板创建或上载的主题才能通过plone进行修改。由第三方加载项安装的主题或文件系统上分布的
不能,尽管如果zope在调试模式下运行,文件系统上所做的更改将立即反映出来。要修改
文件系统主题,可以通过单击*theming*控制面板中主题下面的*copy*
按钮将其复制到新的in-plone主题。

*modify theme*屏幕最初显示一个文件管理器,左侧显示一个文件树,右侧显示一个编辑器。单击文件树中的文件打开
编辑器或预览:可以直接通过编辑器编辑HTML、CSS、JavaScript和其他文本文件。其他文件(如图像)将呈现为
预览。

*注意:*带有语法突出显示的高级编辑器在
Microsoft Internet Explorer中不可用。

您也可以右键单击文件树中的文件夹以启动此操作。

您也可以右键单击文件树中的文件夹以启动此操作。

您还可以右键单击文件树中的某个文件夹以启动此操作。


单击"预览主题"以预览主题,因为它将应用于模型
和当前保存的规则。预览是可导航的,但是表单和某些高级功能将不起作用。

在文件树中单击它并选择适当的操作。


theme inspector
~它可以通过单击in plone themes的*modify theme*屏幕上的*show
inspectors*按钮来启动,也可以通过单击*theming*控制面板的
*themes*选项卡上文件系统主题下的*inspect theme*按钮来启动。

*HTML模型*。如果主题中有多个HTML文件,可以使用*HTML模型*面板下的下拉列表在它们之间切换。
*非主题内容*。这将显示没有应用任何主题的plone。


的右上角。

*面板,
您将看到:

*显示光标下元素的轮廓。
*如果
面板将在重氮规则中唯一标识此元素,则底部状态栏中的css或xpath选择器。

元素来选择它。每个面板中最近选择的元素显示在相关状态栏的右下角。

这在尝试选择"不可见"容器元素时非常有用。按``enter`
保存此选择。

可以导航*HTML模型*或(更常见的)*非限定内容*面板的内容,例如通过禁用检查器,转到需要特定主题规则的内容页。使用相关面板右侧底部的切换开关来启用或禁用选择器。


rd.系统将询问您要构建的规则类型,然后提示您根据需要在*html mockup*和/或*unthemed content*面板中选择相关元素。默认情况下,
这将使用任何已保存的选择,除非您取消选中向导第一页上的"使用选定的元素"框。

向导完成后,将向您显示生成的规则。如果您愿意,可以编辑
。如果单击*插入*,新生成的规则将
插入当前光标位置或光标位置附近的"rules.xml"编辑器中。
您可以随意移动或进一步编辑它。

单击*预览主题*在新的选项卡或窗口中预览主题。如果您做了更改,请不要忘记
保存"rules.xml"文件。

*注意*:在只读模式下,您可以构建规则并检查HTML模型和
主题,但不能更改"rules.xml"文件。在这种情况下,规则生成器的*插入*按钮也将不可用。

*注意:*从*生成规则*向导插入规则的功能在Microsoft Internet Explorer中不可用,尽管您可以选择将规则复制到CLIPB使用此浏览器时,请注意。

高级设置
~~~~~~~~~~~~~~~~~~~~~~

,*主题*控制面板还包含一个名为*高级设置*的选项卡。这里
是龙。


高级设置*选项卡分为两个区域。第一个是*theme
details*,它包含当从*themes*控制面板应用主题时修改的基础设置。这些是:

*是否启用了Diazo主题。
*规则文件的路径,通常称为"rules.xml",可以是相对于plone站点根目录的路径,也可以是指向外部服务器的绝对路径。
*在其中转换相对路径时应用的前缀e s(例如,在渲染时间
将对"标记的"src"属性"中的
图像的引用转换为绝对值。
*如果与默认的
``xhtml 1.0 transitional``不同,则应用于渲染输出的html``doctype`````.
*是否允许使用主题资源(likes``rules.xml``)从网络中读取。禁用此选项可适度提高性能。
*从未应用主题的主机名列表。最常见的是,这个
包含"127.0.0.1",允许您通过
``http://127.0.0.1:8080``查看非主题站点,并在
deve期间在``http://localhost:8080``查看主题站点。例如,lopment。
*一个主题参数列表和生成它们的故事表达式
(见下文)。


第二个主题库*控制非主题内容的呈现,并且即使没有应用重氮主题也应用
。这些是以前版本plone的*主题*控制面板中使用的
设置。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在中构建网页时感觉非常舒服。为了简化与plone的集成,建议您使用
,以确保它对css、javascript和image
文件等资源使用相对链接,以便从本地
文件在web浏览器中打开时能够正确呈现。plone会自动将这些相对链接转换为相应的绝对路径,确保主题在应用到plone站点时,无论用户查看的是哪个url都能正常工作。在文件系统中,如果使用安装程序或标准的"buildout"来设置

plone站点,那么在plone安装的根目录中应该有一个名为"resources"的目录(这是使用buildout recipe的
"resources"选项创建的)不,食谱,佐培根。有关详细信息,请参见http://pypi.python.org/pypi/plone.recipe.zope2instance。)


每个主题都需要一个具有唯一名称的
自己的目录。创建一个
(例如`resources/theme/mytheme``),并将html文件和任何
引用资源放在这个目录中。如果愿意,可以使用
子目录,但建议您将
基本主题HTML文件保留在主题目录的顶部。

在此
目录中还需要名为"rules.xml"的规则文件。如果还没有,请从空的开始:

<;?xml version="1.0"encoding="utf-8"?>;
<;规则
xmlns="http://namespaces.plone.org/diazo"
xmlns:css="http://namespaces.plone.org/diazo/css"
xmlns:xsl="http://www.w3.org/1999/xsl/transform">ss:content children="content"css:theme children="main"/>;


<;/rules>;


如果在调试模式下运行zope(例如,使用"bin/instance fg`"启动zope),则对主题和规则的更改应立即生效。您可以通过*themes*控制面板预览或启用主题
,然后根据需要迭代修改
``rules.xml``文件或主题模型。


2。通过web

如果您愿意(或者没有文件系统访问权限),可以完全通过plone控制面板创建
主题,方法是复制现有主题,或者从头开始使用接近空主题。

上面的"控制面板"可获取更多详细信息。


创建主题后,您可以通过
*主题化*控制面板对其进行修改。详见上文。


3.作为zip文件,主题可以从plone下载为zip文件,然后可以上传到其他站点。


请参阅上面关于使用控制面板的说明,了解更多
详细信息。

使用标准压缩工具(如*7-zip*或*winzip*(适用于Windows)或Mac OS X Finder中的内置
*compress*操作压缩文件系统上的
主题目录,创建有效的主题压缩文件。只要确保
只压缩一个包含所有主题文件的文件夹和
"rules.xml"文件。(不要直接压缩文件夹
的内容:解包时,zip文件应正好生成一个
文件夹,该文件夹依次包含所有相关文件)。


4.在python包中(仅限程序员)

eme``在
包的顶部,zope``configure.zcml``文件旁边,并将
``<;plone:static/>;``声明添加到``configure.zcml``文件::

<;configure
xmlns:plone="http://namespaces.plone.org/plone"
xmlns="http://namesp"aces.zope.org/zope">;

……

<;plone:static name="mytheme"directory="theme"type="theme"/>;

……


</configure>;

请注意根目录下的"plone"命名空间声明
`<;configure/>;。`"元素"。将主题文件和
``rules.xml``文件放入``theme``目录。


包含例如:

<;主题>;
<;名称>;神话主题<;名称>;
<;启用>;真的<;启用>;
<;主题>;


y将名为"manifest.cfg"的文件放在主题目录顶部的"rules.xml"文件旁边。


=/一些/前缀
doctype=<;!doctype html>;
preview=preview.png
enabled bundles=mybundle
disabled bundles=plone
development css=/+theme++barceloneta/less/barceloneta.plone.less
production css=/+theme++barceloneta/less/barceloneta compiled.css
development js=/+me++barceloneta/barceloneta.js
production js=/+theme++barceloneta/barceloneta.min.js
tinymce content css=/+theme++barceloneta/tinymce styles.css


e主题,在控制面板中使用。
只需要`[theme]``头-所有其他键都是可选的。



manifest设置:

rules
使用与``rules.xml``不同的规则文件名(应提供url
或相对路径)。

prefix
若要更改绝对路径前缀(请参见"高级设置"),请使用::


prefix=/some/prefix

若要在主题内容中使用"doctype",而不是"xhtml 1.0
transitional`",请添加例如::

doctype=<;!doctype html>;

preview
在*主题*控制面板中提供用户友好的主题预览。
这里,``preview.png``是相对于
``manifest.cfg``文件位置的图像文件:



/>当主题被激活时将自动启用的捆绑包当主题被激活时禁用


development css
css在开发模式和主题处于活动状态时自动包含


development js
javascript文件在开发模式下当
theme处于活动状态时自动包含

production css
css在主题处于活动状态时自动包含active和在生产模式下,当主题处于活动状态时和在生产模式下时,自动包含javascript的生产js


css file tinymce应该加载以将样式应用于编辑器中的内容

css file tinymce应该加载以提供额外的自动化lly在编辑器中检测到




Diazo主题引擎的扩展可以添加对
可配置参数的其他块的支持。

rules语法
~~~~~~~~~~~~~

以下是Diazo规则语法的简短摘要。有关详细信息和更多示例,请参见http://diazo.org。


selectors
++++使用名为*selectors的规则属性来指示要操作的元素,选择元素的最简单方法是使用css表达式选择器,例如
``css:content="content"``或``css:theme="main.content"``。任何有效的css 3
表达式(包括像``:first child``这样的伪选择器)都可以使用。

如果要对匹配元素的子元素进行操作,请改用"css:theme children="…"``或
"css:content children="…"``代替。

如果无法构造合适的css 3表达式,则可以使用xpath
表达式,如"content="/head/link"``或"theme="//div[@id="main"``"
(请注意缺少"css:"``使用xpath表达式时使用前缀)。这两种
方法是等价的,您可以自由地混合和匹配,但是您不能在单个规则上同时拥有例如"css:theme"和"theme"属性。若要对使用xpath表达式选择的节点的子节点执行
,请使用
``theme children="…"``或``content children="…"``.


/>威尔当然什么也不做。通过向规则添加
属性(如"css:if content="some element"`)"(若要改用xpath
表达式,请删除"css:"前缀),可以使规则、规则集或主题引用
(见下文)以内容中出现的元素为条件。如果没有元素与
表达式匹配,则忽略该规则。

**提示:**如果"`<;replace/>;`"规则与主题中的元素匹配,但与
内容中的元素不匹配,则将删除主题节点(替换为空)。如果您确实不希望这种行为,并且不确定内容是否包含相关元素,则可以使用"css:if content"条件规则。由于
这是一个常见的场景,因此有一个快捷方式:``css:if content=``表示
"使用来自``css:content``属性的表达式"。

类似地,您可以使用``if path=/news``等属性基于当前
请求的路径构造条件(请注意,没有
``css:if path```)。如果路径以斜线开头,它将从plone站点的根
开始匹配。如果它以斜线结尾,它将与URL的结尾匹配。
您可以使用前导斜线和尾随斜线设置绝对路径。

最后,您可以对任何定义的变量使用任意的xpath表达式
使用类似"if=$host='localhost'"这样的属性。默认情况下,变量模式`````host``和``base``可用,表示当前url。主题可能会在其清单中定义额外的变量。


>可用规则
+
+
+
+可用规则
+
各种规则类型总结如下。



``规则``````














<;规则>;
+br/>
>>
+br/>>
>>>
>+br/>>


>>>+<;/rules>;

包装一组规则。必须用作规则文件的根元素。嵌套的
``<;rules/>;``可以与*condition*一起使用,将单个条件应用于
规则集。


当用作规则文件的根元素时,必须声明各种xml名称空间::

<;rules
xmlns="http://namespaces.plone.org/diazo"
xmlns:css="http://namespaces.plone.org"/diazo/css"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
</rules>

``theme`` and ``notheme``
#########################

::

<theme href="theme.html" />
<theme href="news.html" if-path="/news" />
<notheme if="$host = 'admin.example.org'" />;

选择要使用的主题文件。``Href``是相对于规则
文件的路径。如果存在多个`<;theme/>;``元素,则最多可以给一个不带条件的
。将使用条件为true的第一个主题,
如果有无条件主题,则将其用作回退。

```<;no theme/>;``可用于指定不应使用主题的条件。``<;notheme/>;``优先于```<;theme/>;```.



**提示:***为确保您不会意外地设计非plone页面的样式,请在最后一个列出的主题
中添加类似"css:if content="visual portal wrapper"````这样的
条件,并且不要有任何无条件的主题。


``替换```
35br/>

::


<;replace
css:content="#content"
css:theme="#main"
/>

Replaces the matched element(s) in the theme with the matched element(s) from
the content.

``before`` and ``after``
########################

::

<before
css:content-children="#portal-column-one"
css:theme children="portlets"
/>;

<;在
css:content children="portal column two"
css:theme children="portlets"
/>;

在主题中匹配的元素之前或之后插入内容中匹配的元素。By using ``theme-children`` , you can insert the
matched content element(s) as the first (prepend) or last (append) element(s)
inside the matched theme element(s).

``drop`` and ``strip``
######################

::

<drop css:content=".documentByLine" />
<drop theme="/head/link" />
<;drop css:theme="content*"attributes="onclick onmouseup"/>;

<;strip css:content="parent fieldname text"/>;


从主题或内容中移除元素。注意,与大多数其他规则不同,
a``<;drop/>;``或`<;strip/>;``规则可以对``theme``或
``content``进行操作,但不能同时对两者进行操作。``<;drop/>;``删除匹配的元素并
任何子元素,而'`<;strip/>;``删除匹配的元素,但保留
任何子元素。

``<;drop/>;``可以给
drop以空格分隔的"属性"列表。在这种情况下,匹配的元素本身不会被删除。Use
``attributes="*"`` to drop all attributes.

``merge`` and ``copy``
######################

::

<merge
attributes="class"
css:content="body"
css:theme="body"
/>

<copy
attributes="class"
css:content="#content"
css:theme="main"
/>;

这些规则对属性进行操作。``<;merge/>;``会将主题中
命名属性的内容添加到任何现有属性的值中,内容中的
名称相同,用空格分隔。它主要用于
合并css类。

`<;copy/>;``将属性从内容中的匹配元素
复制到主题中的匹配元素,将所有属性完全替换为主题中已存在的同名属性。


attribute可以包含一个空格分隔的
属性列表,也可以包含特殊值`*``来操作
匹配元素的所有属性。

/>将标记直接放置到规则文件中,作为相关规则
元素的子节点:

<;在css:theme="head">;
<;style type="text/css">;
body>;h1{color:red;}
<;/style>;
<;&after>;

在内容上,允许您在应用任何
规则之前动态修改它::

<;替换css:content="门户搜索框input.search button">;
<;button type="submit">;
<;img src="images/search.png"alt="search"/>;
<;。n>;
<;/replace>;

除了以这种方式包含静态html外,还可以使用对内容进行操作的xslt
指令。您甚至可以直接在xslt中使用``css:``选择器
。:

<;替换css:theme="details">;
<;dl id="details">;
<;xsl:对于每个css:select="table details">;tr;
<;dt>;<;xsl:copy of select="td[1]/text()"/>;<;。/dt>;
<;dd>;<;xsl:select="td[2]/node()"/>;<;/dd>;
<;/xsl:for each>;
<;/dl>;
<;/replace>;

规则可以对从pl呈现的当前页以外的其他位置获取的内容进行操作。首先,使用"ref"属性指定资源相对于plone站点根的路径:

<;!--在
css:theme children="leftnav"
css:content=".navitem"
为主题指定任意参数,可以在xpath表达式中将其作为变量引用。参数可以在plone的主题控制面板中设置,也可以从"manifest.cfg"文件导入。

例如,可以将参数"mode"设置为"live"或"test"。在您的规则中,当您在测试服务器上时,可以这样做
以插入警告:

<;在css:theme children="body"if="$mode="test'">;
<;span class="warning">;警告:这是测试服务器<;/span>;
<;>;


您甚至可以直接使用参数值,例如:

<;before css:theme children="body">;
<;span class="info">;这是选择服务器的<;xsl:value,"$mode"/>;
<;>;
<;

plone themes:

``scheme`
入站url的scheme部分,通常是``http``或``https`.
``host`
入站url中的主机名。
``path`
入站url的路径段。这将不包括任何虚拟
宿主令牌,即它是最终用户看到的路径。
``base`
zope base url("base1"请求变量)。

面板,使用故事
表达式。参数列在"高级"选项卡上,每行一个,格式为"`<;名称>;=<;表达式>;`"。

您的规则文件可能包括::

<;notheme如果要添加此参数以及前面概述的"mode"参数,
可以在控制面板中添加以下内容::

ajax load=python:request.form.get("ajax加载")
mode=string:test

右手边是一个故事式的表达。它*必须*求值为字符串,
整数、浮点、布尔或"无":不支持列表、dict和对象。`` python:``,``string:``和路径表达式的工作方式与zope页面模板中的工作方式相同。


当前请求。
``portal`
门户根对象。
``context`state`
``plone`context`state``视图,您可以从中查找附加的
值,如上下文的url或默认视图。
``portal`state`
```plone`portal`state`视图,形成h您可以查找其他
值,例如导航根url或当前
用户是否已登录。

al为主题,因此在导入或启用主题时,将基于主题的清单设置
。这是使用``manifest.cfg``文件中的`[theme:parameters]``部分完成的。对于
示例:

[theme]
title=my theme
description=a test theme

[theme:parameters]
ajax加载=python:request.form.get('ajax加载')
mode=string:test

theme调试
~~~~~~~~~~~~~~~~~~~~~~

模式(例如,在控制台
的前台使用``bin/instance fg``运行),每次请求都会重新编译主题。在非开发模式下,在第一次访问时编译一次,然后只重新编译控制面板值。


此外,在开发模式下,可以通过附加查询字符串参数"diazo.off=1"暂时禁用主题。例如::

http://localhost:8080/plone/some page?diazo.off=1

绿色
表示条件匹配,红色表示条件不匹配。只要其中的所有条件都为绿色,整个规则标记都将为绿色(即它有效果)。

若要启用此功能,请附加"diazo.debug=1"。例如::

http://localhost:8080/plone/some page?diazo.debug=1


在非开发模式下忽略该参数。


ent="title"/>;

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

<;替换css:theme="base"css:content="base"/>;

如果主题中没有`<;base/>;``标记,可以执行以下操作:

<;在css:theme children="head"css:con之前tent="base"/>;

从主题中删除所有样式和javascript资源,并从plone的"portal-css"工具复制它们:

<;!--在头部放置样式-通过将它们从plone-->;
<;drop theme="中包含回来/html/head/link"/>;
<;放置主题="/html/head/style"/>;

<;!--拉入plone css-->;
<;在theme children="/html/head"content="/html/head/link/html/head/style"/>;


复制plone的javascript资源::

<;!--拉入plone css-->;
<;在theme children="/html/head"content="/html/head/script"/>;

>后复制``<;body/>;``标记的类(某些plone
javascript函数和样式正常工作所必需)::

<;!--body-->;
<;merge attributes="class"css:theme="body"css:content="body"/>;

advanced:使用门户css管理css
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~CSS样式表。与简单地将
链接到模板中的样式表相比,这提供了一些优势,例如:

*对样式表排序的详细控制
*合并样式表以减少呈现
页面所需的下载次数(例如,删除空白)
*基于表达式包含或排除样式表的能力

诀窍是:

*使用plone的"portal\u css"工具注册主题的样式(通常在python包中发布主题时最好这样做-对于从zip文件导入的主题或通过web创建的主题,目前没有办法自动执行此操作)
*drop主题的样式带有规则,然后
*包括plone

>中的所有样式例如,您可以添加以下规则:

<;drop theme="/html/head/link"/>;
<;drop theme="/html/head/style"/>;

<;!--拉入plone css-->;
<;after theme children=/html/head"content=/html/head/link/html/head/style"/>;


使用genericsetup在产品安装时注册样式表,使用genericsetup``profiles/default``
目录中的导入步骤:

<;?XML版本="1.0"?>;
<;object name="portal_css">;

<;!--在样式表上设置条件我们不想拉入-->;
<;样式表
expression="not:request/http_x_x_x主题nothing"
id="public.css"
/>;

<;!--添加新样式表-->;
<;样式表标题=""authenticated="false"cacheable="true"
压缩="safe"conditionalcomment="cookable="true"enabled="on"
表达式="request/http\u x\u theme\u enabled nothing"
id="++theme++my.theme/css/styles.css"media="" rel="stylesheet"
rendering="link"
applyprefix="true"
/>;

<;/object>;


但有一个重要的注意事项。您的样式表可能包含以下形式的相对url引用:

background image:url(../images/bg.jpg);

只要注册表(和zope)处于调试模式,我就可以正常工作。
相对url将由浏览器解析为
``+theme++my.theme/images/bg.jpg``.

这是因为资源合并还将样式表的url
更改为类似于::

/plone-site/portal-css/suburst+theme/merged-cachekey-1234.css

若要更正此问题,必须在使用"cssregistry.xml"安装css资源时将"applyprefix"标志设置为"true"。在"portal\u css"用户界面中有一个对应的标志。

您可以使用重氮`<;after/>;``规则或类似规则将plone生成的`<;head/>;``中的
css复制到主题中。您可以使用
``portal\u css``工具关闭您不需要的样式表。

但是,如果您还希望网站在非主题模式下可用(例如在
单独的URL上),则可能希望在不使用重氮
时启用更大的样式集。为了简化这一过程,您可以在"portal-css"工具(以及"portal-javascripts"(如果相关的话))中使用以下表达式作为
条件,在"portal-actions"(portal-actions)中使用
,在页面模板中使用
表达式语法的其他位置使用

r/>
如果当前启用了diazo,则此表达式将返回true,在这种情况下,将设置http头"x-theme-enabled"。

如果以后将该主题部署到前台web服务器(如nginx),则可以在那里设置相同的请求头以获得相同的效果,即使
``plone.app.theming``已卸载。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


如果设置了响应头``x-theme-disabled``则不应用重氮转换
。在浏览器视图中,可以使用以下指令设置头::

self.request.response.set header('x-theme-disabled','1')

这是一个完整的示例:


class nodiazoview(browserview):


def\uu call\uu(self):
self.request.response.setheader('x-theme-disabled','1')
return super(nodiazoview)。

==




您不应该*向该文件添加新的更改日志项。
您应该改为在新闻目录中创建一个文件。
有关帮助说明,请参阅:
https://github.com/plone/plone.releaser/blob/master/add-a-news-item.rst

。《Towncrier发行说明》开始

<4.0.1(2019-02-14)
----


错误修复:



-py3中的skinname编码修复(修复
https://github.com/plone/products.cmfplone/issues/2748)[pbauer](2748)



<4.0.0(2019-02-13)
----




峰值变化:



--将所有静态资源分解为plone.static resources,作为plip的一部分
1653。[thet,sunew](149)




>错误修复:


-a11y:为portalMessage[nzambello](151)
-修复了有关python 3上的safeconfigparser类的弃用警告。[毛里塔尼亚]
(152)
-修复了测试中未关闭文件的资源警告。[毛里塔尼亚](154)
-修复了"运行时错误:迭代期间字典大小已更改"[jensens]
(156)





3.0.1(2018-12-11)
----


中断更改:

-删除5.globalrequest依赖项。
已在上游(zope 4)被弃用。
[gfoRCADA]


<3.0.0(2018-11-02)
----


新功能:

-重新编译具有最新模型的资源包。
[sunew]


错误修复:

-解释控制面板的加载权限。
[jensen]

-修复合并plone的测试。登录。
[jensens]

-更多python 3修复
[ale rt,pbauer,davisagli]



2.0.3(2018-04-04)
----


bug修复:

-添加了一个失败的(5.1)文件上传测试在安装plone.rest时中断的主题编辑器中。修复程序位于https://github.com/plone/plone.rest/issues/59
[djay]



2.0.2(2018-02-04)
----



>错误修复:

-删除不存在的示例主题r/>
2.0.1(2017-07-03)
----


bug修复:

-移除unittest2依赖项
[kakshay21]




2.0(2017-05-24)
----

中断更改:

-让thememapper的模式配置为json格式。
修复pr与最新模式一起工作的主应用程序的问题lib(2.1.0)。
[thet]


bug修复:

-修复按钮的主应用程序模式处理(通过模型更新)。
更新主应用程序包。
[thet]




1.3.6(2017-03-28)
----


bug修复es:

-将主策略缓存的日志级别降低为"调试"。
[jensens]



1.3.5(2017-02-12)
----



错误修复:

-修复从zope4中删除的全局导入
[pbauer]

-不再修补控制面板内部,因为它是r在zope4中被删除
[matthewwilkes]

-rest语法、样式指南、文档的措辞和行长
[svx]


1.3.4(2016-12-30)
----


bug修复:

-当设置了diazo always缓存规则时,使diazo.debug重新工作。
[ale rt]







1.3.3(2016-12-02)
----


错误修复:

-移除罗马猴补丁。
[gforcada]


1.3.2(2016-09-23)
----


新功能:

-添加更新-控制面板按钮,使
重新加载修改过的主题ma成为可能最好不要首先停用主题。
[datakurre]



1.3.1(2016-09-07)
----


修复:

-使用模式类"pat formunloadalert"启用卸载保护,而不是"enableUnloadProtection"。
[thet]

-文档中的小修复tion
[stateff]

-修复当打包的
主题与全局资源目录主题重叠时控制面板出现错误的问题
[datakurre]

<1.3.0(2016-06-07)
----


新增:

-开发模式下的控制主题编译
通过环境变量"diazo_always_cache_rules`
[ale rt]


修复:

-文档的小修复
[ale rt]


1.2.19(2016-03-31)
----

t getsite返回,但不更改ControlPanels上下文绑定。
这允许在具有本地注册表的子站点上配置时具有更大的灵活性。
[thet]




1.2.18(2016-03-03)
----


修复:

-fixed html validatioN:元素导航不需要角色属性。
[毛里塔尼亚]

-处理在主题化控制面板中选择的主题可能显示错误的场景
[vangheem]




1.2.17(2016-02-11)
---------


新建:

-记录了如何禁用通过设置
``x-theme-disabled``标题进行重氮转换。[ale rt]

修复:

-重建资源,以便它们使用最新的模型/模式lib
集成更改。[vangheem]

-删除了内存映射中的GitHub依赖项。[gagaro]



1.2.16(2015-11-26)
----


修复:

-更新所有控制面板中的站点设置链接。
修复https://github.com/plone/products.cmfplone/issues/1255
[davilima6]



1.2.15(2015-10-28)
----





-在没有设置的情况下,不要在"isthemeenabled"中失败,例如从plone 3迁移到plone 5时,也可能在
其他情况下。
[毛里塔尼亚]


-修复了复制到多字节标题/描述中时的Unicode编码错误
[terapyon]




1.2.14(2015-09-27)
----

-修复mapper.pt中的i18n
[vincentfretin]


1.2.13(2015-09-20)
----


-从配置注册表中拉出标记特殊链接、外部链接打开新窗口值
.
[estele]


-修复Safari上的视觉问题
[davilima6]

-在t顶部显示活动主题heme list.
修复https://github.com/plone/plone.app.theming/issues/70
[tmassman]



1.2.12(2015-09-15)
----


-删除捆绑的Twitter引导主题"example"。
修复https://github.com/plone/products.cmfplone/issues/877
[pbauer]

-删除用于创建控制面板主题的重复类型属性delete model。
[estele]



1.2.11(2015-09-11)
----



-使用相对路径从复制的主题重写清单
[vangheem]



1.2.10(2015-09-08)
-

-主题映射器有时会修复保存文件中的奇数行为
[swartz]



<1.2.9(2015-08-22)
----


-生成主题映射器资源。
[vangheem]

-添加缓存无效选项。
[swartz]



1.2.8(2015-08-20)
---——

-将链接从plone.org更改为plone.com。
[tkimnguyen]

-修复控制面板上的工具栏
[vangheem]

-fix less building
[obct537]

-fixed copy model for themes with a dot in the name.
[gagaro]



1.2.7(2015-07-18)
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-实现可切换主题策略API,重新实现主题缓存
[GYST]

-已复制主题的固定配置
[vmaksymiv]

-已实现主题管理器的上载
[schwartz]

-将配置let的类别更改为"plone general"。
[sneridagh]


1.2.6(2015-06-05)
———————————————————————————————————————————————————————————————————————————————————————————————————TTW主题不能再被重写
[schwartz]

-重新添加清单检查
[schwartz]

-修复了损坏的gettheme方法
[schwartz]


-文档的次要重新构造文本修复。
[maurits]



1.2.5(2015-05-13)
----

-通过在清单中带回几个
示例行,修复PYPI上的重构文本表示。
[毛里塔尼亚]



1.2.4(2015-05-12)
----


-为自动检测到的Tinymce样式添加设置
[Vangheem]


1.2.3(2015-05-04)
--——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————修复了皮肤
控制面板不再存在的问题。
[vangheem]

-统一不同的gettheme函数。
[jensens]

-pep8、管家、清理
[jensens]

-pat-m中指定i18n:domain。ODAL模式已重命名为pat plone modal
[jcbrand]

-在调用
onenabled的插件之前修复已启用主题的加载插件设置,并使用正确的参数调用已启用插件
[datakurre]




1.2.2(2015-03-22)
----


-只为avi修补zmi标签的ZMI页面。
[TB],[BR/> [BR/> > BR/> -更改禁止导入"Zop.Soo.Hook.GeStuto'"到
'Zop.Dek.Hook.GETSIT'`[BR/> [TIT]

-如果子请求失败(可能是相对Xi:包含)BR/>添加错误日志,而不是默默地返回"没有"(因此有一个XI):包括返回
无内容)。
[vincentfretin]

-修复转换以在禁用主题时不影响结果
[datakurre]

-集成模型映射器模型模式并修复主题控制面板
以使其更可用
[ebrehault]



1.2.1(2014-10-23)
----

-从模板中的门户消息中删除dl。
https://github.com/plone/products.cmfplone/issues/153
[khink]

-修复控制面板上"站点管理员"的"权限不足"。
[@rpatterson]

-添加ithemeappliedevent
[vangheem]

-将主题放在一个单独的zcml文件中,以便能够排除它们
[laulaz]

-\14107诸如/widget/oauth嫒u login/info.txt之类的bot请求会导致使用plone.app.theming
[anthonygerrard]

-添加对它们的支持e++遍历当前激活主题的内容。
[bosim]




1.2.0(2014-03-02)
----


-禁用管理关闭视图的主题。
[davisagli]

-修复对主题错误模板的引用控制面板中的"Tyles"按钮,用于显示、测试呈现模板。
[Runyaga]

<1.1.1(2013-05-23)
----


-修复了i18n问题。
[Thomasdesvenain]

-修复了主题标题为"否"时的UnicodedeCoderror。n-ascii
在manifest.cfg文件中。
[jianaijun]



>1.1(2013-04-06)
---------


-修复了i18n问题。
[vincentfretin]

-使模板主题执行它声称要执行的操作:将样式复制为脚本。
[smcmahon]

-更改示例主题的标签和说明,以提供有用的
信息。
[smcmahon]

-从1.0升级,获得在
1.1a1中添加的组合"主题"控制面板。
[danjacka]




1.1b2(2013-01-01)
----

-确保主机为黑色list使用服务器url来正确地确定任意深度上作为子文件夹托管的站点的主机名

[davidjb]

-add test about plone.app.theming/plone.app.caching integration when
using gzip compression for anonymous
(请参见ticket`12038<;https://dev.plone.org/门票/12038>;``。[ebrehault]



1.1b1(2012-10-16)
----


-添加diazo.debug选项,通过
路由所有错误日志输出,以便可以显示调试
[lentinj]

-使基于引导的主题示例使用HTML5 doctype。
[danjacka]

-降级ZMI将日志消息修补到调试级别。
[hannosch]

-通过plone.resourceditor升级到ace 1.0
[optilude]

-在jquery属性选择器值周围加引号以安抚jquery 1.7.2.
[danjacka]

<1.1a2(2012-08-30)
----


-使用特定权限保护控制面板,以便可以对其进行委派。
[davisagli]

-建议在
manifest.cfg中将ajax加载定义为"request.form.get('ajax加载')"。例如,登录表单有一个隐藏的空
ajax加载输入,在提交
表单后,该输入将提供一个无限制的页面。
[maurits]

-将主题编辑器页面模板更改为使用主模板,而不是使用
prefs\u主模板,以避免插入css和javascript too early
在plonetheme.classic下。
[danjacka]


1.1a 1(2012-08-08)
----


-将"主题"控制面板替换为重命名的"主题"控制面板。ol
面板,在其"高级"选项卡下包含前者的设置。
[选项]


-添加完整的plone主题创作环境
[选项,vangheem]

-更新ibeforetraverseevent导入到zope。遍历。
[hannosch]

-在选项卡"管理它们"es",将表标题更改为
更好地描述实际列出的内容。
[kleist]


1.0(2012-04-15)
----


*当getrequest返回none时防止attributeerror。
[maurits]

*根据导航根而不是门户计算子请求。
[elro]

*为404页提供最接近的上下文。
[elro]


*使用正确的上下文查找门户状态。
[elro]


1.0b9-2011-11-02
----


*补丁应用程序管理。导航以禁用ZMI页的主题。
[elro]

<1.0b8-2011-07-04
-------

*评估主题参数,无论是否存在有效上下文(例如,在模板化404页时)。
[lentinj]


1.0b7-2011-06-12
-------


*将*视图*和*重写*插件移出到9月arate包
`` plone.app.ThemingPlugins`。如果要使用这些功能,需要
在构建中安装该包。试图在未安装"plone.app.ThemingPlugins"的环境中注册
视图或覆盖的主题将安装,但视图和覆盖将不会生效。
[可选]


1.0b6-2011-06-08
----


*支持设置任意d八种类型。
[elro]

*更新plone.app.registry配置的升级步骤。
[elro]

*应用主题时修复了插件初始化。
[maurits]

*使用主题对象的"currentTheme"名称而不是
查询资源目录(更新控制面板已断开)。
[毛里塔尼亚]

*修复ZIP导入(插件初始化已断开。)
[elro]


1.0b5-2011-05-29
----


*通过设置x-theme-disabled
响应头,确保控制面板从不设置主题。
[optilude]

*添加对从zope页面模板注册新视图和覆盖现有模板的支持。有关详细信息,请参阅自述文件。
[选项]


1.0b4-2011-05-24
---------

*添加对"禁用X主题"响应头的支持。
[elro]


*将"替换现有主题"复选框默认为"关闭"。
[elro]

*修复控制面板以正确显示播放新上载的主题。
[elro]

*修复ZIP导入以在未提供清单时正常工作。
[elro]


1.0b3-2011-05-23
----



*在控制面板中显示主题名称和标题。
[elro]

<1.0b2-2011-05-16
--------

*对内部解析的文档进行编码,以正确支持非ascii字符

[elro]

*修复控制面板以使用主题名称而不是id。
[optilude]


1.0b1-2011-04-22
----

[elro]

*添加"theme.xml"导入步骤(请参阅自述文件)。
[optilude]

*添加对"manifest.cfg"中"theme:parameters"部分的支持,该部分可用于设置参数和相应的tales表达式
计算它们。
[optilude]

*添加对基于tales表达式的参数表达式的支持
[optilude]

*使用plone.subrequest 1.6功能从
plone.resource使用IStream迭代器。
[elro]

*依赖于"products.cmfplone"增加了对上传主题作为zip存档的支持。
[optilude]

*added theme off switch:add a query st当zope处于关闭主题的开发模式时,将参数"diazo.off=1"调到
请求。
[optilude]

*删除"主题"和其他主题支持:应使用diazo规则文件中的"theme/>;"指令引用主题。
[optilude]

*删除的"域"支持:可以使用规则文件语法
使用"host"参数进行处理。
[optilude]

*删除的"notheme"支持:可以使用"path"参数在规则文件语法
中进行处理。
[optilude]

*added``path``和``host``作为diazo规则文件的参数。这些
现在可以用作条件表达式。
[选项]


*删除了对xdv的依赖,转而依赖于重氮(xdv的新名称)。
[选项]



*从collective.xdv 1.0rc11派生出来。
[选项]




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

推荐PyPI第三方库


热门话题
java如何单独突出显示   java在hibernate中添加共享主键和主键   java Android。如何克隆可编辑文件   线程“awteventque0”java中出现3d异常。我的vector3类中的lang.NullPointerException   调用restTemplate时发生java错误。交换法   java解析命令行   datetime如何以yyyyMMdd HH:mm:ss格式存储日期,而不必更改Java中日期的数据类型?   java访问raspberry pi端口   java Android:用于设置NestedScrollView的最大高度的自定义类不起作用(没有滚动条)   java删除一个链接如何从链表中删除一个节点?   java如何在方法中引用抽象类的方法   Java 安卓 glide调整照片大小   Enounciate的XmlJavaTypeAdapter和JavaXML客户端模块的java问题   Spring无版本xsd的java Intellij错误xsd验证   java我需要关于Proguard的帮助