Ich glaub mal nicht, dass es NUR um das LIMIT geht, in der DB... das leuchtet glaub schon ein, wie ("...LIMIT $starteintrag,$laenge") funktioniert, oder? Nur beachten, dass $starteintrag = 0 für die 1. Zeile, NICHT 1!
So, jetzt zum Hauptproblem! Das Auflisten der Seiten und der Verweise:
Dafür hab ich mir grad mal schnell eine Funktion geschrieben, die vorab alles definieren lässt...
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60: | function seiten_link($seiten_nummer=1,$seiten_gesamt=1,$pro_seite=5,$link_anzahl=3){
$SELF=$_SERVER['PHP_SELF']; if($seiten_gesamt==0)$seiten_gesamt=1;
$layout['actv_page'] = '$i';
$layout['next_page'] = '>>';
$layout['prev_page'] = '<<';
$layout['frst_page'] = '1';
$layout['last_page'] = '$seiten_gesamt';
$layout['page_link'] = '$i';
$layout['spac_page'] = '...';
$layout['spac_link'] = '|';
$layout['star_link'] = 'Seite $seiten_nummer/$seiten_gesamt [';
$layout['ende_link'] = ']';
eval("\$link = \"".$layout['star_link']."\";");
if ($seiten_gesamt<=$link_anzahl){
for ($i=1;$i<=$seiten_gesamt;$i++){
if($i==$seiten_nummer) eval("\$link .= \"".$layout['actv_page']."\";");
else { $page_=$i-1; eval("\$link .= \"".$layout['page_link']."\";"); }
if($i<$seiten_gesamt) eval("\$link .= \"".$layout['spac_link']."\";");
}
eval("\$link .= \"".$layout['ende_link']."\";");
}else{
$anfang=$seiten_nummer-1;
$ende=$anfang+$link_anzahl-1;
if ($anfang<1){
$ende=$ende+1;
$anfang=1;
}
if (($anfang+$link_anzahl-1)>=$seiten_gesamt){
$anfang=$seiten_gesamt-$link_anzahl+1;
$ende=$seiten_gesamt;
}
if ($anfang>1){
$page_=$seiten_nummer-2;
eval("\$link .= \"".$layout['prev_page']."\";");
eval("\$link .= \"".$layout['spac_link']."\";");
eval("\$link .= \"".$layout['frst_page']."\";");
eval("\$link .= \"".$layout['spac_link']."\";");
eval("\$link .= \"".$layout['spac_page']."\";");
eval("\$link .= \"".$layout['spac_link']."\";");
}
for ($i=$anfang;$i<=$ende;$i++){
if($i==$seiten_nummer) eval("\$link .= \"".$layout['actv_page']."\";");
else{$page_=($i-1); eval("\$link .= \"".$layout['page_link']."\";");}
if($i<$seiten_gesamt) eval("\$link .= \"".$layout['spac_link']."\";");
}
if(($seiten_nummer+$link_anzahl-1)<=$seiten_gesamt){
eval("\$link .= \"".$layout['spac_page']."\";");
eval("\$link .= \"".$layout['spac_link']."\";");
$page_=($seiten_gesamt-1);
eval("\$link .= \"".$layout['last_page']."\";");
eval("\$link .= \"".$layout['spac_link']."\";");
$page_=$seiten_nummer;
eval("\$link .= \"".$layout['next_page']."\";");
}
eval("\$link .= \"".$layout['ende_link']."\";");
}
return $link;
} |
Zur Verwendung:
Die Arrays oben kann man frei definieren, lediglich die $variablen MÜSSEN so bleiben, logisch, weil sonst EVAL nicht klappt... Aber alles drumrum - kannste anpassen wie Du willst. Nacher im Programm selbst wird dann diese Kette automatisch mit Folgenden Angaben generiert:
1: | $string = seiten_link($seiten_nummer,$seiten_gesamt,$pro_seite,$link_anzahl); |
Wobei:
$seiten_nummer = die aktive Seite ist (also von 1 - letzte Seite, NICHT VON 0 AB)
$seiten_gesamt = Anzahl der Seiten, am Besten mit
1: | ceil($alle_eintraege/$pro_seite) |
berechnen, klappt am besten...
$pro_seite = Wieviele Einträge pro Seite angezeigt werden sollen
$link_anzahl = Anzahl der Links (z.B. 3 = [1|2|3|...|8|>>] oder 5 = [1|2|3|4|5|...|8|>>] und natürlich mitten drin auch... [<<|1|...|4|5|6|7|8|...|12|>>] nur als Beispiel...
PS: Ach ja wenn noch genug Einträge reinkommen... (ist nur ein Prototyp) - dann könnt Ihr hier ne DEMO sehen:
http://omega2k.dyn.ee:592/guestbook/guestbook.php
---
@
http://www.omega2k.de