【问题标题】:Adapt a Macro for Plone to display nothing if specific folder does not exist?如果特定文件夹不存在,则为 Plone 调整宏以不显示任何内容?
【发布时间】:2013-10-09 14:00:22
【问题描述】:

我有一个用于 Plone 上的研究人员配置文件的宏,如果所需的文件夹不存在,我想对其进行调整以不显示任何内容。现在,如果“selected-publications”文件夹不存在,则会引发错误。如果“context/selected-publications/...”为空或不存在,是否可以使宏不显示任何内容?这是我到目前为止的代码:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" i18n:domain="RDSLocal">
 <body>

    <div id="publications" metal:define-macro="publications" tal:omit-tag="">
      <!--publications-->
<a href="selected-publications"><h2>Publications</h2></a>
<ul style="list-style: none; margin-left: 0px; margin-right: 0px;">

<tal:block tal:repeat="publication context/selected-publications/getFolderContents">
  <li><tal:block tal:content="publication/Authors"/> (<tal:block tal:content="publication/publication_year"/>) <a tal:attributes="href publication/getURL" tal:content="publication/Title"/></li><br />
</tal:block>

</ul>
</div>
  </body>
</html>

【问题讨论】:

    标签: python macros plone


    【解决方案1】:

    使用tal:definetal:condition 获取并检查出版物是否存在,然后再使用tal:repeat 遍历它们。将您的代码逐字作为基线:

    <div id="publications" metal:define-macro="publications" tal:omit-tag="">
      <!--publications-->
      <a href="selected-publications"><h2>Publications</h2></a>
      <ul style="list-style: none; margin-left: 0px; margin-right: 0px;"
          tal:define="publications nocall:context/selected-publications|nothing"
          tal:condition="publications">
    
        <tal:block tal:repeat="publication publications/getFolderContents">
          <li><tal:block tal:content="publication/Authors"/>
          (<tal:block tal:content="publication/publication_year"/>)
          <a tal:attributes="href publication/getURL"
          tal:content="publication/Title"/></li><br />
        </tal:block>
    
      </ul>
    </div>
    

    这是Zope templates 中的常用习语。如果您查看 Plone 的源代码,您会发现该技术示例的宝库。

    如果不存在任何出版物,也许您想隐藏H2?如果是这样,请将tal:definetal:condition 放在div 上。

    您是从其他模板调用它吗?如果不是,则无需将 sn-p 定义为宏。

    【讨论】:

    • 效果很好,非常感谢!要回答您的问题,是的,这是从另一个模板调用的。我们有一个研究人员内容类型,它有几个由宏填充的显示字段(职位、合作者、出版物等)
    • 是否可以对此进行调整,以便宏按“publication_year”对文件夹中项目的显示进行排序?就像现在一样,文件夹中项目的顺序就是它们的显示顺序。
    • 这里有一种方法:假设 'publication_year' 是目录索引,将 tal:repeat 行更改为 &lt;tal:block tal:repeat="publication python:publications.getFolderContents({'sort_on': 'publication_year'})"&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2023-03-09
    • 2022-08-04
    • 2016-06-26
    • 2017-07-14
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多