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