用于管理CMF和Plone站点主题的工具
项目描述
概述
用于管理 CMF 和 Plone 网站的主题的工具。
plone.theme
此包允许您根据门户_skins 工具中当前选定的外观(主题)将“层”接口标记为请求。
大多数 Zope 3 “视觉”指令,如 <browser:page /> 或 <browser:viewlet /> 接受一个指向接口的‘层’属性。回想一下,视图是在(上下文,请求)上的多适配器。大多数视图都是注册的,以便被适配的‘请求’只需要提供接口。这相当于说 layer=”*”。
通过将标记接口应用于请求,并注册一个视图或小部件,其接口作为被适配的‘层’,我们可以覆盖一个更通用的视图,或者创建一个仅对特定层显示的小部件。
在 CMF 和 Plone 的上下文中,我们希望将层绑定到当前的外观选择。我们通过名称来实现这一点。
您需要做什么
首先,您应该创建一个标记接口
>>> from zope.interface import Interface >>> class IMyTheme(Interface): ... """Marker interface for skins part of 'My Theme' ... """
然后,在 ZCML 中将其注册为主题层
- <interface
interface=”.interfaces.IMyTheme” type=”zope.publisher.interfaces.browser.IBrowserSkinType” name=”My Theme” />
这里的标题必须与 portal_skins 中主题/外观选择的名称匹配。
工作原理
在幕后,<interface /> 注册将 IMyTheme 标记为“IThemelayer”的“IInterface”,并将 IMyTheme 注册为一个名为“My Theme”的实用工具,提供 IBrowserSkinType。
我们在 tests/tests.zcml 中进行了类似的操作。
让我们定义“我的主题”外观选择
>>> from Products.CMFCore.utils import getToolByName >>> portal_skins = getToolByName(layer['portal'], 'portal_skins') >>> default_skin = portal_skins.getDefaultSkin() >>> skin_path = portal_skins._getSelections()[default_skin] >>> portal_skins.addSkinSelection('My Theme', skin_path)
在 tests/tests.zcml 中,我们注册了两个 @@layer-test-view 视图的版本。一个用于默认外观层,简单地输出“默认”。另一个输出“我的主题”。
在我们打开外观之前,我们将获得默认视图。
>>> from plone.testing.z2 import Browser >>> browser = Browser(layer['app'])>>> browser.open(layer['portal'].absolute_url() + '/@@layer-test-view') >>> from __future__ import print_function >>> print(browser.contents) Default ...
然而,如果我们打开外观,我们应该看到标记接口应用的效果。
>>> portal_skins.default_skin = 'My Theme' >>> import transaction >>> transaction.commit()>>> browser.open(layer['portal'].absolute_url() + '/@@layer-test-view') >>> print(browser.contents) My Theme ...
如果我们切换回来
>>> portal_skins.default_skin = 'Plone Default' >>> transaction.commit()>>> browser.open(layer['portal'].absolute_url() + '/@@layer-test-view') >>> print(browser.contents) Default ...
变更日志
4.0.1 (2023-10-07)
内部
更新配置文件。[plone 开发者] (cfffba8c)
4.0.0 (2023-04-27)
破坏性更改
放弃对 Python 2 和 Plone 5.2 的支持。[gforcada] (#6)
内部
更新配置文件。[plone 开发者] (2a4ba395)
3.0.7 (2020-04-22)
错误修复
小包装更新。[#1]
3.0.6 (2018-06-20)
错误修复
在 Python 3 上运行测试。[ale-rt]
3.0.5 (2018-04-04)
错误修复
处理在 Zope4 中未获得外观名称的情况。[pbauer]
3.0.4 (2018-03-10)
错误修复
小的行政修复。[gforcada]
3.0.3 (2017-07-03)
错误修复
删除 unittest2 依赖项。[kakshay21]
3.0.2 (2017-02-05)
错误修复
修复使用 Zope 4 时的测试。[maurits]
3.0.1 (2016-11-17)
修复
删除 ZopeTestCase 跟踪。[gforcada]
3.0.0 (2015-06-10)
3.x 仅适用于 plone 5。[vangheem]
2.1.4 (2015-04-28)
删除对 CMFDefault 的依赖。[tomgross]
2.1.3 (2015-03-27)
测试层是测试层。[bloodbare]
2.1.2 (2015-03-21)
将测试从 PloneTestCase 移动到 plone.app.testing。[sdelcourt,timo]
2.1.1 (2014-03-02)
删除对 CMFDefault 的硬依赖。[davisagli]
2.1 - 2011-05-12
将 zope.traversing 中的 BeforeTraverseEvent 更新为从 zope.app.publication 导入。[davisagli]
添加 MANIFEST.in。[WouterVH]
2.0 - 2010-07-18
将许可证更新为仅适用于 GPL 版本 2。[hannosch]
2.0b2 - 2010-03-05
防止多次运行。这在使用 ++skin++ 遍历器或 VirtualHostMonster 时可能会发生。[wichert]
2.0b1 - 2010-01-02
修复我之前调整引入的错误。如果使用了扩展默认层的皮肤层(这是常见的),那么默认层最终会具有比未扩展默认层的浏览器层更高的优先级。[davisagli]
2.0a2 - 2009-11-13
再次从 CMFDefault 层继承,以与仅依赖于 CMF 但也可在 Plone 中使用的产品兼容,并将视图注册到 CMFDefault 层。[davisagli]
2.0a1 - 2009-04-05
避免从 CMFDefault 浏览器层继承,而是定义我们自己的。我们与 CMFDefault 层没有共同之处。[hannosch]
在额外中声明测试依赖项。[hannosch]
指定包依赖项。[hannosch]
1.1 - 2009-04-04
确保主题层比其他浏览器层具有更高的优先级。[davisagli]
1.0 - 2007-08-15
第一个稳定版本 [wichert]
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。