如何检测“状态”的变化并显示某些东西?

时间:2011-03-21 00:00:04

标签: templates plone

使用Plone 3.3.5,我有一个经典的foldercontents,它是按日期(反向)排序的事件列表。我正在逐个显示每个元素。我希望在事件不再是将来但是过去事件时显示特殊信息。

现在,我有这个:

  <span tal:define="endDate item/end; 
           " tal:condition="python: endDate.isPast()">Past event<br />
  </span>

但我想只显示一次此消息而不是所有过去的事件......

我尝试创建一个Python变量但未能这样做(弄乱了未声明的变量)。

感谢您的帮助

PS:我对Plone的模板语言并不熟悉......

4 个答案:

答案 0 :(得分:3)

最简单的方法可能就是让它们成为你迭代的两个列表:一个用于未来事件,一个用于过去的事件。然后你可以把'过去事件'作为标题放在to列表之间。

答案 1 :(得分:1)

您可以计算将来的事件,并在此变为0时显示相应的消息。

请参阅门户网站根目录中的“events”集合,以获取此示例。

答案 2 :(得分:1)

那么, 它可能看起来有点棘手,因为在管理db结果集时这种方法很自然。

你可以在这里参考: http://docs.zope.org/zope2/zope2book/AppendixC.html#the-following-information-is-available-from-the-repeat-variable

tal:repeat语句非常强大,在您的情况下,您可以依赖“第一个”变量信息。

尝试迭代您处理isPast信息的字典列表,而不是简单的事件列表。

运行以下(简单和残酷)代码......这是自我解释。

<div tal:define="past string:Past events;
                 future string:Events to Come;
                 richList python:[{'event':'event1', 'passed': past},
                                  {'event':'event2', 'passed': future},
                                  {'event':'event3', 'passed': past},
                                  {'event':'event4', 'passed': future}];
                 dummy python:richList.sort(lambda x,y:cmp(x['passed'], y['passed']))">    


    <tal:block repeat="item richList">
        <h2 tal:condition="repeat/item/first/passed"
            tal:content="item/passed">
            Past Events or Future
        </h2>
      <a tal:content="item/event">event's url</a>
        </tal:block>

    </div>

您可以创建您的richList迭代目录调用的结果。您可以根据event / end / isPast函数创建字典项设置'传递'值。

希望这会有所帮助。

答案 3 :(得分:1)

您可以在listFolderContents中“过滤”,就像在进行目录搜索时可以过滤一样。 见http://collective-docs.plone.org/content/listing.html#getting-folder-objects-filtered 如何做到这一点。您可以在过滤器中添加“结束”索引,请参阅http://plone.org/documentation/manual/plone-community-developer-documentation/searching-and-indexing/query#querying-by-date

相关问题