2013-04-06 38 views
1

您好我正在使用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 %> 
       &hellip; 
      <% 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 %> 

任何帮助深表感谢

回答

2

注:以下答案是Silverstripe 2.4。这不应该用于Silverstripe 3.0+网站。从3.0开始,PaginatedList对象使pagination much easier

你是不是设置上有多少项在您的查询,检索,或从哪里开始的限制。

下面的教程介绍了如何将分页到一组数据对象的完全一样,你正在尝试做的: http://www.ssbits.com/tutorials/2010/paginating-a-filtered-dataobjectset/

这是在改变你的功能,包括限制,并根据需要进行分页开始尝试:

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项。不过,您可以将其更改为每页所需的内容。

+0

非常感谢! – Shluckey 2013-04-12 16:26:57

+0

乐于帮助。祝你好运。 – 3dgoo 2013-04-13 09:20:26

+0

此方法似乎现在已被弃用,转而使用:http://doc.silverstripe.org/framework/en/trunk/howto/pagination – Kzqai 2014-04-22 01:50:06