PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] Blätterfunktion


cellunatic
2005-09-25, 11:13:48
hi again,
in letzter zeit spamme ich hier das forum mit fragen über sql und php ;D
so ich hab mir mal nach diesem vorbild hier:
http://www.php-einfach.de/tuts_mysql_blaetterfunktion.php
ne blätterfunktion gebastelt. allerdings ist meine frage, wenn ich dann später mehr als sagen wir mal 10 seiten habe auf denen ich blättern kann, will ich ja nicht irgendwann ne riese blätterlinkliste haben.
also anstatt 1 2 3 4 5 6 7 8 9 10 usw. wäre es doch cool wenn mensch ungefähr sone anzeige hier hat: 1 2 .... 9 10 also sozusagen die ersten und die letzten beiden verfügbaren seiten anzeigt. und daneben halt immer nen "Weiter" Pfeil also so: << 3 4 .... 7 8 >>
hat jemand nen plan wie ich das realisiere? :-)

PatTheMav
2005-09-25, 12:36:25
Ich hab da mal vor paar Jahren mir ne Funktion geschrieben, is bissle rudimentär, würd ich jetzt auch nicht mehr so machen, aber ist evtl. ne Hilfe für dich, da selbst auf nen besseren Code zu kommen :
function pagelist($max,$maxperpage,$s,$page,$url) {

if($max>$maxperpage) {
$seiten=intval($max/$maxperpage);
if($max%$maxperpage) {
$seiten++;
}
$pagelist.="Pages ($seiten): <b>";
} else {
$pagelist="Pages (1): <b>[1]";
}

if(($page-3)>1) {
$pagelist.="<a href=\"".$url."page=1\">&laquo; First</a> ... ";
}

if($s > 0) {
$back=($s/$maxperpage);
if($back < 0) {
$back = 0;
}
$pagelist.="<a href=\"".$url."page=$back\">&laquo;</a>";
}

for ($i=($page-3);$i<=($page+3) AND $i<=$seiten;$i++) {
if ($i <= 0 ) { $i = 1; }
if ($i == $page) {
$pagelist.="[$i]";
} else {
$pagelist.=" <a href=\"".$url."page=$i\">$i</a> ";
}
}

if($s < $max-$maxperpage) {
$fwd=(($s+$maxperpage)/$maxperpage); $fwd++;
$pagelist.="<a href=\"".$url."page=$fwd\">&raquo;</a>";
}

if(($page-3)<=1 AND $seiten>3) {
$fwd=intval($max/$maxperpage);
if($max%$maxperpage) { $fwd++; }
$pagelist.=" ... <a href=\"".$url."page=$fwd\">Last &raquo;</a>";
}
$pagelist.="</b>";
// print $pagelist;
return $pagelist;
}

Variablen waren glaub ich wie folgt :

$max = Gesamtanzahl der Einträge, die über x Seiten verteilt werden
$maxperpage = Gesamtanzahl der Einträge, die auf jeder jeder Seite jeweils angezeigt werden.
$s = SQL-Offset, der im Query verwendet wird, berechnet durch ($page*$maxperpage)-$maxperpage.
$page = Die aktuelle Seite, wird zur Hervorhebung benötigt
$url = Die Basis-URI, welche für die Links zu den anderen Seiten benötigt werden.

Wie gesagt, ist alles andere als elegant, ist aber auch alter Code :)

RMC
2005-09-25, 14:23:04
Jo, sowas hab ich mir auch mal gemacht, verwend ich jetz auch überall. Is ganz praktisch.

Hab mir in der config einfach Konstanten angelegt, und das ganze ist dann sehr flexibel.

Wichtig ist beim SQL Statement mit "LIMIT" zu arbeiten, sodass wirklich nur die Datensätze rausgeholt werden, die gerade angezeigt werden. Also zb Seite 7 von 3923...wär ja blöd immer soviele Datensätze zu selektieren ;) Am Anfang muss man halt einmal die Gesamtanzahl mitzählen, damit man weiß wieviele Einträge es insgesamt gibt, um die Seitenzahlen und die Links berechnen zu können...aber wenn das einmal feststeht ists kein Problem mehr.