Jump to content


Photo
- - - - -

Pagination how to (<<PREV NEXT>>)


  • Please log in to reply
3 replies to this topic

#1 Hooch

Hooch

    Young Padawan

  • Members
  • Pip
  • 158 posts
  • Location:Brockville, Ontario

Posted 06 September 2008 - 02:16 PM

This is the best way to paginate I have seen.

Site 1 This link is the source code.
Site 2 This site customizes the above scripts
Site 3 This site shows how to implement the code above to your needs.

Take the time to learn this code. You will save yourself a lot of headaches.
I use this script for all my pagination needs.

Below is the basic setup I use for the above links..

style.css (Black Style theme from Site #2)
/*  ==========	Pagination	 ==========  */ 
/*
Plugin Name: WP-Digg Style Paginator
Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
Author: Victor De la Rocha
Author URI: http://www.mis-algoritmos.com
More style below...
http://www.mis-algoritmos.com/2007/03/16/some-styles-for-your-pagination/
*/

/*CSS black style pagination*/
	div.pagination {
		padding: 3px;
		margin: 3px;
		text-align:center;
		color:#a0a0a0;
		font-size:80%;
	}
	div.pagination a {
		border: 1px solid #909090;
		margin-right:3px;
		padding:2px 5px;
		background-image:url(bar.gif);
		background-position:bottom;
		text-decoration: none;
		color: #c0c0c0;
	}
	div.pagination a:hover, div.meneame a:active {
		border: 1px solid #f0f0f0; 
		background-image:url(barinv.gif);
		background-color:#404040;
		color: #ffffff;
	}
	div.pagination span.current {
		margin-right:3px;
		padding:2px 5px;
		border: 1px solid #ffffff;
		font-weight: bold;
		background-color: #606060;
		color: #ffffff;
	}
	div.pagination span.disabled {
		margin-right:3px;
		padding:2px 5px;
		border: 1px solid #606060;
		color: #808080;
	}
page.php **This is where the results are displayed**
<?PHP

session_start(); 

require_once 'db.php';//Connect to your DATABASE
include 'page_pagination.php';//Include the pagination for THIS page
?>
<link href="style.css" rel="stylesheet" type="text/css">

<table width="" border="0" align="center" cellpadding="3" cellspacing="0">
  <tr>
	<td width="" align="center" class=""><?PHP echo $pagination;?></td>
  </tr>
  <tr>
	<td align="center" valign="top">
<?PHP
	if ($total_pages == 0)
	//$total_pages is queried from the include above (page_pagination.php')
		{
		//There are no results :(
		echo '<p></p><p></p><b>Sorry, there are no results as of yet.<b><p></p><p></p>:(<p></p><p></p>';
		}else{	
		//There are results :)
		//$result is queried from the include above (page_pagination.php')
		while($r = mysql_fetch_array($result))
			{			
			//Print out the results
			echo $r['info'].'<br>';
			}
			//End of while statement
		}
		//End of if statement
?>
	</td>
  </tr>
  <tr>
	<td> </td>
  </tr>
</table>
</body>
</html>
page_pagination.php
<?PHP

//Source...http://www.strangerstudios.com/sandbox/pagination/diggstyle.php
//Customize the css...http://www.mis-algoritmos.com/2007/03/16/some-styles-for-your-pagination/
//Help to impliment...http://www.phpeasystep.com/phptu/29.html


	//include('db.php');	// include your code to connect to DB.
	$tbl_name="upload";		//****EDIT HERE**** your table name	
	$adjacents = 2;			//****EDIT HERE**** How many adjacent pages should be shown on each side of active page?
	
	/* 
	   First get total number of rows in data table. 
	   If you have a WHERE clause in your query, make sure you mirror it here.
	*/
	$query = "SELECT COUNT(*) as num FROM $tbl_name";
	$total_pages = mysql_fetch_array(mysql_query($query));
	$total_pages = $total_pages['num'];
	
	/* Setup vars for query. */
	$targetpage = "page.php"; 				//****EDIT HERE**** your file name  (the name of the page referring to this file)
	$limit = 7; 							//****EDIT HERE**** how many items to show per page
	$page = $_GET['page'];
	if($page) 
		$start = ($page - 1) * $limit; 			//first item to display on this page
	else
		$start = 0;								//if no page var is given, set start to 0
	
	/* Get data. */
	$sql = "SELECT * FROM $tbl_name WHERE `active` = 1 ORDER BY `date` DESC LIMIT $start, $limit";	//****EDIT HERE**** you need to edit... WHERE `active` = 1 ORDER BY `date` DESC
	$result = mysql_query($sql);
	
	/* Setup page vars for display. */
	if ($page == 0) $page = 1;					//if no page var is given, default to 1.
	$prev = $page - 1;							//previous page is page - 1
	$next = $page + 1;							//next page is page + 1
	$lastpage = ceil($total_pages/$limit);		//lastpage is = total pages / items per page, rounded up.
	$lpm1 = $lastpage - 1;						//last page minus 1
	
	/* 
		Now we apply our rules and draw the pagination object. 
		We're actually saving the code to a variable in case we want to draw it more than once.
	*/
	$pagination = "";
	if($lastpage > 1)
	{	
		$pagination .= "<div class=\"pagination\">";
		//previous button
		if ($page > 1) 
			$pagination.= "<a href=\"$targetpage?page=$prev\"><< previous</a>";
		else
			$pagination.= "<span class=\"disabled\"><< previous</span>";	
		
		//pages	
		if ($lastpage < 7 + ($adjacents * 2))	//not enough pages to bother breaking it up
		{	
			for ($counter = 1; $counter <= $lastpage; $counter++)
			{
				if ($counter == $page)
					$pagination.= "<span class=\"current\">$counter</span>";
				else
					$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";					
			}
		}
		elseif($lastpage > 5 + ($adjacents * 2))	//enough pages to hide some
		{
			//close to beginning; only hide later pages
			if($page < 1 + ($adjacents * 2))		
			{
				for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
				{
					if ($counter == $page)
						$pagination.= "<span class=\"current\">$counter</span>";
					else
						$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";					
				}
				$pagination.= "...";
				$pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
				$pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";		
			}
			//in middle; hide some front and some back
			elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
			{
				$pagination.= "<a href=\"$targetpage?page=1\">1</a>";
				$pagination.= "<a href=\"$targetpage?page=2\">2</a>";
				$pagination.= "...";
				for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
				{
					if ($counter == $page)
						$pagination.= "<span class=\"current\">$counter</span>";
					else
						$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";					
				}
				$pagination.= "...";
				$pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
				$pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";		
			}
			//close to end; only hide early pages
			else
			{
				$pagination.= "<a href=\"$targetpage?page=1\">1</a>";
				$pagination.= "<a href=\"$targetpage?page=2\">2</a>";
				$pagination.= "...";
				for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
				{
					if ($counter == $page)
						$pagination.= "<span class=\"current\">$counter</span>";
					else
						$pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";					
				}
			}
		}
		
		//next button
		if ($page < $counter - 1) 
			$pagination.= "<a href=\"$targetpage?page=$next\">next >></a>";
		else
			$pagination.= "<span class=\"disabled\">next >></span>";
		$pagination.= "</div>\n";		
	}
?>

I hope this helps.

Edited by Hooch, 06 September 2008 - 02:18 PM.


#2 derek.sullivan

derek.sullivan

    Jedi In Training

  • Members
  • PipPip
  • 343 posts
  • Gender:Male
  • Location:Georgia
  • Interests:preaching, programming, music, friends, outdoors, moves, books

Posted 06 September 2008 - 04:08 PM

This tutorial from P2L has never failed me. Try this out...

http://www.pixel2lif...n_to_your_site/

#3 rc69

rc69

    PHP Master PD

  • P2L Staff
  • PipPipPipPip
  • 3,827 posts
  • Gender:Male
  • Location:Here
  • Interests:Web Development

Posted 06 September 2008 - 04:54 PM

Moved to proper category.

#4 Mr.Shawn

Mr.Shawn

    Young Padawan

  • Members
  • Pip
  • 15 posts
  • Gender:Male
  • Location:London, Emirates Stadium

Posted 16 January 2009 - 07:13 AM

Nice link. Very good post.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users