Jump to content

Pagination complications!


mcfmullen

Recommended Posts

This is my code:

$data = mysql_query("SELECT * FROM .$itemspec");

$rows = mysql_num_rows($data); 
    
$page_rows = 10;

if (isset($_GET['pagenum']) && is_numeric($_GET['pagenum'])) {  
$pagenum = (int) $_GET['pagenum'];
} else {  
$pagenum = 1;
} 

$last = ceil($rows/$page_rows); 
if ( !$last )
	$last = 1;

if ( 1 == $last )
	return;

$max = 'limit ' .($pagenum - 1) * $page_rows .',' .$page_rows; 
$range = 3;
$larger_page_to_show = 2;
$larger_page_multiple = 5;
$prev = $pagenum - 1;
$next = $pagenum + 1;
$pages_to_show_minus_1 = $range - 1;
$half_page_start = floor( $pages_to_show_minus_1/2 );
$half_page_end = ceil( $pages_to_show_minus_1/2 );
$start_page = $pagenum - $half_page_start;
$first_text = "« First";
$dotleft_text = "...";
$prev_text = "«";
$next_text = "»";
$dotright_text = "...";
$last_text = "Last »";

if ( $start_page <= 0 )
	$start_page = 1;

$end_page = $pagenum + $half_page_end;

if ( ( $end_page - $start_page ) != $pages_to_show_minus_1 )
	$end_page = $start_page + $pages_to_show_minus_1;

if ( $end_page > $last ) {
	$start_page = $last - $pages_to_show_minus_1;
	$end_page = $last;
}

if ( $start_page <= 0 )
	$start_page = 1;

$range = 6;

$data2 = mysql_query("SELECT * FROM .$itemspec $max");

while($row = mysql_fetch_array( $data_p )){
//output of database //
}

?>

<div class='wp-pagenavi'>
<?php
$out = '';
			$out = "<span class='pages'> Page " .$pagenum. " of " .$last. "</span>";
			echo $out;

		if ( $start_page >= 2 && $pages_to_show < $last ) {
			$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=1' class='first'>".$first_text."</a>";
			echo $out;

			if ( !empty( $dotleft_text ) ){
				$out = "<span class='extend'>$dotleft_text</span>";
				echo $out;
			}
		}

		$larger_pages_array = array();
		if ( $larger_page_multiple )
			for ( $i = $larger_page_multiple; $i <= $last; $i+= $larger_page_multiple )
				$larger_pages_array[] = $i;

		$larger_page_start = 0;
		foreach ( $larger_pages_array as $larger_page ) {
			if ( $larger_page < $start_page && $larger_page_start < $larger_page_to_show ) {
				$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$larger_page' class='smaller page'>".$larger_page."</a>";
				echo $out;
				$larger_page_start++;
			}
		}

		if ( $pagenum <= 1 ){
		} else {
			$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$prev' class='previouspostslink'>".$prev_text."</a>";
			echo $out;
			}

		foreach ( range( $start_page, $end_page ) as $i ) {
			if ( $i == $pagenum && !empty( $pagenum ) ) {
				$out = "<span class='current'><a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$pagenum'>".$pagenum."</a></span>";
				echo $out;
			} else {
				$out ="<span class='pages'><a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$i'>".$i."</a></span>";
				echo $out;
			}
		}

		if ( $pagenum >= 1 ){
		} else {
			$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$next' class='nextpostslink'>".$next_text."</a>";
			echo $out;
		}

		$larger_page_end = 0;
		foreach ( $larger_pages_array as $larger_page ) {
			if ( $larger_page > $end_page && $larger_page_end < $larger_page_to_show ) {
				$out =  "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$larger_page' class='larger page'>".$larger_page."</a>";
				echo $out;
				$larger_page_end++;
			}
		}

		if ( $end_page < $last ) {
			if ( !empty( $dotright_text ) )
				$out = "<span class='extend'>".$dotright_text."</span>";
				echo $out;

			$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$last' class='total_pages'>".$last_text."</a>";
		}
		echo $out;

?>

 

My script essentially displays this:

 

Page x of y <<First 5 10 15 << 19 20 21 >> 25 30 35 Last>>

 

The problem is that while visiting the second to last and last pages, the Last>> button turns into the # of the page.

 

Given that my last page is 32 when on page 31 I see this:

 

Page 31 of 32 <<First 5 10 << 30 31 32 32

 

On page 32 I see this:

 

Page 32 of 32 <<First 5 10 << 30 31 32 32

 

Instead of:

 

 Page 32 of 32 <<First 5 10 << 30 31 32 Last>>

 

I do not have this problem when seeing the first or second pages and so far as I can tell, the code should work.

 

Code for calling <<First:

if ( $start_page >= 2 && $pages_to_show < $last ) {
			$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=1' class='first'>".$first_text."</a>";
			echo $out;

			if ( !empty( $dotleft_text ) ){
				$out = "<span class='extend'>$dotleft_text</span>";
				echo $out;
			}
		}

		$larger_pages_array = array();
		if ( $larger_page_multiple )
			for ( $i = $larger_page_multiple; $i <= $last; $i+= $larger_page_multiple )
				$larger_pages_array[] = $i;

		$larger_page_start = 0;
		foreach ( $larger_pages_array as $larger_page ) {
			if ( $larger_page < $start_page && $larger_page_start < $larger_page_to_show ) {
				$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$larger_page' class='smaller page'>".$larger_page."</a>";
				echo $out;
				$larger_page_start++;
			}
		}

 

Code for calling Last>>:


		$larger_page_end = 0;
		foreach ( $larger_pages_array as $larger_page ) {
			if ( $larger_page > $end_page && $larger_page_end < $larger_page_to_show ) {
				$out =  "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$larger_page' class='larger page'>".$larger_page."</a>";
				echo $out;
				$larger_page_end++;
			}
		}

		if ( $end_page < $last ) {
			if ( !empty( $dotright_text ) )
				$out = "<span class='extend'>".$dotright_text."</span>";
				echo $out;

			$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$last' class='total_pages'>".$last_text."</a>";
		}
		echo $out;

 

Anyone have any clues?

Link to comment
https://forums.phpfreaks.com/topic/220085-pagination-complications/
Share on other sites

SOLVED!

 

			if ( $end_page <= $last && $pages_to_show < $last) {
			if ( !empty( $dotright_text ) )
				$out = "<span class='extend'>".$dotright_text."</span>";
				echo $out;

			$out = "<a href='{$_SERVER['PHP_SELF']}?itemspec=$itemspec&pagenum=$last' class='total_pages'>".$last_text."</a>";
		}
		echo $out;

 

Now if only the CSS would work!

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.