<?php ?> on every line is a complete mess!
php should be structured like "real" code - notice the similarities? - Feel Free to steal this code, all it does it provide pagination like you see on digg.com
<?php
Class Paginate
{
var $total_pages;
var $limit;
var $ajax_component;
var $sort_method;
var $page;
var $tags;
var $adjacents = 3;
function GetLinks()
{
if ($this->page == 0) $this->page = 1;
$prev = $this->page - 1;
$next = $this->page + 1;
$lastpage = ceil($this->total_pages/$this->limit);
$lpm1 = $lastpage - 1;
$pagination = "";
if($lastpage > 1)
{
$pagination .= "<div class="pagination">";
//previous button
if ($this->page > 1)
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$prev."', '".$this->tags."')">« prev</a>";
else
$pagination.= "<span class="disabled">« prev</span>";
//pages
if ($lastpage < 7 + ($this->adjacents * 2)) //not enough pages to bother breaking it up
{
for ($counter = 1; $counter <= $lastpage; $counter++)
{
if ($counter == $this->page)
$pagination.= "<span class="current">$counter</span>";
else
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$counter."', '".$this->tags."')">$counter</a>";
}
}
elseif($lastpage > 5 + ($this->adjacents * 2)) //enough pages to hide some
{
//close to beginning; only hide later pages
if($this->page < 1 + ($this->adjacents * 2))
{
for ($counter = 1; $counter < 4 + ($this->adjacents * 2); $counter++)
{
if ($counter == $this->page)
$pagination.= "<span class="current">$counter</span>";
else
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$counter."', '".$this->tags."')">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$lpm1."', '".$this->tags."')">$lpm1</a>";
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$lastpage."', '".$this->tags."')">$lastpage</a>";
}
//in middle; hide some front and some back
elseif($lastpage - ($this->adjacents * 2) > $this->page && $this->page > ($this->adjacents * 2))
{
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'1', '".$this->tags."')">1</a>";
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'2', '".$this->tags."')">2</a>";
$pagination.= "...";
for ($counter = $this->page - $this->adjacents; $counter <= $this->page + $this->adjacents; $counter++)
{
if ($counter == $this->page)
$pagination.= "<span class="current">$counter</span>";
else
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$counter."', '".$this->tags."')">$counter</a>";
}
$pagination.= "...";
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$lpm1."', '".$this->tags."')">$lpm1</a>";
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$lastpage."', '".$this->tags."')">$lastpage</a>";
}
//close to end; only hide early pages
else
{
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'1', '".$this->tags."')">1</a>";
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'2', '".$this->tags."')">2</a>";
$pagination.= "...";
for ($counter = $lastpage - (2 + ($this->adjacents * 2)); $counter <= $lastpage; $counter++)
{
if ($counter == $this->page)
$pagination.= "<span class="current">$counter</span>";
else
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$counter."', '".$this->tags."')">$counter</a>";
}
}
}
//next button
if ($this->page < $counter - 1)
$pagination.= "<a href="javascript://" onclick="ajax_component['".$this->ajax_component."'].GetData('".$this->sort_method."' ,'".$next."', '".$this->tags."')">next »</a>";
else
$pagination.= "<span class="disabled">next »</span>";
$pagination.= "</div>\n";
return $pagination;
}
}
}
?>