2011-03-21 103 views
3

随着Plone 3.3.5,我有一个古典的文件夹内容是按日期排序的事件(反向)。我逐个显示每个元素。当事件不再是未来,而是过去的事件时,我想展示一个特别的信息。如何检测“状态”的变化并显示一些内容?

现在,我有这样的:

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

但我想只显示一次此消息并没有对所有的往事......

我试图创造一个Python变量,但未能这样做(混乱与未声明的变量)。

感谢您的帮助

PS:我不熟悉,在所有的Plone的模板语言...

回答

1

你可以指望在未来的事件,如果这成为0显示相应的信息。

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

3

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

+0

我喜欢这个想法,但这个解决方案的问题是,我将不得不在这里复制一些代码... – Sylvestre 2011-03-21 18:00:37

1

那么, 它可能会显得有点棘手,因为管理db结果集时这种方法很自然。

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

塔尔: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函数创建设置'传递'值的字典项目。

希望这有助于。

+0

我不知道的这种能力。感谢您指出了这一点。 我唯一的问题是现在要了解如何将您的想法与我目前的应用程序连接起来。以下是: 过去的事件或未来
as 过去的事件
Sylvestre 2011-03-22 17:28:53

+0

你不能做path/path/func()。你必须写一个路径表达式XOR一个python表达式,在继续之前你必须看一下”tal overview“文档;) 顺便说一句,最好委托一个python脚本(或者一个浏览器视图类)来获取你的事件,然后你可以创建一个类似我的字典来使用“第一个”魔术字。 – SauZheR 2011-03-23 15:17:09