将Diazo主题引擎集成到Plone中
项目描述
此包提供了一个简单的方法来使用Diazo主题引擎开发和使用Plone主题。如果您不熟悉Diazo,请参阅Diazo文档。
它包含一个用户指南,如下所示,可通过主题控制面板获取。
plone.app.theming手册
本指南提供了Plone 4.3及以上版本中Diazo主题的概述。
简介
在Plone 4.3及以上版本中,您可以通过Plone的站点设置控制面板在Web浏览器中编辑网站主题。只需HTML、CSS和一点XML知识作为先决条件。本指南解释了如何使用此功能。
什么是Diazo主题?
“主题”使网站(在这种情况下,由Plone提供动力)呈现出特定的外观和感觉。
Diazo(以前称为XDV)是一种可以用来主题网站的 teknoloji。它本身并不是专门针对Plone的,但它是Plone社区创建的,并且从Plone 4.3开始,为应用主题到Plone站点提供了默认方式。您可以在http://diazo.org上了解更多关于Diazo的信息。
Diazo主题可能与您在其他系统中创建的主题不同,甚至可能与您为Plone早期版本创建的主题不同。实际上,Diazo主题是关于转换一些内容 - 在这种情况下,从“vanilla” Plone生成的输出 - 通过应用一组规则将静态HTML原型与来自Plone的动态内容结合,从而转换成不同的HTML标记。
相比之下,之前为Plone站点(如许多其他内容管理系统所采用的方式)主题化的方法,依赖于有选择地覆盖Plone构建页面所使用的模板和脚本,使用自定义版本生成不同的HTML标记。后一种方法确实更强大,但也需要更深入地了解Plone的内部结构和掌握诸如Zope页面模板甚至Python等服务器端技术。相比之下,Diazo主题对于网页设计师和非开发人员来说都很容易理解。
Diazo主题由三个元素组成
一个或多个HTML原型图,也称为主题文件,代表所需的视觉和感觉。
这些文件将包含由Plone内容管理系统提供的内容的占位符。原型图通常通过相对路径引用CSS、JavaScript和图像文件。创建主题最常见的方法是使用Dreamweaver之类的桌面软件或文本编辑器创建相关的标记、样式和脚本,并在本地网页浏览器中测试主题。
正在主题化的内容。在这种情况下,是来自Plone的输出。
一个规则文件,它定义了主题中的占位符(即HTML原型)应如何用内容中的相关标记替换。
规则文件使用XML语法(类似于HTML)。以下是一个非常简单的示例
<?xml version="1.0" encoding="UTF-8"?> <rules xmlns="http://namespaces.plone.org/diazo" xmlns:css="http://namespaces.plone.org/diazo/css" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">` <theme href="theme.html" /> <replace css:content-children="#content" css:theme-children="#main" /> </rules>
在这里,我们将主题文件(theme.html,与rules.xml文件位于同一目录中,如<theme />规则所引用)中具有HTML id main的占位符的内容(子节点)替换为由Plone生成的标记中具有HTML id content的元素的内容(子节点)。
当应用此主题时,结果将非常类似于静态HTML文件 theme.html(及其引用的CSS、JavaScript和图像文件),只是主题中用id main标识的占位符将由Plone的主要内容区域填充。
Plone附带一个名为示例主题的示例主题,该主题使用备受推崇的Twitter Bootstrap构建了一个简单但功能齐全的主题,暴露了Plone的大部分核心功能。建议您研究它 - 特别是rules.xml文件 - 以了解Diazo主题的工作方式。
使用控制面板
在Plone站点中安装了Diazo主题支持包后,将出现Plone的站点设置中的主题控制面板。
此控制面板的主要选项卡是主题,它将显示所有可用的主题,包括激活/停用、修改、复制或删除每个主题的按钮,以及创建新主题或显示此帮助文本的按钮。
单击主题预览图像,在新的选项卡或窗口中打开该主题的预览。预览是可导航的,但表单提交和一些高级功能将无法使用。
选择一个主题
要应用现有主题,只需单击主题预览下方的激活按钮。当前激活的主题将以黄色突出显示。如果您停用当前激活的主题,则不会应用任何Diazo主题,即应用“纯”Plone主题。
注意:由于主题控制面板永远不会被主题化,因此您可以始终停用可能使控制面板无法使用的错误主题。因此,在启用主题后,您可能不会立即看到任何差异。但是,只需导航到Plone站点中的另一个页面,您就应该会看到应用的主题。
创建新主题
可以通过两种方式之一创建新主题
在主题选项卡顶部的主题控制面板中单击新建主题按钮,并在出现的表单中输入标题和描述。将创建一个基本主题,并将您带到修改主题屏幕(见下文),在那里您可以编辑或创建主题和规则文件。
点击任何现有主题下方的复制按钮,并在出现的表单中输入标题和描述。新的主题将以现有主题的副本形式创建,并将您带到修改主题页面(见下文),您可以在那里编辑或创建主题和规则文件。
上传现有主题
主题可以作为Zip文件分发,包含HTML原型和规则文件。要下载现有主题,请点击下载按钮,该按钮位于主题标签页下的主题控制面板。
要将此类Zip文件上传到另一个网站,请使用主题标签页下的主题控制面板中的上传Zip文件按钮。您可以选择是否用相同名称的现有主题替换(基于Zip文件中包含的顶级目录的名称)。
您还可以上传不包含规则文件的静态HTML原型Zip文件,例如由Plone无关的网页设计师提供的设计。
在这种情况下,将为您添加一个基本的rules.xml文件,以便您可以从修改主题屏幕(见下文)开始构建主题。生成的规则文件将假设主要的HTML原型文件名为index.html,但您可以在rules.xml中更改此名称。
成功上传主题Zip文件后,您将被带到修改主题屏幕(见下文),您可以在那里编辑或创建主题文件。
提示:如果您收到类似于“上传的文件不包含有效的主题存档”的错误消息,这通常意味着您上传了一个包含多个文件和文件夹的Zip文件,而不是一个包含所有主题资源的单个顶级文件夹。这可能会发生如果您通过直接将文件和文件夹添加到Zip存档中来压缩主题或HTML原型,而不是压缩它们所在的目录。要修复此问题,只需在您的计算机上解压缩存档到一个新目录,向上移动一个级别,然后将此目录单独压缩到一个新的Zip文件中,然后您可以将其上传。
修改主题
您可以通过点击主题标签页下的主题下的修改主题来修改主题。创建或上传新主题时,此屏幕也会自动启动。
注意:只有通过主题控制面板创建或上传的主题才能通过Plone进行修改。通过第三方插件安装或分发在文件系统上的主题不能修改,尽管在Zope以调试模式运行时,在文件系统上所做的更改将立即反映出来。要修改文件系统主题,您可以将它复制到Plone中的新主题,方法是点击主题标签页下的主题下的复制按钮。
“修改主题”屏幕最初显示一个文件管理器,左侧是文件树,右侧是编辑器。点击文件树中的文件可以打开编辑器或预览:HTML、CSS、JavaScript和其他文本文件可以直接通过编辑器进行编辑。其他文件(例如图片)将作为预览显示。
注意:高级编辑器具有语法高亮功能,在Microsoft Internet Explorer中不可用。
点击新建文件夹创建新文件夹。您还可以在文件树中的文件夹上右击来触发此操作。
点击新建文件创建新文本文件。您还可以在文件树中的文件夹上右击来触发此操作。
点击上传文件从您的计算机上传文件。您还可以在文件树中的文件夹上右击来触发此操作。
点击 预览主题 以预览主题,其应用效果将根据当前保存的样本和规则。预览是可导航的,但表单和某些高级功能将无法使用。
要保存正在编辑的文件,请点击保存文件按钮,或使用键盘快捷键Ctrl+S(Windows/Linux)或Cmd+S(Mac)。
要重命名或删除文件或文件夹,在文件树中右键单击它,并选择相应的操作。
主题检查器
主题检查器提供了一个高级界面,用于发现和构建 Diazo 主题的规则。对于 Plone 主题,可以通过在“修改主题”屏幕上点击显示检查器按钮或通过在“主题”选项卡下的文件系统主题下方点击检查主题按钮来启动。
主题检查器由两个面板组成
HTML 模板。如果主题中包含多个 HTML 文件,您可以使用HTML 模板面板下方的下拉列表在它们之间切换。
无主题内容。这显示了未应用任何主题的 Plone。
您可以通过点击任意一个面板右上角的箭头图标来最大化任何一个面板。
通过点击任意一个面板右上角的标签图标,可以将HTML 模板和无主题内容面板切换到源视图,显示其底层 HTML 标记。
当您在HTML 模板或无主题内容面板中的元素上悬停时,您将看到
一个显示光标下元素的轮廓。
在面板底部的状态栏中,如果有 CSS 或 XPath 选择器,则可以唯一标识 Diazo 规则中的此元素。
点击一个元素或当悬停在元素上时按Enter以选择它。每个面板中最最近选择的元素将显示在相关状态栏的右下角。
当悬停在元素上时按Esc以选择其父元素。这在尝试选择“不可见”容器元素时很有用。按Enter以保存此选择。
可以通过禁用检查器来导航HTML 模板或(更常见)无主题内容面板的内容,例如到达需要特定主题规则的内容页面。使用相关面板右下角的切换开关来启用或禁用选择器。
规则构建器
点击修改主题或检查主题屏幕顶部附近的构建规则按钮以启动交互式规则构建向导。您将被询问要构建哪种类型的规则,然后会被提示在HTML 模板和/或无主题内容面板中按要求选择相关元素。默认情况下,这将使用任何保存的选择,除非在向导的第一页上取消选中使用所选元素框。
向导完成后,您将看到生成的规则。如果您愿意,可以编辑它。如果您点击插入,新生成的规则将插入到rules.xml编辑器中的当前光标位置附近。您可以随意移动它或进一步编辑它。
点击预览主题在新标签或窗口中预览主题。如果您进行了更改,别忘了保存rules.xml文件。
注意:在只读模式下,您可以构建规则并检查 HTML 模板和主题,但不能更改rules.xml文件。在这种情况下,规则构建器的插入按钮(见下文)也将不可用。
注意:从构建规则向导中插入规则的功能在 Microsoft Internet Explorer 中不可用,尽管当使用此浏览器时,您将有机会将规则复制到剪贴板。
高级设置
“主题”控制面板还包含一个名为高级设置的选项卡。这里可能有未知的风险。
“高级设置”标签页分为两个区域。第一个是主题详情,包含当从主题控制面板应用主题时修改的底层设置。这些包括
是否启用 Diazo 主题。
规则文件的路径,通常称为 rules.xml,可以是相对于 Plone 网站根目录的路径,也可以是到外部服务器的绝对路径。
在渲染时将主题中的相对路径(例如 <img /> 标签的 src 属性中对图像的引用)转换为绝对路径时使用的前缀。
要应用到渲染输出的 HTML DOCTYPE,如果与默认的 XHTML 1.0 Transitional 不同。
是否允许从网络读取主题资源(如 rules.xml)。禁用此功能将提供一定的性能提升。
一个主题永远不会应用的域名列表。最常见的是包含 127.0.0.1,允许您通过 http://127.0.0.1:8080 查看未应用主题的网站,并在开发期间通过 http://localhost:8080 查看应用了主题的网站。
主题参数列表以及生成它们的 TALES 表达式(见下文)。
第二个,主题基本设置,控制未应用主题的内容的呈现,即使没有应用 Diazo 主题也会应用。这些是以前在 Plone 的旧版本中在 主题 控制面板中找到的设置。
参考
本指南的其余部分包含对主题构建者有用的参考资料。
部署和测试主题
要构建和测试一个主题,您必须首先创建一个静态 HTML 原型,以展示您想要的外观和感觉,然后构建一个规则文件来描述 Plone 的内容如何映射到这个原型的占位符。
原型可以使用您最熟悉的任何工具在任何地方创建。为了简化与 Plone 的集成,建议您确保它使用相对链接来引用资源,如 CSS、JavaScript 和图像文件,这样它就可以在本地文件中打开时正确渲染。Plone 将自动将这些相对链接转换为适当的绝对路径,确保无论用户查看哪个 URL,主题在应用 Plone 网站时都能正常工作。
有几种方法可以将主题添加到 Plone
在文件系统中
如果您使用安装程序或标准“buildout”设置您的 Plone 网站,您应该在 Plone 安装根目录中有一个名为 resources 的目录(这是使用 buildout 脚本 plone.recipe.zope2instance 中的 resources 选项创建的。有关更多详细信息,请参阅 http://pypi.python.org/pypi/plone.recipe.zope2instance。)
您可以在该目录内找到(或创建)一个名为 theme 的目录,用于包含主题。每个主题都需要一个具有唯一名称的目录。创建一个(例如 resources/theme/mytheme),并将您的 HTML 文件和任何引用资源放入此目录中。如果您愿意,可以使用子目录,但建议将基本主题 HTML 文件放在主题目录的顶部。
您还需要在这个目录内创建一个名为 rules.xml 的规则文件。如果您还没有,可以从一个空的文件开始。
<?xml version="1.0" encoding="UTF-8"?> <rules xmlns="http://namespaces.plone.org/diazo" xmlns:css="http://namespaces.plone.org/diazo/css" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">` <theme href="theme.html" /> <replace css:content-children="#content" css:theme-children="#main" /> </rules>
只要您以调试模式运行 Zope(例如,您可以使用 bin/instance fg 启动它),主题和规则的更改应立即生效。您可以通过 主题 控制面板预览或启用主题,然后根据需要迭代修改 rules.xml 文件或主题原型。
通过网络
如果您更喜欢(或没有文件系统访问权限),您可以通过Plone控制面板完全创建主题,无论是通过复制现有主题,还是从一个几乎空的主题从头开始。
有关使用控制面板的说明,请参阅上面的详细信息。
一旦创建了一个主题,您就可以通过主题控制面板来修改它。请参阅上面的详细信息。
作为ZIP文件
可以从Plone下载主题作为ZIP文件,然后可以将其上传到其他网站。
有关使用控制面板的说明,请参阅上面的详细信息。
实际上,您可以通过使用标准压缩工具(如7-Zip或Winzip(适用于Windows)或Mac OS X Finder中的内置压缩操作)压缩文件系统上的主题目录来创建有效的主题ZIP存档。只需确保您压缩的是包含所有主题文件和
rules.xml
文件的文件夹即可。(不要直接压缩文件夹的内容:解压缩后,ZIP文件应产生一个文件夹,该文件夹再包含所有相关文件)。在Python包中(仅限程序员)
如果您正在创建一个包含您打算安装到您站点的Plone自定义的Python包,您可以使其注册一个主题以安装到站点。
为此,在包的顶部放置一个名为例如
theme
的目录,位于Zope的configure.zcml
文件旁边,并在configure.zcml
文件中添加一个<plone:static />
声明<configure xmlns:plone="http://namespaces.plone.org/plone" xmlns="http://namespaces.zope.org/zope"> ... <plone:static name="mytheme" directory="theme" type="theme" /> ... </configure>
注意在根
<configure />
元素中的plone
命名空间声明。将主题文件和rules.xml
文件放入theme
目录中。如果您的包有一个GenericSetup配置文件,您可以在安装此配置文件时自动启用主题,通过在
profiles/default
目录中添加一个theme.xml
文件来实现,例如:<theme> <name>mytheme</name> <enabled>true</enabled> </theme>
清单文件
您可以通过在主题目录顶部放置一个名为manifest.cfg
的文件来提供有关主题的额外信息。
此文件可能看起来像这样:
[theme] title = My theme description = A test theme rules = http://example.org/myrules.xml prefix = /some/prefix doctype = <!DOCTYPE html> preview = preview.png enabled-bundles = mybundle disabled-bundles = plone development-css = /++theme++barceloneta/css/barceloneta.css production-css = /++theme++barceloneta/css/barceloneta.min.css development-js = /++theme++barceloneta/barceloneta.js production-js = /++theme++barceloneta/barceloneta.min.js tinymce-content-css = /++theme++barceloneta/barceloneta.min.css tinymce-styles-css = /++theme++barceloneta/custom-styles.css
如上图所示,清单文件可用于为主题提供更友好的标题和更长的描述,以便在控制面板中使用。只需提供[theme]
标题即可 - 所有其他键都是可选的。
清单设置
- 规则
要使用与
rules.xml
不同的规则文件名(您应提供URL或相对路径)。- 前缀
要更改绝对路径前缀(请参阅高级设置),请使用
prefix = /some/prefix
- doctype
要在主题内容中使用除
XHTML 1.0 Transitional
以外的DOCTYPE
,请添加例如:doctype = <!DOCTYPE html>
- 预览
为了在主题控制面板中提供一个用户友好的主题预览。在这里,
preview.png
是相对于manifest.cfg
文件位置的图像文件preview = preview.png
- enabled-bundles
当主题激活时将自动启用的捆绑包
- disabled-bundles
当主题激活时将自动禁用的捆绑包
- development-css
在开发模式下主题激活时自动包含的CSS
- development-js
在开发模式下主题激活时自动包含的JavaScript文件
- production-css
在主题激活且处于生产模式时自动包含的CSS
- production-js
在主题激活且处于生产模式时自动包含的JavaScript
- tinymce-content-css
tinymce应加载以应用于编辑器内部内容的CSS文件
- tinymce-styles-css
tinymce应加载以提供编辑器中自动检测的下拉样式的CSS文件
对 Diazo 主题引擎的扩展可以添加对可配置参数块的支持。
规则语法
以下是 Diazo 规则语法的简要总结。有关更多详细信息和其他示例,请参阅 http://diazo.org。
选择器
每个规则都由一个 XML 标签表示,该标签在内容或主题中的一个或多个 HTML 元素上操作。要操作元素使用规则中称为 选择器 的属性。
选择元素的最简单方法是使用 CSS 表达式选择器,例如 css:content="#content" 或 css:theme="#main .content"。任何有效的 CSS 3 表达式(包括伪选择器如 :first-child)都可以使用。
标准选择器 css:theme 和 css:content 对匹配的元素进行操作。如果您想操作匹配元素的子元素,请使用 css:theme-children="..." 或 css:content-children="..."。
如果您无法构造一个合适的 CSS 3 表达式,则可以使用类似于 content="/head/link" 或 theme="//div[@id='main']" 的 XPath 表达式(使用 XPath 表达式时,请注意没有 css: 前缀)。两种方法等效,您可以自由混合和匹配,但不能在单个规则上同时具有例如 css:theme 和 theme 属性。要操作使用 XPath 表达式选择的节点子元素,请使用 theme-children="..." 或 content-children="..."。
您可以在 https://w3schools.org.cn/xpath/default.asp 上了解更多关于 XPath 的信息。
条件
默认情况下,每个规则都会执行,尽管当然不匹配任何元素的规则将不会做任何事情。您可以通过向规则添加一个属性来使规则、一组规则或主题引用(见下文)在内容中某个元素出现时条件化,例如 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'" . 默认情况下,变量 url 、 scheme 、 host 和 base 可用,代表当前 URL。主题可以在它们的清单中定义额外的变量。
可用的规则
以下总结了各种规则类型。
规则
<rules> ... </rules>
包含一组规则。必须用作规则文件的根元素。嵌套的<rules />可以使用条件来对一组规则应用单个条件。
当用作规则文件的根元素时,必须声明各种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 和 notheme
<theme href="theme.html" /> <theme href="news.html" if-path="/news" /> <notheme if="$host = 'admin.example.org'" />
选择要使用的主题文件。href是相对于规则文件的路径。如果有多个<theme />元素,最多可以有一个没有条件。第一个条件为真的主题将被使用,如果没有条件,则使用无条件主题作为后备。
<notheme />可以用来指定不使用主题的条件。<notheme />优先于<theme />。
提示:为了确保您不会意外地样式化非Plone页面,请将条件如css:if-content="#visual-portal-wrapper"添加到最后一个主题中,并且不要有任何无条件主题。
replace
<replace css:content="#content" css:theme="#main" />
用内容中匹配的元素替换主题中匹配的元素。
before 和 after
<before css:content-children="#portal-column-one" css:theme-children="#portlets" /> <after css:content-children="#portal-column-two" css:theme-children="#portlets" />
在主题中匹配的元素之前或之后插入内容中匹配的元素。通过使用theme-children,您可以将匹配的内容元素作为匹配的主题元素内部的第一(前置)或最后一个(后置)元素插入。
drop 和 strip
<drop css:content=".documentByLine" /> <drop theme="/head/link" /> <drop css:theme="#content *" attributes="onclick onmouseup" /> <strip css:content="#parent-fieldname-text" />
从主题或内容中删除元素。注意,与其他大多数规则不同,<drop />或<strip />规则可以操作主题或内容,但不能同时操作。 <drop />删除匹配的元素及其所有子元素,而<strip />删除匹配的元素,但保留任何子元素。
<drop />可以指定一个空格分隔的属性列表以丢弃。在这种情况下,匹配的元素本身不会被删除。使用attributes="*"丢弃所有属性。
merge 和 copy
<merge attributes="class" css:content="body" css:theme="body" /> <copy attributes="class" css:content="#content" css:theme="#main" />
这些规则操作属性。<merge />将主题中命名属性的内容添加到内容中具有相同名称的现有属性的值中,并用空格分隔。它主要用于合并CSS类。
<copy />将内容中匹配的元素上的属性复制到主题中匹配的元素上,完全替换主题中可能已经存在的具有相同名称的属性。
attributes属性可以包含一个空格分隔的属性列表,或特殊值*以操作匹配元素的所有属性。
高级修改
您可以直接将标记放入规则文件中,作为相关规则元素的子节点,而不是从内容中选择标记插入到主题中。
<after css:theme="head"> <style type="text/css"> body > h1 { color: red; } </style> </after>
这也可以在内容上工作,允许您在应用任何规则之前即时修改它。
<replace css:content="#portal-searchbox input.searchButton"> <button type="submit"> <img src="images/search.png" alt="Search" /> </button> </replace>
除了以这种方式包含静态HTML之外,您还可以使用操作内容的XSLT指令。您甚至可以直接在XSLT中使用css:选择器。
<replace css:theme="#details"> <dl id="details"> <xsl:for-each css:select="table#details > tr"> <dt><xsl:copy-of select="td[1]/text()"/></dt> <dd><xsl:copy-of select="td[2]/node()"/></dd> </xsl:for-each> </dl> </replace>
通过使用href属性指定相对于Plone网站根的资源的路径,规则可以操作从当前由Plone渲染的页面以外的位置获取的内容。
<!-- Pull in extra navigation from a browser view on the Plone site root --> <after css:theme-children="#leftnav" css:content=".navitem" href="/@@extra-nav" />
主题参数
您可以将任意参数传递给您的主题,这些参数可以作为XPath表达式中的变量引用。可以在Plone的主题控制面板中设置参数,并可以从manifest.cfg文件导入。
例如,您可以设置一个参数 mode,它可以设置为字符串 live 或 test。在您的规则中,您可以执行如下操作,在测试服务器上插入警告
<before css:theme-children="body" if="$mode = 'test'"> <span class="warning">Warning: This is the test server</span> </before>
您甚至可以直接使用参数值,例如
<before css:theme-children="body"> <span class="info">This is the <xsl:value-of select="$mode" /> server</span> </before>
以下参数始终可用于 Plone 主题
- 方案
入站 URL 的方案部分,通常是 http 或 https。
- 主机
入站 URL 中的主机名。
- 路径
入站 URL 的路径部分。它将不包括任何虚拟主机标记,即这是最终用户看到的路径。
- 基础
Zope 基础 URL(BASE1 请求变量)。
您可以通过控制面板使用 TALES 表达式添加其他参数。参数在 高级 选项卡上按行列出,形式为 <name> = <expression>。
例如,如果您想避免对 Plone 的覆盖加载的页面进行主题化,可以使用它们设置的 ajax_load 请求参数。您的规则文件可能包括
<notheme if="$ajax_load" />
要将此参数以及前面概述的 mode 参数添加到控制面板中,您可以在控制面板中添加以下内容
ajax_load = python: request.form.get('ajax_load') mode = string: test
右侧是一个 TALES 表达式。它 必须 评估为字符串、整数、浮点数、布尔值或 None:不支持列表、字典和对象。《span class="docutils literal">python:》、《span class="docutils literal">string:》和路径表达式在 Zope 页面模板中按原样工作。
构建这些 TALES 表达式时,以下变量是可用的
- 上下文
当前请求的上下文,通常是内容对象。
- 请求
当前请求。
- 门户
门户根对象。
- 上下文状态
@@plone_context_state 视图,您可以从中查找上下文 URL 或默认视图等附加值。
- 门户状态
@@plone_portal_state 视图,您可以从中查找导航根 URL 或当前用户是否已登录等附加值。
有关 @@plone_context_state 和 @@plone_portal_state 视图的详细信息,请参阅 plone.app.layout。
主题参数通常是主题的一部分,因此当主题被导入或启用时,将根据主题的清单设置。这是通过在 manifest.cfg 文件中的 [theme:parameters] 部分完成的。例如
[theme] title = My theme description = A test theme [theme:parameters] ajax_load = python: request.form.get('ajax_load') mode = string: test
主题调试
当 Zope 处于开发模式(例如,在控制台中运行 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
在非开发模式下,此参数将被忽略。
常用规则
以下食谱说明了在构建 Plone 主题时常用的规则
要复制页面标题
<replace css:theme="title" css:content="title" />
要复制 <base /> 标记(对于 Plone 链接的正常工作是必需的)
<replace css:theme="base" css:content="base" />
如果主题中没有 <base /> 标签,您可以这样做:
<before css:theme-children="head" css:content="base" />
从主题中删除所有样式和JavaScript资源,并从Plone的 portal_css 工具中复制它们
<!-- Drop styles in the head - these are added back by including them from Plone --> <drop theme="/html/head/link" /> <drop theme="/html/head/style" /> <!-- Pull in Plone CSS --> <after theme-children="/html/head" content="/html/head/link | /html/head/style" />
复制Plone的JavaScript资源
<!-- Pull in Plone CSS --> <after theme-children="/html/head" content="/html/head/script" />
复制 <body /> 标签的类(这对于某些Plone JavaScript函数和样式正常工作是必要的)
<!-- Body --> <merge attributes="class" css:theme="body" css:content="body" />
高级:使用portal_css管理CSS
Plone的“资源注册”,包括 portal_css 工具,可以用来管理CSS样式表。这比在模板中简单地链接到样式表有以下几个优点:
详细控制样式表的顺序
合并样式表以减少渲染页面所需的下载次数
即时样式表压缩(例如,删除空白字符)
基于表达式包含或排除样式表的能力
通常希望(有时完全必要)不修改主题文件,但您仍然可以使用 portal_css 来管理您的样式表。关键是:
将主题的样式注册到Plone的 portal_css 工具中(通常最好在将主题打包到Python包时这样做 - 目前没有自动化导入Zip文件或通过网页创建的主题的方法)
使用规则删除主题的样式,然后
包含所有来自Plone的样式
例如,您可以添加以下规则
<drop theme="/html/head/link" /> <drop theme="/html/head/style" /> <!-- Pull in Plone CSS --> <after theme-children="/html/head" content="/html/head/link | /html/head/style" />
在 after /> 规则中的“或”表达式用于内容意味着链接和样式元素的相对顺序保持不变。
要使用GenericSetup在产品安装时注册样式表,请使用GenericSetup profiles/default 目录中的 cssregistry.xml 导入步骤
<?xml version="1.0"?> <object name="portal_css"> <!-- Set conditions on stylesheets we don't want to pull in --> <stylesheet expression="not:request/HTTP_X_THEME_ENABLED | nothing" id="public.css" /> <!-- Add new stylesheets --> <stylesheet title="" authenticated="False" cacheable="True" compression="safe" conditionalcomment="" cookable="True" enabled="on" expression="request/HTTP_X_THEME_ENABLED | nothing" id="++theme++my.theme/css/styles.css" media="" rel="stylesheet" rendering="link" applyPrefix="True" /> </object>
然而,有一个重要的注意事项。您的样式表可能包含以下形式的相对URL引用
background-image: url(../images/bg.jpg);
如果您的样式表位于资源目录中(例如,它已注册在 portal_css 中,ID为 ++theme++my.theme/css/styles.css),只要注册(和Zope)处于调试模式,这将正常工作。相对URL将由浏览器解析为 ++theme++my.theme/images/bg.jpg。
但是,您可能会发现当注册被置于生产模式时,相对URL会中断。这是因为资源合并也会更改样式表的URL,变成类似以下的形式:
/plone-site/portal_css/Suburst+Theme/merged-cachekey-1234.css
为了纠正这个问题,您必须在安装CSS资源时将 applyPrefix 标志设置为 true 使用 cssregistry.xml。在 portal_css 用户界面中也有相应的标志。
有时在风格化的网站上显示一些Plone的CSS很有用。您可以通过使用Diazo <after /> 规则或类似的方法将Plone生成的 <head /> 中的CSS复制到主题中来实现这一点。您可以使用 portal_css 工具来关闭您不想要的样式表。
但是,如果您还希望站点在非主题模式下(例如,在单独的URL上)可用,那么在Diazo不使用时,您可能希望启用一组更大的样式。为了使这更容易,您可以在 portal_css 工具(如果相关,还包括 portal_javascripts),在 portal_actions,页面模板和其他使用TAL表达式语法的地方使用以下表达式作为条件
request/HTTP_X_THEME_ENABLED | nothing
此表达式将在当前启用Diazo时返回True,在这种情况下,将设置HTTP头“X-Theme-Enabled”。
如果您后来将主题部署到如nginx的前端Web服务器,您可以在那里设置相同的请求头以获得相同的效果,即使未安装 plone.app.theming。
使用
not: request/HTTP_X_THEME_ENABLED | nothing
隐藏主题网站的样式表。
高级:通过设置X-Theme-Disabled头禁用diazo转换
如果响应头 X-Theme-Disabled 被设置,则不会应用 diazo 转换。
在浏览器视图中,可以通过以下指令设置头信息
self.request.response.setHeader('X-Theme-Disabled', '1')
这是一个完整的示例
class NoDiazoView(BrowserView): def __call__(self): self.request.response.setHeader('X-Theme-Disabled', '1') return super(NoDiazoView).__call__()
变更日志
5.0.10 (2024-09-05)
内部
对通过 X-Theme-Disabled 禁用 Diazo 主题的微小优化。 [thet] (#244)
5.0.9 (2024-05-06)
错误修复
修复了与 lxml 5 相关的 unicode 字符问题 [ale-rt] (#238)
5.0.8 (2024-04-22)
错误修复
从导航根再次遍历到主题资源。只有当这导致未经授权时,才在门户上尝试作为后备。这修复了主题中遍历到绝对 URL 的其他用例。 [maurits] (#236)
5.0.7 (2024-01-18)
错误修复
从门户遍历到主题资源。修复了渲染包含在不可访问导航根中的可访问内容的主题损坏问题。修复 #142 [pbauer] (#142)
5.0.6 (2023-12-14)
错误修复
修复了 custom.css 中的 AttributeError:“模块‘wsgiref’没有属性‘handlers’”。 [maurits] (#230)
5.0.5 (2023-10-07)
内部
更新配置文件。 [plone devs] (cfffba8c)
5.0.4 (2023-06-22)
错误修复
统一翻译的默认值 [erral] (#223)
5.0.3 (2023-04-06)
错误修复
修复了 pat-code-editor 的主题。 [petschki] (#219)
5.0.2 (2023-03-22)
错误修复
修复了 ZCML 层面上对 Products.CMFPlone 的循环依赖:将权限 id=`plone.app.controlpanel.Themes` 标题=`Plone 网站设置:主题` 移动到该包。 [jensens] (permission-move)
内部
更新配置文件。 [plone devs] (80cf330f)
5.0.1 (2023-03-14)
错误修复
从 plone.base 导入更多内容。删除了 Python 2 和 Zope 4 的兼容性代码。 [maurits] (#1)
错误修复:如果没有在主题中提供 rules.xml,则提前终止转换。否则,如果给定的文件是可迭代的,则在此函数之后,读取缓冲区指针为空,但返回 None。新的方法不会触摸读取缓冲区指针。 [jensens, toalba] (#216)
5.0.0 (2022-12-02)
错误修复
Plone 6.0.0 的最终版本。 (#600)
5.0.0b2 (2022-10-11)
错误修复
修复了在复制主题时对 tinymce-styles-css 的修复。 [petschki] (#214)
5.0.0b1 (2022-08-31)
错误修复
主题控制面板中的操作按钮已得到改进 [rohnsha0] (#212)
5.0.0a5 (2022-04-04)
新功能
在主题控制面板中禁用复制按钮和模态框。 [MrTango] (#205)
在主题控制面板中加载 barceloneta css 以进行样式化。 [MrTango] (#205)
从主题控制面板中删除所有 thememapper 功能,包括检查/修改主题和预览。 [maurits] (#205)
在自定义 css 字段中使用 pat-code-editor。 [MrTango] (#205)
5.0.0a4 (2021-11-23)
错误修复
添加缺失的 i18n:translate 标签 [erral] (#204)
5.0.0a3 (2021-10-13)
错误修复
使用 HTML5 meta charset。 [thet] (#203)
5.0.0a2 (2021-09-15)
错误修复
修复了读取 manifest.cfg 时未关闭的文件 [petschki] (#199)
删除了与 Products.CMFPlone 的循环依赖 [sneridagh] (#201)
5.0.0a1 (2021-07-26)
重大变更
从 Plone 6 中添加了来自 resolver 的 bootstrap 图标。 [petschki, agitator] (#194)
错误修复
通过 lxml 解析器避免服务器端请求伪造。来自 PloneHotfix20210518。 [maurits] (#3274)
4.1.6 (2020-11-17)
错误修复
为了提高安全性,当尝试在 diazo 规则中通过文件协议访问时失败。也不要解析实体,并删除处理指令。 [maurits] (#3209)
4.1.5 (2020-09-26)
错误修复
修复了 Zope 5 上 hostnameBlackList 的 WrongContainedType。另请参阅 问题 183。 [maurits] (#183)
修复了 ConfigParser.readfp 的弃用警告。 [maurits] (#3130)
4.1.4 (2020-08-14)
错误修复
修复了缺失的导入 [ale-rt] (#188)
4.1.3 (2020-07-30)
错误修复
修复了 #187:对 plone.app.caching 的无效依赖 [jensens] (#187)
清理:删除同时未使用的测试固定代码,该代码引用 plone.app.caching。删除了类和固定值:ThemingWithCaching、THEMINGWITHCACHING_FIXTURE、THEMINGWITHCACHING_TESTING。这些在 Plone 中以及在外部 GitHub 上都没有被积极使用。 [jensens] (#188)
4.1.2 (2020-07-01)
错误修复
国际化自定义CSS占位符。这解决了https://github.com/plone/Products.CMFPlone/issues/3139 [vincentfretin] (#186)
4.1.1 (2020-06-24)
错误修复
修复与新的自定义CSS功能相关的新消息的国际化。[vincentfretin] (#185)
4.1.0 (2020-06-16)
新功能
不使用规则插入diazo包。[santonelli] (#176)
将自定义CSS设置和视图添加到主题控制面板中。依赖于https://github.com/plone/Products.CMFPlone/pull/3089 [MrTango] (#178)
错误修复
4.0.6 (2020-04-20)
错误修复
较小的打包更新。(#1)
4.0.5 (2020-03-13)
错误修复
不要调用processInputs。自Zope 4以来,它不是必需的,并且Zope 5中不存在。[maurits] (#171)
4.0.4 (2019-12-11)
错误修复
修复使用Zope 4.1.3在py2中创建新的ttw主题。[pbauer] (#166)
4.0.3 (2019-10-12)
错误修复
加载plone.resource的zcml,用于我们使用plone:static指令。[maurits] (#2952)
4.0.2 (2019-09-13)
错误修复
修复Python3 TypeError: 'filter'对象不可索引。这发生在用TTW版本覆盖文件系统主题时。[fredvd] (#160)
4.0.1 (2019-02-14)
错误修复
修复py3中的skinname-encoding(修复https://github.com/plone/Products.CMFPlone/issues/2748)[pbauer] (#2748)
4.0.0 (2019-02-13)
重大变更
将所有静态资源因子化到plone.staticresources中,作为PLIP 1653的一部分。[thet, sunew] (#149)
错误修复
a11y:为portalMessage添加了角色属性。[nzambello] (#151)
修复了Python 3中的关于SafeConfigParser类的DeprecationWarning。[maurits] (#152)
修复了测试中未关闭文件的资源警告。[maurits] (#154)
修复了“RuntimeError:在迭代期间字典大小更改” [jensens] (#156)
3.0.1 (2018-12-11)
重大变更
移除five.globalrequest依赖。它已被上游(Zope 4)弃用。[gforcada]
3.0.0 (2018-11-02)
新功能
使用最新的mockup重新编译资源包。[sunew]
错误修复
为控制面板显式加载权限。[jensens]
修复了合并plone.login后的测试。[jensens]
更多Python 3修复[ale-rt, pbauer, davisagli]
2.0.3 (2018-04-04)
错误修复
添加了一个失败的(5.1)测试,该测试在主题编辑器中测试文件上传,当安装plone.rest时会导致问题。修复在https://github.com/plone/plone.rest/issues/59 [djay]
2.0.2 (2018-02-04)
错误修复
删除对不存在的示例主题的提及 [tkimnguyen]
为Python 2/3兼容性做准备 [pbauer, ale-rt]
2.0.1 (2017-07-03)
错误修复
移除unittest2依赖 [kakshay21]
2.0 (2017-05-24)
重大变更
让主题映射器的模式配置以JSON格式存在。修复了主题映射器与最新的patternslib(2.1.0)一起工作的问题。[thet]
错误修复
修复主题映射器模式处理按钮的问题(通过mockup更新)。更新主题映射器包。[thet]
1.3.6 (2017-03-28)
错误修复
将主题策略缓存的日志级别降低到“调试”。[jensens]
1.3.5 (2017-02-12)
错误修复
修复从 Globals导入的导入,它在Zope4中被删除了 [pbauer]
不再修补控制面板内部,因为它在Zope4中被删除了 [MatthewWilkes]
文档的reST语法、风格指南、措辞和行长度 [svx]
1.3.4 (2016-12-30)
错误修复
当设置DIAZO_ALWAYS_CACHE_RULES时,使diazo.debug再次工作。[ale-rt]
1.3.3 (2016-12-02)
错误修复
移除roman猴子补丁。[gforcada]
1.3.2 (2016-09-23)
新功能
为主题控制面板添加了“更新”按钮,使其能够在不首先禁用主题的情况下重新加载修改后的主题清单。[datakurre]
1.3.1 (2016-09-07)
修复
通过使用模式类pat-formunloadalert而不是enableUnloadProtection来启用卸载保护。[thet]
在文档中进行小修复 [staeff]
修复了当用全局资源目录主题覆盖打包主题时,主题控制面板出现错误的问题 [datakurre]
1.3.0 (2016-06-07)
新
通过环境变量 DIAZO_ALWAYS_CACHE_RULES [ale-rt] 在开发模式下控制主题编译。
修复
对文档进行小修复 [ale-rt]
1.2.19 (2016-03-31)
新
对于主题控制面板,将基本URL从门户URL更改为getSite返回的URL,但不要更改控制面板的上下文绑定。这允许在配置时在具有本地注册表的子站点上具有更大的灵活性。[thet]
1.2.18 (2016-03-03)
修复
修复了HTML验证:元素nav不需要role属性。[maurits]
处理在主题控制面板中显示错误主题的情况[vangheem]
1.2.17 (2016-02-11)
新
记录如何通过设置 X-Theme-Disabled 标头来禁用diazo转换。[ale-rt]
修复
重新构建资源,以便与最新的mockup/patternslib集成更改一起使用。[vangheem]
在thememapper中删除了github依赖项。[Gagaro]
1.2.16 (2015-11-26)
修复
更新了所有控制面板中的站点设置链接。修复了https://github.com/plone/Products.CMFPlone/issues/1255 [davilima6]
1.2.15 (2015-10-28)
修复
当没有设置时(例如,从Plone 3迁移到Plone 5时),在isThemeEnabled中不要失败,也许在其他情况下也是如此。[maurits]
修复了复制到多字节标题/描述时的Unicode编码错误[terapyon]
1.2.14 (2015-09-27)
修复了mapper.pt中的i18n问题[vincentfretin]
1.2.13 (2015-09-20)
从配置注册表中提取mark_special_links、external_links_open_new_window值。[esteele]
修复了Safari上的视觉错误[davilima6]
在主题列表的顶部显示活动主题。修复了https://github.com/plone/plone.app.theming/issues/70 [tmassman]
1.2.12 (2015-09-15)
删除了捆绑的twitter bootstrap主题‘example’。修复了https://github.com/plone/Products.CMFPlone/issues/877 [pbauer]
删除了主题控制面板删除模态的重复type属性[esteele]
1.2.11 (2015-09-11)
从复制的主题中重写manifest,同时包含相对路径[vangheem]
1.2.10 (2015-09-08)
修复了在保存文件时偶尔出现的主题映射器异常行为[swartz]
1.2.9 (2015-08-22)
构建thememapper资源[vangheem]
添加了缓存失效选项[swartz]
1.2.8 (2015-08-20)
将链接从plone.org更改为plone.com[tkimnguyen]
修复了控制面板上的工具栏问题[vangheem]
修复了less构建[obct537]
修复了具有点名的主题的复制模态[Gagaro]
1.2.7 (2015-07-18)
为主题控制面板、less构建和完成实现提供更好的样式[obct537]
确保在复制主题时尝试修改基本URL以匹配新主题的所有manifest.cfg设置[vangheem]
实现了可切换的主题策略API,重新实现了主题缓存[gyst]
修复了复制主题的配置[vmaksymiv]
实现了主题管理器的上传功能[schwartz]
将配置小部件的类别更改为‘plone-general’[sneridagh]
1.2.6 (2015-06-05)
删除了无关的主题重命名代码[schwartz]
文件系统主题现在被正确覆盖。TTW主题不能再被覆盖[schwartz]
重新添加了manifest检查[schwartz]
修复了getTheme方法的错误[schwartz]
对文档进行了较小的ReStructuredText修复[maurits]
1.2.5 (2015-05-13)
通过将manifest中的一些示例行恢复到PyPI上的RestructuredText表示来修复错误[maurits]
1.2.4 (2015-05-12)
为自动检测的tinymce样式添加了设置[vangheem]
1.2.3 (2015-05-04)
修复了当结果不是html或为空时 AttributeError: ‘NoneType’ object has no attribute ‘getroottree’ 的问题[sunew]
使控制面板再次可用。修复了皮肤控制面板不再存在的问题[vangheem]
统一了不同的getTheme函数[jensens]
pep8化,家务管理,清理[jensens]
在controlpanel.pt中指定i18n:domain[vincentfretin]
将pat-modal模式重命名为pat-plone-modal[jcbrand]
修复了在调用插件之前加载插件设置的问题,在调用onEnabled插件时使用正确的参数[datakurre]
1.2.2 (2015-03-22)
仅针对可用的ZMI页面修补ZMI。[thet]
将过时的导入 zope.site.hooks.getSite 改为 zope.component.hooks.getSite。 [thet]
如果子请求失败(可能是相对的 xi:include),添加错误日志,而不是静默返回 None(这样 xi:include 就不会返回任何内容)。 [vincentfretin]
修复转换,使其在禁用主题时不会影响结果 [datakurre]
集成 thememapper 模拟图案并修复主题控制面板以提高可用性 [ebrehault]
1.2.1 (2014-10-23)
从模板中删除 portal 消息中的 DL。 https://github.com/plone/Products.CMFPlone/issues/153 [khink]
修复控制面板上的“权限不足”问题,针对“站点管理员”。 [@rpatterson]
添加 IThemeAppliedEvent [vangheem]
将主题放入单独的 zcml 文件中,以便能够排除它们 [laulaz]
#14107 类似 /widget/oauth_login/info.txt 的 bot 请求导致在 plone.app.theming 中查找正确上下文时出现问题 [anthonygerrard]
添加了对 ++theme++ 的支持,以便遍历当前激活主题的内容。 [bosim]
1.2.0 (2014-03-02)
禁用 manage_shutdown 视图的主题。 [davisagli]
修复对主题错误模板的引用 [afrepues]
在控制面板中添加“测试样式”按钮以暴露和测试渲染模板。 [runyaga]
1.1.1 (2013-05-23)
修复了 i18n 问题。 [thomasdesvenain]
修复了 i18n 问题。 [jianaijun]
这修复了在 manifest.cfg 文件中主题标题为非 ASCII 字符时出现的 UnicodeDecodeError。 [jianaijun]
1.1 (2013-04-06)
修复了 i18n 问题。 [vincentfretin]
使模板主题做它所说的:复制样式和脚本。 [smcmahon]
更改示例主题的标签和说明,以提供有用信息。 [smcmahon]
从 1.0 升级获得在 1.1a1 中添加的合并“主题”控制面板。 [danjacka]
1.1b2 (2013-01-01)
确保主机黑名单利用 SERVER_URL 正确确定托管在任何深度的子文件夹中的站点的域名。 [davidjb]
添加测试,关于使用 GZIP 压缩匿名用户时 plone.app.theming / plone.app.caching 集成 [ebrehault]
1.1b1 (2012-10-16)
添加 diazo.debug 选项,将所有错误日志输出通过此选项路由,以便显示调试信息 [lentinj]
使基于 Bootstrap 的示例主题使用 HTML5 DOCTYPE。 [danjacka]
将 ZMI 补丁日志消息降级为调试级别。 [hannosch]
通过 plone.resourceeditor 升级到 ACE 1.0。 [optilude]
在 jQuery 属性选择器值周围放置引号,以满足 jQuery 1.7.2 的要求。 [danjacka]
1.1a2 (2012-08-30)
使用特定权限保护控制面板,以便可以委派。 [davisagli]
建议在 manifest.cfg 中将 ajax_load 定义为 request.form.get('ajax_load')。例如,login_form 有一个隐藏的空 ajax_load 输入,在提交表单后会得到一个不带主题的页面。 [maurits]
将主题编辑页面模板更改为主_template 而不是 prefs_main_template,以避免在 plonetheme.classic 下太早插入 CSS 和 JavaScript。 [danjacka]
1.1a1 (2012-08-08)
将“主题”控制面板替换为重命名的“主题化”控制面板,该面板在其“高级”选项卡下包含以前的设置。 [optilude]
添加完整的在 Plone 中创建主题的环境 [optilude, vangheem]
更新 IBeforeTraverseEvent 导入为 zope.traversing。 [hannosch]
在“管理主题”选项卡中,更改表头以更好地描述实际列出内容。 [kleist]
1.0 (2012-04-15)
防止当 getRequest 返回 None 时出现 AttributeError。 [maurits]
针对导航根而不是门户计算子请求。 [elro]
为 404 页面提供找到的最接近上下文。 [elro]
使用正确上下文查找门户状态。 [elro]
1.0b9 - 2011-11-02
修复 App.Management.Navigation 以禁用 ZMI 页面的主题化。 [elro]
1.0b8 - 2011-07-04
无论是否有有效上下文,都评估主题参数(例如,当模板化 404 页面时)。 [lentinj]
1.0b7 - 2011-06-12
将视图和覆盖插件移至独立的包中 plone.app.themingplugins。如果您想使用这些功能,需要在您的构建中安装该包。在没有安装 plone.app.themingplugins 的环境中尝试注册视图或覆盖的主题将安装,但视图和覆盖将不会生效。[optilude]
1.0b6 - 2011-06-08
支持设置任意文档类型。[elro]
升级步骤以更新 plone.app.registry 配置。[elro]
修复应用主题时的插件初始化。[maurits]
使用“currentTheme”名称而不是主题对象查询资源目录(更新控制面板已损坏)。[maurits]
修复 zip 导入(插件初始化已损坏。)[elro]
1.0b5 - 2011-05-29
通过设置 X-Theme-Disabled 响应头,确保控制面板永远不会被主题化。[optilude]
添加从 Zope 页面模板注册新视图和覆盖现有模板的支持。有关更多详细信息,请参阅 README。[optilude]
1.0b4 - 2011-05-24
添加支持 X-Theme-Disabled 响应头。[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
将内部子请求(css 或 js)包装在 style 或 script 标签中,以便方便地使用内联包含。[elro]
添加 theme.xml 导入步骤(请参阅 README)。[optilude]
添加对 manifest.cfg 中的 [theme:parameters] 部分(请参阅 README)的支持,可以用来设置参数和计算它们的相应 TALES 表达式。[optilude]
添加基于 TALES 表达式的参数表达式支持。[optilude]
使用 plone.subrequest 1.6 功能与 plone.resource 中的 IStreamIterator 一起工作。[elro]
依赖 Products.CMFPlone 而不是 Plone。[elro]
添加支持将主题作为 Zip 存档上传。[optilude]
添加主题关闭开关:在 Zope 处于开发模式时,向请求中添加查询字符串参数 diazo.off=1 以关闭主题。[optilude]
删除“主题”和替代主题支持:应使用 Diazo 规则文件中的 <theme /> 指令来引用主题。[optilude]
删除“域”支持:这可以通过使用规则文件语法处理 host 参数来实现。[optilude]
删除“notHEME”支持:这可以通过使用规则文件语法中的 path 参数来处理。[optilude]
将 path 和 host 作为 Diazo 规则文件的参数。现在可以将它们用作条件表达式。[optilude]
删除对 XDV 的依赖,转而依赖 Diazo(XDV 的新名称)。[optilude]
从 collective.xdv 1.0rc11 分叉。[optilude]
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。
源分发
构建分发
plone.app.theming-5.0.10-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 76d0c4acd6369fcca8c69ee2bd09f58d90d4415ffb9eb9aef8b5e3d8310739df |
|
MD5 | b2ac2d83e70d41fa2489fe87cce2bf04 |
|
BLAKE2b-256 | 9332ee38cf7852693d8c1e7314506f779ac76b54504255f13fabbe177f3eef2c |