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; 
}

次に、この関数をコントロールタグとページネーションタグに入れると、1 つの記事が表示されますが、同時記事へのリンクが機能しません - 基本的にページネーションが機能しておらず、修正方法がわかりません

<% 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オブジェクトによってページネーションがはるかに簡単になります。

クエリで取得するエントリの数やどこから開始するかについて制限を設定していません。

次のチュートリアルでは、行おうとしているのとまったく同じように一連のデータ オブジェクトにページネーションを適用する方法について説明します

ページネーションの必要に応じて 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;
}

上記では、1 ページあたり 10 項目が表示されることに注意してください。これは、ページごとに必要に応じて変更できます。

于 2013-04-08T01:50:25.510 に答える