Seitenanzeige verkürzen
Kurt D.
- php
Ich habe in meinem Gästebuch die Seitenanzeige folgendermaßen realisiert:
$meps=6; /*Maximal Entries Per Site*/
$comnr=0;
$sql2="SELECT id FROM gbook";
$coms=mysql_query($sql2, $db);
while ($row = mysql_fetch_array ($coms)) { $gbcount++; }
if($gbcount>$meps) {
$gbwork = $meps;
$page = 1;
$gbstart=0;
print "zu Seite ";
}
while(($gbcount+$meps)>$gbwork) {
if($gbstart!=0){
print "-";
}
print "<a href=\"index.php?show=gbook&start=$gbstart\">$page</a>";
$gbstart=0 + $gbwork;
$page=(($gbwork / $meps)+1);
$gbwork=$gbwork + $meps;
}
funktioniert auch tadellos, aber:
Wenn die Seitenanzahl einmal eine bestimmte Menge überschreitet, soll nur mehr die erste Seite, die aktuelle Seite, 2 Seiten vor und nach der aktuellen Seite und die letzte Seite als Link angezeigt werden.
Dazwischen sollen die fehlenden Seitenanzeigen durch drei Punkte symbolisiert werden.
Da fehlt mir einfach jede Vorstellung, wie man sowas realisieren kann, zudem ich auch nicht all zu gut (Anfänger mit einigen, wenigen Kenntnissen) in PHP bin.
Vielleicht kann mir ja von euch jemand die nötigen Tips geben?
mfg
Kurt
hi,
Wenn die Seitenanzahl einmal eine bestimmte Menge überschreitet, soll nur mehr die erste Seite, die aktuelle Seite, 2 Seiten vor und nach der aktuellen Seite und die letzte Seite als Link angezeigt werden.
Dazwischen sollen die fehlenden Seitenanzeigen durch drei Punkte symbolisiert werden.
Wo ist das Problem?
Ermittle, ob die Gesamtanzahl an Seiten groß genug ist.
Wenn ja,
Behandle darüber hinaus noch die Sonderfälle, in denen sich $aktuelleSeitenNummer so nah an den beiden Grenzen befindet, so dass die Punkte überflüssig sind, bzw. dass die Links zu einer oder zwei Seiten davor/danach überflüssig sind.
gruß,
wahsaga
Wo ist das Problem?
Ermittle, ob die Gesamtanzahl an Seiten groß genug ist.
Wenn ja,
- gebe den Link zur ersten Seite aus,
- gebe drei Punkte aus,
- gebe den Link zur $aktuelleSeitenNummer-2 aus,
- gebe den Link zur $aktuelleSeitenNummer-1 aus,
- gebe den Link zur $aktuelleSeitenNummer aus,
- gebe den Link zur $aktuelleSeitenNummer+1 aus,
- gebe den Link zur $aktuelleSeitenNummer+2 aus,
- gebe drei Punkte aus,
- gebe den Link zur letzten Seite aus
Behandle darüber hinaus noch die Sonderfälle, in denen sich $aktuelleSeitenNummer so nah an den beiden Grenzen befindet, so dass die Punkte überflüssig sind, bzw. dass die Links zu einer oder zwei Seiten davor/danach überflüssig sind.
gruß,
wahsaga
Servus wahsaga,
das Problem ist einfach, daß mir der Ablauf im Großen und Ganzen schon klar ist, lediglich, wie ich das in PHP-Code umsetzen soll, ist ...
Ach so, jetzt ist mir ein Geistesblitz gekommen, $_GET['start'] ist ja vorhanden, ausgenommen beim erstmaligen Aufruf des Gästebuchs.
Damit müsste man ja arbeiten können!
Ich werd da mal was ausschnapsen und meld mich dann wieder.
Danke
Kurt
Hi Kurt,
- gebe den Link zur $aktuelleSeitenNummer aus,
An dieser Stelle brauchst du natürlich keinen Link auszugeben, gib an dieser Stelle einfach die Zahl aus.
Ach so, jetzt ist mir ein Geistesblitz gekommen, $_GET['start'] ist ja vorhanden, ausgenommen beim erstmaligen Aufruf des Gästebuchs.
Verwende $_GET['start'], wenn vorhanden und setze andernfalls einen Default-Wert (z.B. 1 für die erste Seite), könnte so aussehen:
$start = isset($_GET['start']) ? (int) $_GET['start'] : 1;
Die Ausgabe der Links könnte in etwa so aussehen:
// Wenn aufgerufene Seite nicht die erste Seite ist, ...
if($start !== 1) {
// Link auf die erste Seite ausgeben
}
// Wenn mehr wie 3 Seiten vor der aktuellen Seite sind, die
// aktuelle Seite also über 4 ist, ...
if($start > 4) {
// die Punkte ausgeben
echo "...";
}
// Wenn die aufgerufene Seite nach Seite 2 kommt, ...
if($start > 2) {
// Link zu Seite $start-2 ausgeben
}
// Wenn die aufgerufene Seite nach Seite 3 kommt, ...
if($start > 3) {
// Link zu Seite $start-1 ausgeben
}
// Anschließend Nummer der aktuellen Seite ausgeben
echo $start;
// Und nun das gleiche wie oben, nur eben rückwärts
Nur mal so ein kleiner Ideenansatz ;-)
MfG, Dennis.
Hi Kurt,
- gebe den Link zur $aktuelleSeitenNummer aus,
An dieser Stelle brauchst du natürlich keinen Link auszugeben, gib an dieser Stelle einfach die Zahl aus.
»»[...]
Nur mal so ein kleiner Ideenansatz ;-)
MfG, Dennis.
Hi Dennis,
ich bin zwar noch nicht dazugekommen, etwas zu machen, aber dein Ansatz ist sicher hilfreich für mich.
Ich werde das dann bei nächster Gelegenheit mal durchackern und versuchen, auf einen grünen Zweig zu kommen.
Danke
Kurt
echo $begrüßung;
[Seitenanzeige]
Vielleicht kann mir ja von euch jemand die nötigen Tips geben?
MySQL kennt die LIMIT-Klausel, um von der Ergebnismenge nur einen Teil auszugeben. Möchte man darüber hinaus noch die Anzahl der unLIMITierten Datensätze erhalten, kann man SQL_CALC_FOUND_ROWS direkt hinter dem SELECT einfügen und eine zweite kurze Abfrage nachschieben: SELECT FOUND_ROWS()
Wenn du mit deinen Überlegungen zum Blättermechanismus fertig bist :-) kannst du dir ja mal die PEAR-Klasse Pager ansehen (Handbuchseite).
echo "$verabschiedung $name";
echo $begrüßung;
[Seitenanzeige]
Vielleicht kann mir ja von euch jemand die nötigen Tips geben?
MySQL kennt die LIMIT-Klausel, um von der Ergebnismenge nur einen Teil auszugeben. Möchte man darüber hinaus noch die Anzahl der unLIMITierten Datensätze erhalten, kann man SQL_CALC_FOUND_ROWS direkt hinter dem SELECT einfügen und eine zweite kurze Abfrage nachschieben: SELECT FOUND_ROWS()
Wenn du mit deinen Überlegungen zum Blättermechanismus fertig bist :-) kannst du dir ja mal die PEAR-Klasse Pager ansehen (Handbuchseite).
echo "$verabschiedung $name";
*hmpf*
Das ist mir eindeutig zu hoch, wenn ich mal zitieren darf:
[zitat]...zudem ich auch nicht all zu gut (Anfänger mit einigen, wenigen Kenntnissen) in PHP bin...[/zitat]
MySQL ist sozusagen noch eine Stufew höher auf der Leiter anzusiedeln, auf der ich da raufzuklettern versuche. ;)
Gruß
Kurt