Jump to content

Pagination problem


scmeeker

Recommended Posts

I've got this Pagination script almost working but perhaps with another set of experienced eyes, I can get my problem solved. 

 

It works BUT the one problem I'm having is it only displays the "first page number" and then the "ALL" instead of showing all the page numbers for the maximum rows defined per page.

 

Here is the code and I appreciate any suggestions and help (I've purposely left out the d-base connection):

 

require_once 'paginator.class.php';

mysql_connect("", "", "", "") or die(mysql_error());
mysql_select_db("table") or die(mysql_error());

$paginatestuff = mysql_query("SELECT COUNT(*) FROM table")
or die(mysql_error());



$pages = new Paginator;
$pages->items_total = $paginatestuff;
$pages->mid_range = 7;
$pages->paginate(); 

  //Set the selected category
$selected_cat = (isset($_GET["cat_id"])) ? $_GET["cat_id"] : false;

//show categories first
$result = mysql_query("SELECT cat_id, cat_title FROM category ORDER BY cat_id")
or die(mysql_error());

if (mysql_num_rows($result) < 1)
{
   $categoryList = "<p><em>Sorry, no categories to browse.</em></p>";
}
else
{
    //Display the categories
    while ($cats = mysql_fetch_array($result))
    {
        $categoryList .= "<a href=\"listtest5.php?cat_id={$cats['cat_id']}\">{$cats['cat_title']} <br /></a>\n";
        if ($cats['cat_id']==$selected_cat);
		}
		//get items
            $get_items_sql = mysql_query("SELECT id, name, website, city, state, country,  date FROM table WHERE  MONTH(date) = MONTH(CURDATE()) ORDER BY date $pages->limit")
            or die(mysql_error());

            if (mysql_num_rows($get_items_sql) < 1)
            {
                $content = "<p><em>Sorry, no items in this category.</em></p>\n";
            }
            else
            {
                $content .= "<ul>\n";
                while ($items = mysql_fetch_array($get_items_sql))
                {
                
                    $item_url = $items['website'];
                    $item_title = stripslashes($items['name']);
                    $item_city = $items['city'];
                    $item_state = $items['state'];
                $item_country = $items['country'];
				$item_id = $items['id'];
                    $content .= "";

				$content .="<table width=\"500\" height=\"50\" border=\"0\"><tr><td width=\"200\"><a href=$item_url target=\"_blank\">$item_title</a></td></tr><tr>
          <td width=\"200\" class=blackfont>Location:  {$item_city}, {$item_state}</td></tr><tr><td class=blackfont>Country:  {$item_country}</td></tr><br />
</table>";
 $content .= "\n";
			}
			$content .= "</ul>\n";
			}


}

 

Then here is the pagination class reference file if you need that too for reference:

 


<?php

class Paginator{
var $items_per_page;
var $items_total;
var $current_page;
var $num_pages;
var $mid_range;
var $low;
var $high;
var $limit;
var $return;
var $default_ipp = 10;
var $querystring;

function Paginator()
{
	$this->current_page = 1;
	$this->mid_range = 7;
	$this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp;
}

function paginate()
{
	if($_GET['ipp'] == 'All')
	{
		$this->num_pages = ceil($this->items_total/$this->default_ipp);
		$this->items_per_page = $this->default_ipp;
	}
	else
	{
		if(!is_numeric($this->items_per_page) OR $this->items_per_page <= 0) $this->items_per_page = $this->default_ipp;
		$this->num_pages = ceil($this->items_total/$this->items_per_page);
	}
	$this->current_page = (int) $_GET['page']; // must be numeric > 0
	if($this->current_page < 1 Or !is_numeric($this->current_page)) $this->current_page = 1;
	if($this->current_page > $this->num_pages) $this->current_page = $this->num_pages;
	$prev_page = $this->current_page-1;
	$next_page = $this->current_page+1;

	if($_GET)
	{
		$args = explode("&",$_SERVER['QUERY_STRING']);
		foreach($args as $arg)
		{
			$keyval = explode("=",$arg);
			if($keyval[0] != "page" And $keyval[0] != "ipp") $this->querystring .= "&" . $arg;
		}
	}

	if($_POST)
	{
		foreach($_POST as $key=>$val)
		{
			if($key != "page" And $key != "ipp") $this->querystring .= "&$key=$val";
		}
	}

	if($this->num_pages > 10)
	{
		$this->return = ($this->current_page != 1 And $this->items_total >= 10) ? "<a class=\"paginate\" href=\"$_SERVER[php_SELF]?page=$prev_page&ipp=$this->items_per_page$this->querystring\">« Previous</a> ":"<span class=\"inactive\" href=\"#\">« Previous</span> ";

		$this->start_range = $this->current_page - floor($this->mid_range/2);
		$this->end_range = $this->current_page + floor($this->mid_range/2);

		if($this->start_range <= 0)
		{
			$this->end_range += abs($this->start_range)+1;
			$this->start_range = 1;
		}
		if($this->end_range > $this->num_pages)
		{
			$this->start_range -= $this->end_range-$this->num_pages;
			$this->end_range = $this->num_pages;
		}
		$this->range = range($this->start_range,$this->end_range);

		for($i=1;$i<=$this->num_pages;$i++)
		{
			if($this->range[0] > 2 And $i == $this->range[0]) $this->return .= " ... ";
			// loop through all pages. if first, last, or in range, display
			if($i==1 Or $i==$this->num_pages Or in_array($i,$this->range))
			{
				$this->return .= ($i == $this->current_page And $_GET['page'] != 'All') ? "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$_SERVER[php_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
			}
			if($this->range[$this->mid_range-1] < $this->num_pages-1 And $i == $this->range[$this->mid_range-1]) $this->return .= " ... ";
		}
		$this->return .= (($this->current_page != $this->num_pages And $this->items_total >= 10) And ($_GET['page'] != 'All')) ? "<a class=\"paginate\" href=\"$_SERVER[php_SELF]?page=$next_page&ipp=$this->items_per_page$this->querystring\">Next »</a>\n":"<span class=\"inactive\" href=\"#\">» Next</span>\n";
		$this->return .= ($_GET['page'] == 'All') ? "<a class=\"current\" style=\"margin-left:10px\" href=\"#\">All</a> \n":"<a class=\"paginate\" style=\"margin-left:10px\" href=\"$_SERVER[php_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
	}
	else
	{
		for($i=1;$i<=$this->num_pages;$i++)
		{
			$this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" href=\"$_SERVER[php_SELF]?page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
		}
		$this->return .= "<a class=\"paginate\" href=\"$_SERVER[php_SELF]?page=1&ipp=All$this->querystring\">All</a> \n";
	}
	$this->low = ($this->current_page-1) * $this->items_per_page;
	$this->high = ($_GET['ipp'] == 'All') ? $this->items_total:($this->current_page * $this->items_per_page)-1;
	$this->limit = ($_GET['ipp'] == 'All') ? "":" LIMIT $this->low,$this->items_per_page";
}

function display_items_per_page()
{
	$items = '';
	$ipp_array = array(10,25,50,100,'All');
	foreach($ipp_array as $ipp_opt)	$items .= ($ipp_opt == $this->items_per_page) ? "<option selected value=\"$ipp_opt\">$ipp_opt</option>\n":"<option value=\"$ipp_opt\">$ipp_opt</option>\n";
	return "<span class=\"paginate\">Items per page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[php_SELF]?page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>\n";
}

function display_jump_menu()
{
	for($i=1;$i<=$this->num_pages;$i++)
	{
		$option .= ($i==$this->current_page) ? "<option value=\"$i\" selected>$i</option>\n":"<option value=\"$i\">$i</option>\n";
	}
	return "<span class=\"paginate\">Page:</span><select class=\"paginate\" onchange=\"window.location='$_SERVER[php_SELF]?page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page$this->querystring';return false\">$option</select>\n";
}

function display_pages()
{
	return $this->return;
}
}
?>

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

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.