jfarthing Posted September 7, 2007 Share Posted September 7, 2007 Does anybody know how to control the number of page links displayed with pagination? I mean like, with the tutorial on this site, if I had, say 50 pages of results, it actually creates individual links for page 1-50. How could I make it truncate say 1-5, and then an arrow to goto 6-11 and vice versa? Heere is the code the tutorial uses for($i = 1; $i <= $numofpages; $i++){ if($i == $page){ echo($i." "); }else{ echo("<a href=\"$PHP_SELF?page=$i\">$i</a> "); } } Quote Link to comment https://forums.phpfreaks.com/topic/68396-mysql-pagination/ Share on other sites More sharing options...
AdRock Posted September 7, 2007 Share Posted September 7, 2007 Here is how I paginate my results like what you wanted <?php include "includes/connection.php"; $webpage = basename(news); //need to be the name of the page i.e. news.php function pagination_five($total_pages,$page){ global $webpage; $max_links = 10; $h=1; if($page>$max_links){ $h=(($h+$page)-$max_links); } if($page>=1){ $max_links = $max_links+($page-1); } if($max_links>$total_pages){ $max_links=$total_pages+1; } if($total_pages>1){ echo '<div class="page_numbers"><ul>'; if($page>"1"){ echo '<li class="current"><a href="/'.$webpage.'/1">First</a></li> <li class="current"><a href="/'.$webpage.'/'.($page-1).'">Prev</a></li> '; } if($total_pages!=1){ for ($i=$h;$i<$max_links;$i++){ if($i==$page){ echo '<li><a class="current">'.$i.'</a></li>'; } else{ echo '<li><a href="/'.$webpage.'/'.$i.'">'.$i.'</a> </li>'; } } } if(($page >="1")&&($page!=$total_pages)){ echo '<li class="current"><a href="/'.$webpage.'/'.($page+1).'">Next</a></li> <li class="current"><a href="/'.$webpage.'/'.$total_pages.'">Last</a></li> '; } echo '</ul></div>'; } } $result = mysql_query("Select count(*) from news WHERE archived='n'") or die (mysql_error()); $numrows = mysql_fetch_row($result); if(isset($_GET['pagenum'])?$page = $_GET['pagenum']:$page = 1); $entries_per_page = 1; $total_pages = ceil($numrows[0]/$entries_per_page); $offset = (($page * $entries_per_page) - $entries_per_page); //after we have $total_pages and $page, we can include the //pagination style wherever we want on the page. //so far there is no output from the script, so we could have //pagination before or after the pages results //before the results $result = mysql_query("SELECT id,title,content, DATE_FORMAT(time, '%W %D %M %Y') as date, photo, alternate FROM news WHERE archived='n' ORDER BY id DESC LIMIT $offset,$entries_per_page"); if(!$result) die(mysql_error()); $err = mysql_num_rows($result); if($err == 0) die("No matches met your criteria."); while($row=mysql_fetch_array($result)){ $title = htmlentities(strtoupper($row['title'])); $content = htmlentities($row['content']); if (!$row['photo']){ echo "<div id='right'><h3>".$title."</h3><p class='italic'>Date added: ".$row['date']."</p><p>".nl2br($content)."</p><br /></div>\n"; } else { echo "<div id='right'><h3>".$title."</h3><p class='italic'>Date added: ".$row['date']."</p><p><img src='/images/large/".$row['photo']."' alt='".$row['alternate']."' class='right' />".nl2br($content)."</p><br /></div>\n"; } } //or after the results pagination_five($total_pages,$page); and here is the CCS file to style the links .page_numbers { width: 600px; padding: 5px 0px; float:left; clear:left; margin:0 auto; } .page_numbers ul { margin: 0 auto; list-style-type: none; padding: 0px; text-align: center; } .page_numbers li { display: inline; float: left; margin:1px; background: #a7a7a7; width:25px; } .page_numbers li.current{ width:50px; } .page_numbers li a { background: #fff; border: 1px solid #a7a7a7; padding: 1px; text-decoration: none; color: #000; font:bold 8px verdana,sans-serif; display:block; } .page_numbers a.current, .page_numbers li a:hover { background: #a7a7a7; color: #fff; } Quote Link to comment https://forums.phpfreaks.com/topic/68396-mysql-pagination/#findComment-343901 Share on other sites More sharing options...
jfarthing Posted September 7, 2007 Author Share Posted September 7, 2007 Thanks but, its not working exactly as I was expecting. Page 1 shows 1 2 3, Page 2 shows 1 2 3 4, Page 3 shows 1 2 3 4 5...I want it to be like this Page 1 (as well as Page 2, 3, 4 and 5) 1 2 3 4 5 >> (Clicking the >> will take you to page 6 to see the 6-10 menu) Page 6 << 6 7 8 9 10 (Clicking the << will take you to page 5 to see the 5-1 menu) See what I mean? Quote Link to comment https://forums.phpfreaks.com/topic/68396-mysql-pagination/#findComment-343938 Share on other sites More sharing options...
AdRock Posted September 7, 2007 Share Posted September 7, 2007 you can change the limit. Quote Link to comment https://forums.phpfreaks.com/topic/68396-mysql-pagination/#findComment-343966 Share on other sites More sharing options...
jfarthing Posted September 7, 2007 Author Share Posted September 7, 2007 I know this, and it still does not work as I am explaining.... Quote Link to comment https://forums.phpfreaks.com/topic/68396-mysql-pagination/#findComment-344025 Share on other sites More sharing options...
jfarthing Posted September 8, 2007 Author Share Posted September 8, 2007 Here is an example of what your code does with the max_links variable set to 6, the variables are the final after all the manipulation and then the output.... Page 1 h=1 maxlinks=6 1 2 3 4 5 Page 5 h=1 maxlinks=10 1 2 3 4 5 6 7 8 9 Page 10 h=5 maxlinks=11 5 6 7 8 9 10 Quote Link to comment https://forums.phpfreaks.com/topic/68396-mysql-pagination/#findComment-344070 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.