2017-08-25 45 views
0

我有日期顯示。主頁上會顯示這些列表的簡短列表。我如何編碼才能顯示忽略過去日期的當前和未來演出日期?SilverStripe 3.1:僅顯示包含當前或未來日期的數據對象

我發現這個例子,但到目前爲止它不工作,所以我可能沒有正確應用它。 https://www.silverstripe.org/community/forums/data-model-questions/show/14451 或者有沒有辦法在模板中做到這一點?

HomePage.ss

<% loop $Projects.limit(1) %> 
<% loop $Entrys.limit(10) %> 
    <li class="tourdate"><strong>$EntryDate.ShortMonth 
     $EntryDate.DayOfMonth</strong> - $Location</li> 
<% end_loop %> 
<% end_loop %> 

ProjectPage.php

private static $has_many = array(
       'Entrys' => 'Entry' 
      ); 

Entry.php這是過時

'EntryDate' => ‘Date' 

回答

2

你可以使用EntryDate.InPast(),就像這樣:

<% loop $Projects.limit(1) %> 
    <% loop $Entrys.limit(10) %> 
     <% if not EntryDate.InPast() %> 
      <li class="tourdate"><strong>$EntryDate.ShortMonth 
       $EntryDate.DayOfMonth</strong> - $Location 
      </li> 
     <% en_if %> 
    <% end_loop %> 
<% end_loop %> 

我還沒有測試過這個具體的例子,所以你可能需要稍微調整它。

此外,我更喜歡用類似getUpcomingShows()的方法在類級別處理這類邏輯,它將返回一些對象(動態或靜態限制),這些對象在現在或之後有其日期。

希望能幫到:)

+0

完美謝謝! – pinkp

+3

我強烈建議你使用一種特殊的方法,比如'getUpcomingShows',因爲你可以用一個簡單的數據庫查詢來解決這個問題,這是一個更高性能的問題。即使數據庫中存在更多數據,上述方法也可能會呈現少於10個項目(取決於$ Entrys'如何默認排序) – bummzack

+0

我遇到了一個問題,這可能是由於未使用getUpcomingShows 。目前像@bummzack建議它顯示少於10個。該限制意味着它計數爲10,並且如果將來只有9和10它將顯示2.即使有100個條目。作爲其唯一的數字前10位。正確的結果應該是顯示從今天的日期10即將來臨的節目。幫助把它變成一個班會很好!謝謝 – pinkp