0

我正在尝试使用 tal 表达式修改我的 /portal_view_customizations/zope.interface.interface-plone.belowcontenttitle.documentbyline 模板,以便文档的作者和修改日期不显示当前门户类型是否为文档(页面) . 我不介意它是否显示对时间敏感的新闻项目,但不是文档/页面。

这是我失败的 Plone TAL 表达式:

<div class="documentByLine"
     id="plone-document-byline"
     i18n:domain="plone"
     tal:condition="view/show and not:python:here.portal_type == 'Document'"> 
...

我也试过:

<div class="documentByLine"
     id="plone-document-byline"
     i18n:domain="plone"
     tal:condition="view/show and not:context/portal_type='Document'">

但仍然没有运气。回溯非常神秘,与 TAL 表达式无关。但是,如果我摆脱了 portal_type 的条件,那么它会再次起作用。任何想法表示赞赏。手册会很好,但我看过官方的,他们没有提到这一点。

4

1 回答 1

2

TAL 使用的表达式引擎 TAL 的底层 TALES 不支持在一个表达式中混合表达式类型。它的语法只允许指定一种表达式类型(默认为“路径”,如果省略,顺便说一句),因为没有提供分隔符(例如用于在一个元素中链接多个 TAL 语句的分号,例如)。

但是,您可以使用一个 python 表达式,而不是混合三种表达式类型,尝试:

python: view.show and context.portal_type()!='Document'

更新:

如果您通过portal_view_customizations('TTW')自定义了Plone的默认模板,现在无法访问受限的python方法view/show,这'为什么会引发错误。

它返回allowAnonymousViewAbout站点属性的 -property,您也可以自己检查此条件,您的表达式如下所示:

tal:define="name user/getUserName" 
tal:condition="python:test(name!='Anonymous User') and context.portal_type()!='Document';

Quick'n'dirty 替代方案:

用 CSS 做:

body.userrole-anonymous .documentByLine {display:none}
body:not(.template-document_view) .documentByLine {display:block}

这将呈现隐藏的元素,但它有助于原型设计等,或“快速修复”(没有管理员可用等)。

于 2014-03-24T22:11:26.233 回答