2011-03-21 83 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