Skip to main content

提供高级 plone.app.theming 集成的插件

项目描述

plone.app.theming支持插件,允许主题作者将更高级的功能与他们的主题捆绑在一起。这个包包含两个这样的插件:

  • 启用主题时覆盖特定 Zope 页面模板的能力

  • 启用主题时使用 Zope 页面模板注册提供自定义标记的视图的能力

这两个都只适用于分布在文件系统上的主题(在 Python 包中或在全局主题资源目录中),即不适用于通过网络在 ZIP 存档中导入的主题。也就是说,这些插件提供的功能更有可能用于构建“客户”站点(文件系统开发可能是常态)而不是分发通用主题(通过网络 ZIP 导入更具吸引力) )。

<nav class="contents" id="contents" role="doc-toc">

内容

</nav>

安装

即使未安装此软件包,依赖于下面描述的插件的主题仍然可以工作:插件配置将被忽略。

要启用这些插件,必须在构建中启用plone.app.themingplugins包。您可以通过以下两种方式之一实现此目的:

  • 通过在您的buildout.cfg文件中的 Zope 实例使用的鸡蛋列表中列出plone.app.themingplugins 。

  • 通过将plone.app.themingplugins添加到setup.py文件中的install_requires列表中,以获取安装在构建中的包,例如用于容纳主题或站点策略的包。

快速示例

假设您正在开发一个名为 my.theme 的重氮主题,请在激活重氮主题时执行以下操作以覆盖徽标视图:

  • plone.app.themingplugins添加到src/my.theme/setup.py中的install_requires列表

  • 要覆盖 logo viewlet,请将plone.app.layout.viewlets.logo.pt添加 到 src/my.theme/my/theme/theme/overrides 并根据需要进行修改。

插件

Diazo 主题通过转换 Plone(或其他系统)生成的内容来工作。只要输出需要的信息,几乎没有限制如何将其转换为主题输出。

但是,如果信息不存在,您将需要以某种方式提取它,通常是通过页面模板。这可以使用标准 Python 发行版中的视图来完成,但plone.app.themingplugins提供了两种简化的机制,只需要了解 TAL,即 Zope 页面模板的语法。

Zope 页面模板覆盖

在文件系统的资源目录中分发主题时,可以在启用主题时临时覆盖现有的 Zope 页面模板模板。如果您需要更改 Plone 在视图、viewlet 或其他基于模板的资源中提供的数据,这将很有用。

此功能依赖于z3c.jbot。要使用它,请将名为 overrides的目录添加到主题资源目录的根目录。在此目录中,您可以使用命名约定 <package>.<filename>.pt放置页面模板文件,以覆盖最初在 包<package>中的<filename>.pt中找到的模板。

例如,要覆盖plone.app.layout.viewlets中的logo.pt(位于plone.app.layout分布中的plone/app/layout/viewlets/logo.pt中 ),您可以将logo.pt复制到 覆盖中目录为plone.app.layout.viewlets.logo.pt。然后,您可以根据需要进行修改。

注意:模板在 Zope 启动时加载。在调试模式下,模板更改会即时反映,但您需要重新启动 Zope 以获取新模板。

如果需要,可以在主题的manifest.cfg文件中更改覆盖目录名称:

[theme:overrides]
directory = template-overrides

目录名称是相对于主题目录的。

从 Zope 页面模板注册新视图

在文件系统的资源目录中分发主题时,可以基于启用主题时可用的 Zope 页面模板注册新视图。

这对于基于 Plone 内容或设置生成额外的动态标记很有用,通常与主题规则上的href一起使用,例如生成自定义导航结构或其他一些动态内容。

注意:这种样式的视图注册不打算包含复杂的逻辑。对于更高级的用例,建议您创建 Python 发行版并注册标准浏览器视图。

要创建新视图,请将目录views添加到主题资源目录的根目录并在此处放置任意数量的*.pt文件。

例如,假设您在views目录中有一个文件custom-menu.pt ,其中包含(一个有点无聊的例子):

<ul id="menu">
    <li class="menuItem" tal:repeat="item context/values">
        <a tal:attributes="href item/absolute_url"
           tal:content="item/title_or_id"
           />
    </li>
</ul>

(变量contextrequest将在页面模板中正常工作。)

然后,您可以使用如下规则:

<replace css:theme="#menu" css:content="#menu" href="./@@custom-menu" />

这将在呈现custom-menu.pt模板的输出中将主题中的#menu替换为#menu 。

注意:如果您在未启用主题时调用@@custom-menu视图,您将收到404 NOT FOUND错误。这是因为视图已注册到为主题动态生成的浏览器层,并且仅在启用主题时才会自动应用。

默认情况下,视图名称是模板名称,减去.pt扩展名。该视图需要标准视图权限 ( zope2.View ),并且适用于所有上下文 ( for="*" )。

这些默认值可以通过将文件views.cfg放在 views目录中来覆盖。这应该包含每个模板一个部分,其中部分名称是模板名称减去.pt扩展名。每个部分中的有效选项是:

  • name,更改视图名称

  • 权限,赋予不同的权限名称

  • for , 改变视图的上下文

  • class,让视图重用现有的视图类

例如:

# for my-view.pt:
[my-view]
name = my-view-at-root
for = Products.CMFCore.interfaces.ISiteRoot
permission = cmf.ManagePortal
class = some.package.browser.MyView

所有选项都是可选的,views.cfg文件本身也是如此。

注意:模板在 Zope 启动时加载。在调试模式下,模板更改会即时反映,但您需要重新启动 Zope 以获取新模板。

如果需要,可以在主题的manifest.cfg文件中更改视图目录名称:

[theme:views]
directory = template-views

目录名称是相对于主题目录的。

变更日志

1.1 (2019-04-26)

  • Python 3 兼容,代码风格。[詹森]

1.0 (2015-08-20)

  • 修复视图插件设置的解析 [tlyng]

  • 快速示例部分添加到 REAMDE [djowett]

1.0b1

  • 初始版本从 plone.app.theming [optilude] 中分离出来

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

plone.app.themingplugins-1.1.tar.gz (20.2 kB 查看哈希

已上传 source