Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

PaginatedList error


Go to End
Reply


4 Posts   726 Views

Avatar
Dimenicius

Community Member, 8 Posts

7 May 2013 at 5:48pm

Edited: 07/05/2013 7:31pm

Hi, I'm having some trouble working with PaginatedLists.
I want to make my category page show 15 post in a paginatedlist but the pages must go on 5 pages step. (i.e. Page1 results: post 1-15, Page2 results: post 6-20). The first 5 results won't show the same fields of the others.
The first page is working fine, but the buttons to change pages doesn't work, when I click on it, the URL changes but the page shows the same results.

Here is my actual code:

Subcategoria.php

public function Datalist(integer $num, $start ) {
$paginatedList = new PaginatedList(Page::get()); 
$paginatedList->setPageLength($num)->setPageStart($start)-> where('"ParentID" = 7')->Sort("ID", "Desc"); 
return $paginatedList; 
} 

subcategoria.ss

<% loop $Datalist(5,0) %> 
     <a href=$link> $Title </a><br>
<% end_loop %>

---<br><br>

<% loop $Datalist(10,5) %> 
   <a href=$link> $Title </a><br>
<% end_loop %>

=Pagination=<br><br>


<% if $Datalist(5,0).MoreThanOnePage %>
    <% if $Datalist(5,0).NotFirstPage %>
        <a class="prev" href="$Datalist(5,0).PrevLink">Prev</a>
    <% end_if %>
    <% loop $Datalist(5,0).Pages %>
        <% if $CurrentBool %>
            $PageNum
        <% else %>
            <% if $Link %>
                <a href="$Link">$PageNum</a>
            <% else %>
                ...
            <% end_if %>
        <% end_if %>
        <% end_loop %>
    <% if $Datalist(5,0).NotLastPage %>
        <a class="next" href="$Datalist(5,0).NextLink">Next</a>
    <% end_if %>
<% end_if %> 

Avatar
Bambii7

Community Member, 254 Posts

9 May 2013 at 4:38pm

Hmm pagination is tricky.
It looks like $Datalist(5,0) is always starting at 0 so never getting anything more than the first 5 results. You need a mechanism to increment the page. The link for forward or back could hook up to a function off the controller which increments an internal number stored in session... but you'd also need a goTo($here) function for the numbered pages.

Haven't read through it but hopefully this could be of some help http://doc.silverstripe.org/framework/en/howto/pagination

Avatar
Dimenicius

Community Member, 8 Posts

13 May 2013 at 10:45am

I've tried to:

	public function Paginando() { 
return new PaginatedList($this->Children(),$this->request); 
}

just to make it work with the children pages, but whenever i add the "$this->request", the page crash and shows this message:

26 public function __construct(SS_List $list, $request = array()) {
27 if (!is_array($request) && !$request instanceof ArrayAccess) {
28 throw new Exception('The request must be readable as an array.');
29 }

Avatar
copernican

Community Member, 189 Posts

18 May 2013 at 6:48am

Is your function in the controller class? i.e in the "class Page_Controller extends ContentController"