PHP facebook pagination class
http://forum.developers.facebook.net/viewtopic.php?pid=88426
[ad code=4 align=center]
<?php
/**
* Facebook style paginator
*
* @param page the page number (1-based)
* @param total_items the total amount of items
* @param limit the amount of items to show per page
* @param ajax an array with each of clickrewrite[url|id|form]
* @param url the url the links point to
* @param query_string the string to be appended to url
* @param item name the name of items shown in summary
* @param position whether paginator is on top or bottom of page
* @return pagination string to be placed in html code
*/
function get_pagination_string(
$page = 1,
$total_items,
$limit = 8,
$ajax='',
$target_page = '',
$page_string = '?page=',
$summary_name = 'items',
$placement = 'summary'
)
{
// DEFAULTS
$adjacents = 5;
// HTML
$div_bar = '<div>';
$display = '<div>Displaying %d-%d of %d %s.</div>';
$ul = '<ul id="pag_nav_links">';
$link = '<li><a href="%s%s%s">%s</a></li>';
$current_link = '<li><a href="%s%s%s">%s</a></li>';
$ajax_link = '<li><a href="#" clickrewriteurl="%s&page=%s" clickrewriteid="%s" clickrewriteform="%s">%s</a></li>';
$current_ajax_link = '<li><a href="#" clickrewriteurl="%s&page=%s" clickrewriteid="%s" clickrewriteform="%s">%s</a></li>';
$ul_close = '</ul>';
$div_close = '</div>';
$div_font = '<div style="font-size:11px;">%s</div>';
// VARS
if(substr($page_string, 0, 1) != '?')
$page_string = '?' . $page_string;
if(substr($page_string, strlen($page_string) - 5) != 'page=')
$page_string .= '&page=';
$prev = $page - 1;
$next = $page + 1;
$firstpage = 1;
$lastpage = ceil($total_items / $limit);
$fiop = ($limit * $page) - $limit + 1;
$liop = min($limit * $page, $total_items);
// DRAW PAGINATOR
// the footer paginator has no summary and the current page has a different gfx
$type = ($placement == 'summary') ? 'summary' : 'footer';
$pagination = sprintf($div_bar, $type);
// Draw summary
if($placement == 'summary')
$pagination .= sprintf($display, $fiop, $liop, $total_items, $summary_name);
if($lastpage > 1)
{
$pagination .= $ul;
// First page selector
if ($page > 2)
{
if(!empty($ajax))
{
$pagination .= sprintf(
$ajax_link,
$ajax['rewriteurl'],
$firstpage,
$ajax['rewriteid'],
$ajax['rewriteform'],
'First');
}
else
{
$pagination .= sprintf(
$link,
$target_page,
$page_string,
$firstpage,
'First');
}
}
// Previous page selector
if ($page > 1)
{
if(!empty($ajax))
{
$pagination .= sprintf(
$ajax_link,
$ajax['rewriteurl'],
$firstpage,
$ajax['rewriteid'],
$ajax['rewriteform'],
'Prev');
}
else
{
$pagination .= sprintf(
$link,
$target_page,
$page_string,
$firstpage,
'Prev');
}
}
// Page selectors
if ($page < 4)
{
for ($counter = 1; $counter <= min(5, $lastpage); $counter++)
{
if ($counter == $page)
{
if(!empty($ajax))
{
$pagination .= sprintf(
$current_ajax_link,
$ajax['rewriteurl'],
$counter,
$ajax['rewriteid'],
$ajax['rewriteform'],
$counter);
}
else
{
$pagination .= sprintf(
$current_link,
$target_page,
$page_string,
$counter,
$counter);
}
}
else
{
if(!empty($ajax))
{
$pagination .= sprintf(
$ajax_link,
$ajax['rewriteurl'],
$counter,
$ajax['rewriteid'],
$ajax['rewriteform'],
$counter);
}
else
{
$pagination .= sprintf(
$link,
$target_page,
$page_string,
$counter,
$counter);
}
}
}
}
elseif ($page > $lastpage - 3)
{
for($counter = $lastpage - min(5, $lastpage);
$counter <= $lastpage;
$counter++)
{
if ($counter == $page)
{
if(!empty($ajax))
{
$pagination .= sprintf(
$current_ajax_link,
$ajax['rewriteurl'],
$counter,
$ajax['rewriteid'],
$ajax['rewriteform'],
$counter);
}
else
{
$pagination .= sprintf(
$current_link,
$target_page,
$page_string,
$counter,
$counter);
}
}
else
{
if(!empty($ajax))
{
$pagination .= sprintf(
$ajax_link,
$ajax['rewriteurl'],
$counter,
$ajax['rewriteid'],
$ajax['rewriteform'],
$counter);
}
else
{
$pagination .= sprintf(
$link,
$target_page,
$page_string,
$counter,
$counter);
}
}
}
}
else
{
for($counter = $page - 2; $counter <= $page + 2; $counter++)
{
if ($counter == $page)
{
if(!empty($ajax))
{
$pagination .= sprintf(
$current_ajax_link,
$ajax['rewriteurl'],
$counter,
$ajax['rewriteid'],
$ajax['rewriteform'],
$counter);
}
else
{
$pagination .= sprintf(
$current_link,
$target_page,
$page_string,
$counter,
$counter);
}
}
else
{
if(!empty($ajax))
{
$pagination .= sprintf(
$ajax_link,
$ajax['rewriteurl'],
$counter,
$ajax['rewriteid'],
$ajax['rewriteform'],
$counter);
}
else
{
$pagination .= sprintf(
$link,
$target_page,
$page_string,
$counter,
$counter);
}
}
}
}
//next button
if ($page < $lastpage)
{
if(!empty($ajax))
{
$pagination .= sprintf(
$ajax_link,
$ajax['rewriteurl'],
$next,
$ajax['rewriteid'],
$ajax['rewriteform'],
'Next');
}
else
{
$pagination .= sprintf(
$link,
$target_page,
$page_string,
$next,
'Next');
}
}
//last button
if ($page < $lastpage - 1)
{
if(!empty($ajax))
{
$pagination .= sprintf(
$ajax_link,
$ajax['rewriteurl'],
$lastpage,
$ajax['rewriteid'],
$ajax['rewriteform'],
'Last');
}
else
{
$pagination .= sprintf(
$link,
$target_page,
$page_string,
$lastpage,
'Last');
}
}
$pagination .= $ul_close;
}
$pagination .= $div_close;
$pagination = sprintf($div_font, $pagination);
return $pagination;
}