跳转到主要内容

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

项目描述

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

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

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

这两个功能 用于在文件系统上分发的主题(无论是Python包还是全局 themes 资源目录中的),即不适用于通过ZIP存档通过网页导入的主题。话虽如此,这些插件提供的功能在构建“客户”网站(文件系统开发可能是常态)方面可能比在分发通用主题(通过网页ZIP导入更具吸引力)更有用。

安装

依赖于以下插件的主题即使在未安装此包的情况下也能正常工作:插件配置将被简单地忽略。

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

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

  • 通过将 plone.app.themingplugins 添加到 setup.py 文件中的 install_requires 列表,该文件用于您 buildout 中安装的包,例如用于存放您的主题或站点的策略的包。

快速示例

假设您正在开发一个名为 my.theme 的 diazo 主题,当您的 diazo 主题被激活时,执行以下操作以覆盖 logo 视图:

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

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

插件

Diazo 主题通过转换由 Plone(或另一个系统)生成的内容来工作。只要输出要求信息,就可以几乎无限地将其转换为主题输出。

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

覆盖Zope页面模板

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

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

例如,要覆盖 plone.app.layout.viewlets 中的 logo.pt,该文件位于 plone/app/layout/viewlets/logo.pt 内的 plone.app.layout 发行版中,您需要将 logo.pt 复制到 overrides 目录中,命名为 plone.app.layout.viewlets.logo.pt。然后您可以根据需要修改它。

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

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

[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" />

这将用 #menu 模板中的 #menu 替换主题中的 #menu

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

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

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

  • name,用于更改视图名称

  • permission,用于提供不同的权限名称

  • 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 兼容,代码风格。 [jensens]

1.0 (2015-08-20)

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

  • 在 REAMDE 中添加了 快速示例 部分 [djowett]

1.0b1

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

项目详情


下载文件

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

源分发

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

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面