2013-04-06 1 views
1

안녕하세요 저는 silverstripe 2.4.7을 사용하고 있으며 페이지 매김이 작동하는 데 어려움을 겪고 있습니다. 내가 제어 및 페이지 매김 태그에이 기능을 넣을 때 한 문서는 동시 기사 그러나 링크를 보여줍니다 그리고 그렇게기사 페이지 매기기 만들기

function AllNewsPosts($num=1) { 
$news = DataObject::get_one("NewsHolder"); 
return ($news) ? DataObject::get("NewsEntry", "ParentID > 0", "Date DESC", "", $num) : false; 
} 

같은 최신 기사를 얻을 내 page.php의 기능을 만들었습니다하지 작업 - 기본적으로 페이지 매김가 작동하지 않습니다와 나는

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

+0

도와 드리겠습니다. 행운을 빌어 요. – 3dgoo

+0

이 접근법은 현재 권장되지 않는 것으로 보입니다. http://doc.silverstripe.org/framework/en/trunk/howto/pagination – Kzqai