mcfmullen Posted November 28, 2010 Share Posted November 28, 2010 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 More sharing options...
mcfmullen Posted November 29, 2010 Author Share Posted November 29, 2010 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! Link to comment https://forums.phpfreaks.com/topic/220085-pagination-complications/#findComment-1140738 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.