class WdPager
{
public $add_arrows = true;
public $reverse_arrows = false;
public $separator = '<span class="separator">,</span>';
public $gap = '<span class="gap"> ... </span>';
public $base_url = '?page=';
private $count;
private $limit;
private $on_page;
public function __construct($count, $limit=5, $on_page=0)
{
$this->count = $count;
$this->limit = $limit;
$this->on_page = $on_page;
}
public function getURL($n)
{
return $this->base_url . $n;
}
public function getLink($n, $label=NULL, $class=NULL)
{
$rc = '<a href="' . $this->getURL($n) . '"';
if ($class)
{
$rc .= ' class="' . $class . '"';
}
$rc .= '>';
$rc .= $label ? $label : ($n + 1);
$rc .= '</a>';
return $rc;
}
public function getPosition($n)
{
return '<strong>' . $n . '</strong>';
}
public function __toString()
{
$pages = ceil($this->count / $this->limit);
if ($pages == 1)
{
return;
}
$on_page = $this->on_page + 1;
$rc = NULL;
if ($pages > 10)
{
$init_page_max = min($pages, 3);
for ($i = 1 ; $i < $init_page_max + 1 ; $i++)
{
if ($i == $on_page)
{
$rc .= $this->getPosition($i);
}
else
{
$rc .= $this->getLink($i - 1);
}
if ($i < $init_page_max)
{
$rc .= $this->separator;
}
}
if ($pages > 3)
{
if (($on_page > 1) && ($on_page < $pages))
{
$rc .= ($on_page > 5) ? $this->gap : $this->separator;
$init_page_min = ($on_page > 4) ? $on_page : 5;
$init_page_max = ($on_page < $pages - 4) ? $on_page : $pages - 4;
for ($i = $init_page_min - 1; $i < $init_page_max + 2; $i++)
{
$rc .= ($i == $on_page) ? $this->getPosition($i) : $this->getLink($i - 1);
if ($i < $init_page_max + 1)
{
$rc .= $this->separator;
}
}
$rc .= ($on_page < $pages - 4) ? $this->gap : $this->separator;
}
else
{
$rc .= $this->gap;
}
for($i = $pages - 2 ; $i < $pages + 1 ; $i++)
{
$rc .= ($i == $on_page) ? $this->getPosition($i) : $this->getLink($i - 1);
if ($i < $pages)
{
$rc .= $this->separator;
}
}
}
}
else
{
for ($i = 1 ; $i < $pages + 1 ; $i++)
{
$rc .= ($i == $on_page) ? $this->getPosition($i) : $this->getLink($i - 1);
if ($i < $pages)
{
$rc .= $this->separator;
}
}
}
if ($this->add_arrows)
{
#
# add next (>) link
#
if ($this->reverse_arrows ? ($on_page > 1) : ($on_page < $pages))
{
$rc .= $this->getLink($this->reverse_arrows ? $on_page - 2 : $on_page, '>', 'next');
}
#
# add prev (<) link
#
if ($this->reverse_arrows ? ($on_page < $pages) : ($on_page > 1))
{
$rc = $this->getLink($this->reverse_arrows ? $on_page : $on_page - 2, '<', 'previous') . $rc;
}
}
return $rc;
}
}
ExempleImaginons un blog avec 30 messages. Ce serait très pénible pour le visiteur que tous les messages soient affichés sur une même page. On décide donc de n'afficher que 5 messages par page et on va utiliser la classe WdPager pour nous créer notre bloc de pagination :
$pager = new WdPager(30, 5);
echo $pager
En savoir plus...