Jump to:

3428 Posts in 1056 Topics by 733 members

Data Model Questions

SilverStripe Forums » Data Model Questions » how to make Pagination on my PageHolder

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

Page: 1
Go to End
Author Topic: 6805 Views
  • fiord
    Avatar
    Community Member
    79 Posts

    how to make Pagination on my PageHolder Link to this post

    I want to do something similar to http://silverstripe.org/modules?start=10
    can share the code how to do Pagination with "Previous page" and "Next page" links

  • Aram
    Avatar
    Community Member
    598 Posts

    Re: how to make Pagination on my PageHolder Link to this post

    Hi Fiord, you need to do something like this:

    mysite/code/Page.php

    //functions in Page_controller, gets a list of objects and paginates them
    function getObjects() {
    if(!isset($_GET['start']) || !is_numeric($_GET['start']) || (int)$_GET['start'] < 1) $_GET['start'] = 0;
    $SQL_start = (int)$_GET['start'];
    $doSet = DataObject::get(
    $callerClass = "$PageClass", // enter the Object type (e.g. 'MyPageType')
    $filter = "`ParentID` = '".$this->ID."'",
    $sort = "Date DESC",
    $join = "",
    $limit = "{$SQL_start}, $itemsPerPage" // enter the number of items per page (int)
    );

    return $doSet ? $doSet : false;
    }

    mysite/templates/Layout/Page.ss

    <% if getObjects.MoreThanOnePage %>
    <p class="pageNumbers">
    <% if getObjects.PrevLink %>
    <a href="$getObjects.PrevLink"><< Prev</a> |
    <% end_if %>

    <% control getObjects.Pages %>
    <% if CurrentBool %>
    <strong>$PageNum</strong>
    <% else %>
    <a href="$Link" title="Go to page $PageNum">$PageNum</a>
    <% end_if %>
    <% end_control %>

    <% if getObjects.NextLink %>
    | <a href="$getObjects.NextLink">Next >></a>
    <% end_if %>
    </p>
    <% end_if %>

  • bebabeba
    Avatar
    Community Member
    192 Posts

    Re: how to make Pagination on my PageHolder Link to this post

    H!
    I need to do something like this but data that I need to paginate, are the result of my query.
    Can you help me to print 10 result for page please?I'm unable to realize correctly..
    This is the function with my query.

    function Conn()
       {   global $db_pandora;
        $record=$db_pandora->query('SELECT * FROM mm_ville LIMIT 0, 30');

        $rec=array();
       
    while($rec[]=$record->nextRecord())
    { }

    $doSet = new DataObjectSet();

    foreach($rec as $key)
    { $record = array(
    'Id' => $key['id'],
    'Nome' => $key['name'],
    );
    doSet->push(new ArrayData($record));}

    return $doSet;
       }
       

  • marc79
    Avatar
    Community Member
    65 Posts

    Re: how to make Pagination on my PageHolder Link to this post

    Hi Aram.

    Thanks for your post. I have implemented your code on my site and have run into an error when I click through the second page:

    "StartTag: invalid element name"

    The code I am using is:

    PhotoGalleryPage.php

    function getObjects() {
       if(!isset($_GET['start']) || !is_numeric($_GET['start']) || (int)$_GET['start'] < 1) $_GET['start'] = 0;
       $SQL_start = (int)$_GET['start'];
       $doSet = DataObject::get("PhotoGallery", "", "PhotoDate DESC", "", "{$SQL_start}, 4" );

       return $doSet ? $doSet : false;
    }   

    PhotoGalleryPage.ss

    <div id="photoList">   
       <% control getObjects %>
       <div class="photoFrame">
           <div class="photoImageField">$Photo.SetRatioSize(270,203)</div>
             <div class="photoCaptionField">$PhotoCaption</div>
             <div class="photDateField">Taken: $PhotoDate.format(d-M-y)</div>
             <div class="clear"></div>
          </div>   
       <% end_control %>      
       
       <% if getObjects.MoreThanOnePage %>
          <p class="pageNumbers">
          <% if getObjects.PrevLink %>
          <a href="$getObjects.PrevLink"><< Prev</a> |
          <% end_if %>
          <% control getObjects.Pages %>
          <% if CurrentBool %>
          <strong>$PageNum</strong>
          <% else %>
          <a href="$Link" title="Go to page $PageNum">$PageNum</a>
          <% end_if %>
          <% end_control %>
          <% if getObjects.NextLink %>
          | <a href="$getObjects.NextLink">Next >></a>
          <% end_if %>
          </p>
          <% end_if %>
       </div>

    </div>

       

    Everything seems to be ok. Any suggestions on what might be causing the issue would greatly received.

    Many thanks

    Marc

  • neilcreagh
    Avatar
    Community Member
    90 Posts

    Re: how to make Pagination on my PageHolder Link to this post

    Thank you Aram! This saved me hours.

  • Dimenicius
    Avatar
    Community Member
    8 Posts

    Re: how to make Pagination on my PageHolder Link to this post

    Does it work on SS3? the getObjects is working fine, but the Next/Prev buttons aren't showing up

  • Nivery
    Avatar
    Community Member
    6 Posts

    Re: how to make Pagination on my PageHolder Link to this post

    Dimenicius, check out the SS3 documentation for PaginatedList.

    6805 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.