multimolti
Erfahrenes Mitglied
Soo, hier ist das Script. Habe es getestet, sollten keine Bugs mehr drin sein. Layout kannst du selber anpassen, und dem Script halt die Werte der aktuellen Seite und die Gesamtseitenanzahl geben.
Testen kannst du es hier: http://multimolti.com/test/pagination.php
Testen kannst du es hier: http://multimolti.com/test/pagination.php
PHP:
<?php
$minpage = 1; // niedrigste Seitenzahl, wahrscheinlich 1 oder 0
$maxpage = 100; // höchste Seitenzahl, kommt auf die Anzahl der Posts und Posts/Page an
$area = 3; // wie viele Links zu Seiten "um deine Seite herum" anzeigen?
$currpage = (isset($_GET['p']) && is_numeric($_GET['p']) ? $_GET['p'] : 1) ; // die momentane Seite
// Funktion, die entweder den Link oder die Zahl fett ausgibt, wenn man grade auf der Seite ist
function displayLink($page, $currpage)
{
if($page == $currpage)
echo '<b>'.$page.'</b> | ';
else
echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?p='.$page.'">'.$page.'</a> | ';
}
// zum Test anzeigen, auf welcher Seite man ist
echo '<h1>Ich bin momentan auf Seite '.$currpage.'</h1>';
// wenn es nur so wenig Seiten gibt, dass sich Pagination nicht lohnt, einfach alle
// Seiten anzeigen
if($maxpage <= $area * 4 + 1)
{
for($i = 1; $i <= $maxpage; $i++)
displayLink($i);
}
else
{
// ansonsten Pagination anwenden
// immer mindestens $area Links vorne anzeigen
for($i = 1; $i <= $area; $i++)
displayLink($i, $currpage);
// checken, ob die Links links und rechts von der akteullen Seite sich mit den Links vorne
// und hinten überschneiden, wenn ja, verhindern
if($currpage - $area <= $area)
{
$middlemin = $area + 1;
}
else
{
$middlemin = $currpage - $area;
// Punkte nur anzeigen, wenn sie auch benötigt werden
echo " ... | ";
}
if($currpage + $area >= $maxpage - $area)
{
$middlemax = $maxpage - $area - 1;
$echodots = false;
}
else
{
$middlemax = $currpage + $area;
// Punkte nur anzeigen, wenn sie auch benötigt werden
$echodots = true;
}
// wenn möglich, $area Links links und rechts von der aktuellen Seite anzeigen
for($i = $middlemin; $i <= $middlemax; $i++)
displayLink($i, $currpage);
if($echodots)
echo " ... | ";
// immer mindestens $area Links hinten anzeigen
for($i = $maxpage - $area; $i <= $maxpage; $i++)
displayLink($i, $currpage);
}
?>