跳转到主要内容

plone.app.theming的主题片段

项目描述

https://secure.travis-ci.org/datakurre/collective.themefragments.png

Diazo规则可以在使用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"
    />

href属性可以与任何规则一起使用,除了<strip />之外,并且可以引用任何URL,例如指向为您的网站配置的现有浏览器视图。然而,通常希望生成一些特定于构建特定主题的动态内容。在这种情况下,您可以使用片段

片段模板

碎片是与您的主题捆绑在一起的 Zope 页面模板文件。您可以通过在主题资源目录(即包含 rules.xml 的目录)中添加一个名为 fragments 的文件夹来创建它们,无论是通过 Web 还是文件系统,然后在该目录中创建一个或多个扩展名为 .pt 的文件。

例如,您可以在主题目录中创建一个名为 fragments/customnav.pt 的文件,包含以下内容:

<ul id="nav">
  <li tal:repeat="item context/@@folderListing">
    <img tal:replace="structure item/getIcon" />
    <span tal:replace="item/Title" tal:attributes="titile item/Description">Title</span>
  </li>
</ul>

这使用 Zope 页面模板 TAL 语法(如果您在文件系统 Python 开发中使用,可能会用到的相同语法)来根据当前上下文可用的属性和辅助视图生成一些标记。

以下变量可用于用于构建碎片的页面模板

上下文

查找碎片所在的上下文。这通常是门户根(当使用带有绝对路径的 href 时,即以 / 开头)或当前内容对象(当使用带有相对路径的 href 时)。

请求

用于渲染碎片的请求。当使用规则的 href 中的碎片时,这是一个用于渲染页面的请求的克隆,但路径是碎片视图而不是原始内容对象。请注意,原始请求中的表单参数在此请求中不可用。

门户

门户根对象。

portal_url

到门户根的 URL。

您可以在这里了解有关 Zope 页面模板语法的更多信息。

碎片模块

碎片模块是与您的主题捆绑在一起的受限 Python 脚本模块。方法的可用性通过使用碎片基本名称(带有 .py 扩展名)命名模块来限制。每个模块可以包含任意数量的 Python 函数定义,这些函数定义随后作为碎片视图的实例方法提供。

例如,您可以在主题目录中创建一个名为 fragments/customnav.py 的文件,包含以下内容:

def getnav(self):
    return [{
        'Title': u'My title',
        'Description': u'My description',
        'getIcon': 'document_icon.png'
    }]

然后在您的碎片 fragments/customnav.pt 中像调用视图方法一样调用它:

<ul id="nav">
  <li tal:repeat="item view/getnav">
    <img tal:replace="structure item/getIcon" />
    <span tal:replace="item/Title" tal:attributes="titile item/Description">Title</span>
  </li>
</ul>

碎片方法

碎片方法是与您的主题捆绑在一起的受限 Python 脚本文件。方法的可用性通过在方法文件名前缀碎片名称来限制。每个脚本应包含用于单个方法的代码,并以返回模板的值结束。

例如,您可以在主题目录中创建一个名为 fragments/customnav.getnav.py 的文件,包含以下内容:

return [{
    'Title': u'My title',
    'Description': u'My description',
    'getIcon': 'document_icon.png'
}]

然后在您的碎片 fragments/customnav.pt 中像调用视图方法一样调用它:

<ul id="nav">
  <li tal:repeat="item view/getnav">
    <img tal:replace="structure item/getIcon" />
    <span tal:replace="item/Title" tal:attributes="titile item/Description">Title</span>
  </li>
</ul>

以下变量可用于用于构建碎片的碎片方法

self

碎片视图,它提供对 self.contextself.request 和其他可用碎片方法的访问,类似于文件系统浏览器视图。

args

方法调用的位置参数列表。碎片方法不支持 Zope PythonScript 定义位置命名参数的方式。

kwargs

方法调用的关键字参数字典。碎片方法不支持 Zope PythonScript 定义命名关键字参数的方式。

上下文

查找碎片的上下文。这是对 Zope PythonScript 的致敬。

container

查找碎片的上下文的容器。这是对 Zope PythonScript 的致敬。

traverse_subpath

