Welcome Guest, Not a member yet? Register   Sign In
Paged Result Library
#1

[eluser]wiredesignz[/eluser]
This might be of some use to people having difficulty with CI pagination as it doesn't use the db limit or offset features.

Simply pass in a reference to your full resultset, pagesize and required pagenumber.
Use the fetchResult() function retrieve the current page rows one at a time.

I adapted this from a mysqlPagedResult class I've been using for a few years, don't remember the source.

Code:
<?php

class PagedResult
{
  var $resultset = array();
  var $numrows;
  var $numPages;
  var $pageSize;
  var $page;
  var $row;
  var $ptr;
  
  function PagedResult($resultset=array(), $pageSize=1, $resultpage=1)
  {
    if (!$resultset) return NULL;
    
    $this->resultset = $resultset;
    $this->numrows = count($this->resultset->result());
    $this->pageSize = $pageSize;
    $this->numPages = $this->getNumPages();
  
    if ((int)$resultpage <= 0) $resultpage = 1;
    if ($resultpage > $this->numPages) $resultpage = $this->numPages;
    
    $this->setPageNum($resultpage);
  }
  
  function getNumPages()
  {
    if (!$this->resultset) return FALSE;
    return ceil($this->numrows / (float)$this->pageSize);
  }
  
  function setPageNum($pageNum)
  {
    if ($pageNum > $this->numPages or $pageNum <= 0) return FALSE;
    $this->page = $pageNum;
    $this->row = 0;
    $this->ptr = ($pageNum-1) * $this->pageSize;
  }
  
  function getPageNum()
  {
    return $this->page;
  }
  
  function isLastPage()
  {
    return ($this->page >= $this->numPages);
  }
  
  function isFirstPage()
  {
    return ($this->page <= 1);
  }
  
  function fetchResult($type='object')
  {
    if (!$this->resultset) return FALSE;
    if ($this->row >= $this->pageSize) return FALSE;
    if ($this->ptr >= $this->numrows) return FALSE;
    
    $result = ($type == 'object') ?
        $this->resultset->row($this->ptr) : $this->resultset->row_array($this->ptr);
    
    $this->ptr++;
    $this->row++;
    return $result;
  }
  
  function getPagedNav($css_class='', $url='', $queryvars = '')
  {    
    if ($queryvars) $queryvars = '/'.$queryvars;
    
    if (!$this->isFirstPage())
    {
      $nav .= '<a class="'.$css_class.'" href="'.$url.
              ($this->getPageNum()-1).$queryvars.'"><< Previous page</a>&nbsp;&nbsp;';
    }
    if ($this->numPages > 1)
      for ($i=1; $i <= $this->numPages; $i++)
      {
        if ($i==$this->page)
          $nav .= '&nbsp;'.$i.'&nbsp;';
        else
          $nav .= '&nbsp;<a class="'.$css_class.'" href="'.$url.$i.$queryvars.'">'.$i.'</a>&nbsp;';
      }
    if (!$this->isLastPage())
    {
      $nav .= '&nbsp;&nbsp;<a class="'.$css_class.'" href="'.$url.
              ($this->getPageNum()+1).$queryvars.'">Next page >></a>';
    }
    return $nav;
  }
}
?&gt;

Also you can use the getPagedNav() function to render your page links and add additional URI segments into the page request, which is not available in CI pagination. (I don't think)


Messages In This Thread
Paged Result Library - by El Forum - 09-25-2007, 08:59 PM
Paged Result Library - by El Forum - 09-27-2007, 11:49 AM
Paged Result Library - by El Forum - 09-28-2007, 10:33 AM
Paged Result Library - by El Forum - 09-28-2007, 02:12 PM



Theme © iAndrew 2016 - Forum software by © MyBB