您好,我使用的是silverstripe 2.4.7,我遇到了让分页工作的困难。我在page.php中创建了一个函数来获取最新的文章,如下所示
function AllNewsPosts($num=1) {
$news = DataObject::get_one("NewsHolder");
return ($news) ? DataObject::get("NewsEntry", "ParentID > 0", "Date DESC", "", $num) : false;
}然后,当我将这个函数放入控制和分页标记中时,会出现一篇文章,但是指向并发文章的链接不起作用--本质上,分页是不起作用的,我不确定如何修复它
<% if AllNewsPosts %>
<% control AllNewsPosts %>
<div class="event">
<h2>$MenuTitle |<span class="date"> $Date.Time $Date.Long</span></h2>
<p>$Content.FirstParagraph</p>
<a href="$Link">See more about this event</a>
</div>
<% end_control %>
<% else %>
<div class="no-entry">'There are no entries'</div>
<% end_if %>
<% if AllNewsPosts.MoreThanOnePage %>
<div id="PageNumbers">
<p>
<% if AllNewsPosts.NotFirstPage %>
<a class="prev" href="$AllNewsPosts.PrevLink" title="View the previous page"><span class="yellow-background">Prev</span></a>
<% end_if %>
<span>
<% control AllNewsPosts.PaginationSummary(0) %>
<% if CurrentBool %>
<span class="current">$PageNum</span>
<% else %>
<% if Link %>
<a href="$Link" class="numbers" title="View page number $PageNum">$PageNum</a>
<% else %>
…
<% end_if %>
<% end_if %>
<% end_control %>
</span>
<% if AllNewsPosts.NotLastPage %>
<a class="next" href="$AllNewsPosts.NextLink" title="View the next page"><span class="yellow-background">Next</span></a>
<% end_if %>
</p>
</div>
<% end_if %>任何帮助都是非常感谢的。
发布于 2013-04-08 09:50:26
注意:以下答案适用于Silverstripe 2.4。这不应用于Silverstripe 3.0+站点。从3.0和更高版本开始,PaginatedList对象支持pagination much easier。
您没有对要在查询中检索的条目数量或从何处开始设置限制。
下面的教程解释了如何将分页应用于一组数据对象,这与您尝试执行的操作完全相同:http://www.ssbits.com/tutorials/2010/paginating-a-filtered-dataobjectset/
这里尝试修改您的函数,以便根据分页需要包括limit和start:
PHP
function AllNewsPosts() {
if(!isset($_GET['start']) || !is_numeric($_GET['start']) || (int)$_GET['start'] < 1)
{
$_GET['start'] = 0;
}
$SQL_start = (int)$_GET['start'];
$newsEntries = DataObject::get('NewsEntry', '', 'Date DESC');
$doSet = new DataObjectSet();
foreach ($newsEntries as $newsEntry) {
if ($newsEntry->canView()) {
$doSet->push($newsEntry);
}
}
$doSet->setPageLimits($SQL_start, 10, $doSet->Count());
return $doSet;
}请注意,以上内容将显示每页10个项目。您可以将其更改为每页所需的方式。
https://stackoverflow.com/questions/15851641
复制相似问题