Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 如何检测“的变化”;“国家”;展示什么?_Templates_Plone - Fatal编程技术网

Templates 如何检测“的变化”;“国家”;展示什么?

Templates 如何检测“的变化”;“国家”;展示什么?,templates,plone,Templates,Plone,对于Plone 3.3.5,我有一个经典的foldercontents,它是一个按日期排序的事件列表(反过来)。我正在逐个显示每个元素。当事件不再是未来而是过去时,我想显示一条特殊信息 目前,我有以下几点: <span tal:define="endDate item/end; " tal:condition="python: endDate.isPast()">Past event<br /> </span> 过去的事件

对于Plone 3.3.5,我有一个经典的foldercontents,它是一个按日期排序的事件列表(反过来)。我正在逐个显示每个元素。当事件不再是未来而是过去时,我想显示一条特殊信息

目前,我有以下几点:

  <span tal:define="endDate item/end; 
           " tal:condition="python: endDate.isPast()">Past event<br />
  </span>
过去的事件
但我只想显示一次此消息,而不是所有过去的事件

我尝试创建一个Python变量,但没有成功(弄乱了未声明的变量)

谢谢你的帮助


PS:我对Plone的模板语言一点也不熟悉…

您可以计算将来发生的事件,如果变为0,则显示相应的消息


有关此示例,请参见门户根目录下的“事件”集合。

最简单的方法可能是将它们列为两个列表,供您反复查看:一个用于未来事件,另一个用于过去事件。然后,您可以将“过去的事件”作为标题放在to列表之间

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

你可以在这里查阅:

tal:repeat语句非常强大,在您的例子中,您可以依赖“第一”变量信息

不要只是一个简单的事件列表,而是尝试遍历一个字典列表,您可以在其中处理isPast信息

运行以下(简单而残酷的)tal代码。。。这是自我解释

<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>

过去的事件还是未来
事件的url
您可以在目录调用的结果上创建richList。您可以根据event/end/isPast函数创建设置“passed”值的字典项

希望这能有所帮助。

您可以在listFolderContents中进行“筛选”,就像在进行目录搜索时进行筛选一样。 看见
这是如何做到的。已经有一个“结束”索引可以包含在过滤器中,请参见

我喜欢这个想法,但这个解决方案的问题是我必须在这里复制一些代码……我不知道有这样的功能。谢谢你指出这一点。我现在唯一的问题是理解如何将您的想法与我当前的应用程序联系起来。正在执行以下操作:过去事件或未来
作为过去事件
您不能执行path/path/func()。您必须编写一个路径表达式XOR python表达式。在继续之前,您必须查看“tal概述”文档;)顺便说一句,最好将获取事件的任务委托给python脚本(或浏览器视图类)。之后,你可以创建一个像我一样的dict来使用“第一个”这个神奇的单词。