Welcome Guest, Not a member yet? Register   Sign In
Pagination using per_page to increment page numbers fix
#1

[eluser]Frank Wong[/eluser]
Problem: Pagination uses per_page attribute to increment page numbers.

Example:
per_page = 5;
Page 1 - /seg1/seg2/
Page 2 - /seg1/seg2/5
Page 3 - /seg1/seg2/10
etc

System:
CI 1.5.4
Windows XP Pro
Apache2
php5

Fixed Pagination.php->create_links():
I left the original code commented out where I made changes.
Hope this helps some people.

----------Begin----------
function create_links()
{
// If our item count or per-page total is zero there is no need to continue.
if ($this->total_rows == 0 OR $this->per_page == 0)
{
return '';
}

// Calculate the total number of pages
$num_pages = ceil($this->total_rows / $this->per_page);
// echo $num_pages;
// Is there only one page? Hm... nothing more to do here then.
if ($num_pages == 1)
{
return '';
}

// Determine the current page number.
$CI =& get_instance();
if ($CI->uri->segment($this->uri_segment) != 0)
{
$this->cur_page = $CI->uri->segment($this->uri_segment);

// Prep the current page - no funny business!
$this->cur_page = (int) $this->cur_page;
}

if ( ! is_numeric($this->cur_page))
{
$this->cur_page = 0;
}

if ($this->cur_page==0)
{
$this->cur_page = 1;
}

// Is the page number beyond the result range?
// If so we show the last page
if ($this->cur_page > $this->total_rows)
{
$this->cur_page = ($num_pages - 1) * $this->per_page;
}

$uri_page_number = $this->cur_page;
// $this->cur_page = floor(($this->cur_page/$this->per_page) + 1);

// Calculate the start and end numbers. These determine
// which number to start and end the digit links with
$start = (($this->cur_page - $this->num_links) > 0) ? $this->cur_page - ($this->num_links - 1) : 1;
$end = (($this->cur_page + $this->num_links) < $num_pages) ? $this->cur_page + $this->num_links : $num_pages;
//echo $start." ";
//echo $end;
// Add a trailing slash to the base URL if needed
$this->base_url = rtrim($this->base_url, '/') .'/';

// And here we go...
$output = '';

// Render the "First" link
if ($this->cur_page > $this->num_links)
{
$output .= $this->first_tag_open.'<a href="'.$this->base_url.'">'.$this->first_link.'</a>'.$this->first_tag_close;
}

// Render the "previous" link
// echo $this->num_links;
if (($this->cur_page - $this->num_links) >= 0)
{
// $i = $uri_page_number - $this->per_page;
$i = $this->cur_page - 1;
// echo $i;
if ($i == 0) $i = '';
$output .= $this->prev_tag_open.'<a href="'.$this->base_url.$i.'">'.$this->prev_link.'</a>'.$this->prev_tag_close;
}

// Write the digit links
for ($loop = $start -1; $loop <= $end; $loop++)
{
$i = ($loop * $this->per_page) - $this->per_page;
// $i = $loop;

if ($i >= 0)
{
if ($this->cur_page == $loop)
{
$output .= $this->cur_tag_open.$loop.$this->cur_tag_close; // Current page
}
else
{
// $n = ($i == 0) ? '' : $i;
$n = ($i == 0) ? '' : $loop;
$output .= $this->num_tag_open.'<a href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close;
}
}
}

// Render the "next" link
if ($this->cur_page < $num_pages)
{
// $output .= $this->next_tag_open.'<a href="'.$this->base_url.($this->cur_page * $this->per_page).'">'.$this->next_link.'</a>'.$this->next_tag_close;
$output .= $this->next_tag_open.'<a href="'.$this->base_url.($this->cur_page + 1).'">'.$this->next_link.'</a>'.$this->next_tag_close;
}

// Render the "Last" link
if (($this->cur_page + $this->num_links) < $num_pages)
{
// $i = (($num_pages * $this->per_page) - $this->per_page);
$i = $num_pages;
$output .= $this->last_tag_open.'<a href="'.$this->base_url.$i.'">'.$this->last_link.'</a>'.$this->last_tag_close;
}

// Kill double slashes. Note: Sometimes we can end up with a double slash
// in the penultimate link so we'll kill all double slashes.
$output = preg_replace("#([^:])//+#", "\\1/", $output);

// Add the wrapper HTML if exists
$output = $this->full_tag_open.$output.$this->full_tag_close;

return $output;
}
----------End----------


Messages In This Thread
Pagination using per_page to increment page numbers fix - by El Forum - 11-10-2007, 11:43 AM
Pagination using per_page to increment page numbers fix - by El Forum - 11-10-2007, 07:40 PM
Pagination using per_page to increment page numbers fix - by El Forum - 11-11-2007, 12:29 AM
Pagination using per_page to increment page numbers fix - by El Forum - 11-11-2007, 05:44 AM
Pagination using per_page to increment page numbers fix - by El Forum - 11-11-2007, 10:12 AM
Pagination using per_page to increment page numbers fix - by El Forum - 11-11-2007, 10:35 AM
Pagination using per_page to increment page numbers fix - by El Forum - 11-11-2007, 11:04 AM
Pagination using per_page to increment page numbers fix - by El Forum - 01-08-2008, 12:11 PM
Pagination using per_page to increment page numbers fix - by El Forum - 05-23-2008, 12:23 PM



Theme © iAndrew 2016 - Forum software by © MyBB