1

如何使用 tal 条件检查文件类型并在 Plone 4.1 中渲染模板

我的文件预览模板渲染取决于文件扩展名。如果文件扩展名是“pdf”,我希望使用这样的东西:(刚开始使用 TAL、TALES、METAL)

<tal:define="file_nm global string:${here/absolute_url}"
<tal:condition="file_nm.slice[-3:] = 'pdf'">

    <embed width="100%" height="100%" name="plug-in" tal:attributes="src string:${here/absolute_url}#" 
         draggable="false" onselectstart="false"  />

否则使用:(对于'pdf'以外的文件)

<IFRAME src="http://www.xyz.com" 
            tal:attributes="src string:${here/absolute_url}/rfpreview"
            ondragstart="false" onselectstart="false"
            width="100%" height="400" scrolling="auto" frameborder="0"></IFRAME>

有人可以指导我自定义视图的完整自定义代码片段:atreal.richfile.preview.interfaces.ipreview-atreal.richfile.preview.viewlet

4

1 回答 1

3

TAL 语句是现有标签的属性。您可以tal:使用命名空间前缀引入虚拟元素,但语句define仍然condition需要表示为属性。

此外,默认的 TALES 表达式类型是路径表达式,但您想使用 python 表达式。这很好,但您需要使用python:前缀指定它们。

最后但并非最不重要的一点是,除非绝对必须,否则不要使用global,这很少见。定义的名称存在于定义它们的 XML 元素的范围内,不需要存在于这些元素之外。

这是我表达逻辑的方式:

<tal:block define="ispdf python:here.absolute_url().endswith('.pdf')">

    <embed width="100%" height="100%" name="plug-in" 
         tal:condition="ispdf"
         tal:attributes="src string:${here/absolute_url}#" 
         draggable="false" onselectstart="false"  />

    <iframe src="http://www.xyz.com" 
         tal:condition="not:ispdf"
         tal:attributes="src string:${here/absolute_url}/rfpreview"
         ondragstart="false" onselectstart="false"
         width="100%" height="400" scrolling="auto" frameborder="0"></iframe>

</tal:block>

这引入了一个新<tal:block>元素来定义ispdf由 python 表达式确定的布尔变量。tal:condition然后,这两个变体由每个元素上的属性根据该值为True或来打开或关闭False

于 2012-09-04T10:01:37.127 回答