Php SilverStripe 3.1:仅显示具有当前或未来日期的数据对象

Php SilverStripe 3.1:仅显示具有当前或未来日期的数据对象,php,date,silverstripe,Php,Date,Silverstripe,我有演出的约会。主页上会显示一个简短的列表。如何将其编码为仅显示当前和未来的显示日期而忽略过去的日期 我找到了这个例子,但到目前为止它还不起作用,所以我可能没有正确地应用它。 或者在模板中是否有这样做的方法 主页.ss <% loop $Projects.limit(1) %> <% loop $Entrys.limit(10) %> <li class="tourdate"><strong>$EntryDate.ShortMonth

我有演出的约会。主页上会显示一个简短的列表。如何将其编码为仅显示当前和未来的显示日期而忽略过去的日期

我找到了这个例子,但到目前为止它还不起作用,所以我可能没有正确地应用它。 或者在模板中是否有这样做的方法

主页.ss

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

'EntryDate' => ‘Date'
你可以这样使用:

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

  • $EntryDate.ShortMonth $EntryDate.DayOfMonth-$Location
  • 我还没有测试这个具体的例子,所以你可能需要稍微调整一下

    此外,我更喜欢在类级别使用类似
    getUpcomingShows()
    的方法处理此类逻辑,该方法将返回许多对象(动态或静态限制),这些对象的日期在现在或之后

    希望对您有所帮助:)

    您可以这样使用:

    <% 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 %>
    
    
    
  • $EntryDate.ShortMonth $EntryDate.DayOfMonth-$Location
  • 我还没有测试这个具体的例子,所以你可能需要稍微调整一下

    此外,我更喜欢在类级别使用类似
    getUpcomingShows()
    的方法处理此类逻辑,该方法将返回许多对象(动态或静态限制),这些对象的日期在现在或之后


    希望对您有所帮助:)

    我强烈建议您使用一种特殊的方法,例如
    getUpcomingShows
    ,因为您可以通过一个简单的数据库查询来解决这个问题,它的性能更高。上述方法也可能会渲染少于10个项目,即使数据库中有更多的项目(取决于默认情况下
    $Entrys
    的排序方式),我遇到了一个问题,这可能是因为没有使用getUpcomingShows。目前就像@bummzack建议的那样,它显示的值不到10。限制意味着它计数为10,如果将来只有9和10,则显示为2。即使有100个条目。因为它只算前10个。正确的结果应该是它显示了从今天开始的10个即将到来的节目。帮我把这变成一门课会很棒!?thanks@pinkp你能给我举个例子,说明你是如何获取即将到来的节目的吗?我认为你的问题是由于过滤顺序。您可能会得到10个项目,然后检查它们是否在未来,您应该取而代之的是获得未来的所有项目,然后限制10个,比如:
    this->Entrys()->filter(['EntryDate:greaterther'=>date('yyyyy-MM-dd'))->limit(10)
    位于
    ProductPage
    范围内。(另外,对于过度收缩的代码,我很抱歉,注释中似乎不允许使用代码块)我强烈建议您使用一种特殊的方法,例如
    getUpcomingShows
    ,因为您可以通过一个简单的DB查询来解决这个问题,这更有效。上述方法也可能会渲染少于10个项目,即使数据库中有更多的项目(取决于默认情况下
    $Entrys
    的排序方式),我遇到了一个问题,这可能是因为没有使用getUpcomingShows。目前就像@bummzack建议的那样,它显示的值不到10。限制意味着它计数为10,如果将来只有9和10,则显示为2。即使有100个条目。因为它只算前10个。正确的结果应该是它显示了从今天开始的10个即将到来的节目。帮我把这变成一门课会很棒!?thanks@pinkp你能给我举个例子,说明你是如何获取即将到来的节目的吗?我认为你的问题是由于过滤顺序。您可能会得到10个项目,然后检查它们是否在未来,您应该取而代之的是获得未来的所有项目,然后限制10个,比如:
    this->Entrys()->filter(['EntryDate:greaterther'=>date('yyyyy-MM-dd'))->limit(10)
    位于
    ProductPage
    范围内。(另外,为过度收缩的代码感到抱歉,似乎注释中不允许使用代码块)