一个空字符串。这作为对Zope PythonScript的致敬。

渲染片段

特殊的 @@theme-fragment 视图用于渲染片段。在使用它之前,您可以直接在浏览器中通过访问类似以下URL来测试它:

https://#:8080/Plone/@@theme-fragment/customnav

这将导致在 fragments/customnav.pt 中的片段被渲染,其上下文是运行在 localhost:8080 上的 Plone 网站 Plone。您可以通过调整URL来渲染任何内容对象的相对片段。

注意:片段仅适用于当前活动的主题。以这种方式在浏览器中测试片段时,请确保已启用主题!

要在主题规则中使用片段,请使用带有绝对或相对路径的 href 属性。例如

<replace css:theme="#navlist" css:content="#nav" href="/@@theme-fragment/customnav" />

将替换主题中具有 id navlist 的元素,用由主题中的 fragments/customnav.pt 模板生成的具有 id nav 的元素替换,始终以门户根作为其 context(因为 href 使用的是绝对路径,即以 / 开头)。

同样

<replace css:theme="#navlist" css:content="#nav" href="@@theme-fragment/customnav" />

将执行相同的操作,但使用当前内容项作为其 context(即 href 使用的是相对路径)。

作为视图的片段

片段还可以用作内容视图,通过将内容对象的 layout-属性设置为 ++themefragment++name 来实现,其中 name 是片段的名称。目前,无法配置片段在显示菜单中可见。

注意:片段仅适用于当前活动的主题。以这种方式在内容中使用片段时,请确保已启用主题!

片段安全

与主题HTML模拟文件一样,片段默认情况下是公开可访问的。任何可以访问网站的人都可以构造一个包含 @@theme-fragment/<name> 的URL来渲染给定的片段。

或者,可以在主题的 manifest.cfg 中为每个瓷砖定义更严格的权限,其语法为

[theme:themefragments:permissions]
basename = zope2.View

然而,无论定义了什么权限,用于构建片段的页面模板都在所谓的 受限Python 环境中执行。这意味着它们以当前用户(或 匿名,如果当前用户未登录)的身份执行。无法访问的信息(如内容项或其属性)无法渲染,并且可能导致渲染片段时出现 403 禁止 错误。

片段瓷砖

安装了 plone.tilesplone.app.tilesplone.app.blocks 后,此包提供了一个额外的安装配置文件,用于 主题片段瓷砖,可以将其用于放置主题片段。

在主题的 manifest.cfg 中可以使用以下方式定义更易于阅读的主题片段标题:

[theme:themefragments:tiles]
basename = Display title

其中 basename 是片段文件名的基名(在 .pt 之前的部分)。

瓷砖可以定义其配置架构,使用具有与其匹配的文件名结尾为 .xml 而不是 .pt 的片段特定文件中的 plone.supermodel XML。

还可以在 manifest.cfg 中指定片段特定的缓存规则集:

[theme:themefragments:caching]
basename = plone.content.feed

变更日志

2.12 (2019-07-26)

  • 添加了对Python 3和Plone 5.2的支持。[pbauer]

2.11.1 (2017-10-30)

  • 修复了无法按照预期渲染带有 &_mode=head 查询参数的 themefragment 标题的问题 [datakurre]

2.11 (2017-10-18)

  • 为片段视图添加了 'macros' 访问器,以便访问和使用片段视图模板宏,例如在经典端口中 [datakurre]

2.10.2 (2017-09-24)

  • 修复了片段视图禁用了主题的问题 [datakurre]

2.10.1 (2017-09-13)

  • 修复了从标题中无法访问 tile id 和 url 的问题 [datakurre]

2.10.0 (2017-08-28)

  • 添加了 ++themefragment++name -traverser,允许直接将主题片段用作视图 [datakurre]

  • 为片段 tile 添加了片段 Python 模块支持 [datakurre]

2.9.0 (2017-08-28)

  • 添加了对片段 Python 模块的支持(作为 PEP8 兼容的单文件替换,用于之前版本中片段方法的支撑)[datakurre]

  • 更改模板所有者属性,使其属于其创建者,而不是从其渲染上下文中继承 [datakurre]

