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

任何帮助深表感谢

4

1 回答 1

2

注意:以下答案适用于 Silverstripe 2.4。这不应该用于 Silverstripe 3.0+ 网站。从 3.0 起,PaginatedList对象使分页变得更加容易

您没有对在查询中检索多少条目或从哪里开始设置限制。

以下教程解释了如何完全按照您的尝试将分页应用于一组数据对象: 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 个项目。您可以将其更改为每页所需的任何内容。

于 2013-04-08T01:50:25.510 回答