2.8.0 (2017-08-21)

  • 为 RichTextValue 对象添加了可遍历的 @@output_relative_to 辅助功能,以支持在受限模板中渲染富文本字段值 [datakurre]

2.7.1 (2017-06-13)

  • 修复了片段 tile URL 未包含所选片段本身的问题 [datakurre]

2.7.0 (2017-06-09)

  • 修复了添加表单无法使用请求中的片段名称的问题 [datakurre]

  • 修复了读取标题时无法过滤以 '#' 开头的注释的问题 [datakurre]

  • 移除了对主题片段 tile 持久性注释存储的不完整支持 [datakurre]

2.6.1 (2017-04-19)

  • 在选择缓存规则之前,从 tile 数据中读取片段名称的修复 [datakurre]

2.6.0 (2017-04-19)

  • 将片段 tile 更改为在选择配置的片段时,优先使用持久性配置而不是查询字符串配置 [datakurre]

2.5.2 (2017-02-27)

  • 修复了缺少 'fragment' 参数导致 AttributeError 的问题 [datakurre]

2.5.1 (2017-02-24)

  • 修复了默认缓存规则集查找失败阻止 tile 规则集查找的问题 [datakurre]

2.5.0 (2017-02-24)

  • 添加了对片段 tile 特定缓存规则集配置的支持 [datakurre]

2.4.0 (2017-02-03)

  • 添加基于 manifest.cfg 的配置,以设置每个片段的更严格权限 [datakurre]

2.3.1 (2017-02-02)

  • 修复了 ESI 标题渲染使用公共 URL 破坏其 HTTPS 的问题。通过在虚拟主机转换之前优先考虑真实请求路径来修复。 [datakurre]

2.3.0 (2017-01-30)

  • 添加了在 plone.app.blocks 中启用 ESI 渲染时,主题片段 tile 使用 ESI 渲染的功能;当 ESI 渲染启用时,所有主题片段 tile 都将被 ESI 渲染(可能在未来变得可配置)[datakurre]

2.2.0 (2017-01-25)

  • 添加了使用主题策略缓存缓存解析的 TTW tile 模式的功能 [datakurre]

2.1.0 (2017-01-24)

  • 添加了对 TTW XML 模式中的 fieldsest 的支持(需要 plone.app.tiles >= 3.1.0)[datakurre]

2.0.1 (2017-01-18)

  • 添加了可用于 TTW XML-schema tile 的通用目录源实例 [datakurre]

2.0.0 (2017-01-17)

  • 为片段 tile 表单添加了对片段特定小部件遍历的支持 [datakurre]

2.0.0rc5 (2016-12-16)

  • 为片段 tile 模式添加了最小权限字段检查器 [datakurre]

2.0.0rc4 (2016-12-15)

  • 修复了从 tile 菜单中隐藏标题为空的片段的问题 [datakurre]

2.0.0rc3 (2016-12-15)

  • 修复了从视图上下文遍历时片段无法渲染的问题 [datakurre]

2.0.0rc2 (2016-12-14)

  • 修复了片段未正确解码的问题 [datakurre]

2.0.0rc1 (2016-12-12)

  • 将主题片段 tile 升级到自定义方案,以支持 plone.app.blocks 4.0 中引入的布局感知 tile 数据存储 [datakurre]

1.1.0 (2016-12-12)

  • 重构片段 tile 源为片段 tile 词汇表,以修复与 Plone 5.1 的兼容性问题 [datakurre]

1.0.1 (2016-02-21)

  • 修复了 plone:tile 指令未正确包含的问题 [datakurre]

1.0.0 (2015-09-16)

  • 为 plone.app.mosaic 添加了片段 tile [datakurre]

0.10.0 (2015-04-03)

  • 添加了对受限 Python 视图方法(使用 fragments/templatename.methodname.py)的支持 [datakurre]

0.9.0 (2015-04-01)

  • 基于 Martin Aspeli 的被拒绝的 plone.app.theming 拉取请求的第一次发布。

项目详情


下载文件

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

源代码分发

collective.themefragments-2.12.tar.gz (23.0 kB 查看哈希值)

上传时间 源代码

由以下支持