|
|
|
Erweiterte Blätterfunktion
Zurück zur Übersicht Manchmal ist es nicht ausreichend, wenn die Blätterfunktion alle Unterseiten anzeigt.
Dies ist z.B. der Fall, wenn man in einem Gästebuch o.ä. 80 Seiten hat.
Darum hier meine Funktion für eine Blätterfunktion, wo nur eine bestimmte Anzahl von Seiten angezeigt werden:
| PHP |
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:
61:
62:
63:
64:
|
<?php
function blaetterfunktion($seite,$maxseite,$url="",$anzahl=4,$get_name="seite")
{
if(ereg("\?",$url)) $anhang = "&";
else $anhang = "?";
if(substr($url,-1,1) == "&") {
$url = substr_replace($url,"",-1,1);
}
else if(substr($url,-1,1) == "?") {
$anhang = "?";
$url = substr_replace($url,"",-1,1);
}
if($anzahl%2 != 0) $anzahl++; //Wenn $anzahl ungeraden, dann $anzahl++
$a = $seite-($anzahl/2);
$b = 0;
$blaetter = array();
while($b <= $anzahl)
{
if($a > 0 AND $a <= $maxseite)
{
$blaetter[] = $a;
$b++;
}
else if($a > $maxseite AND ($a-$anzahl-2)>=0)
{
$blaetter = array();
$a -= ($anzahl+2);
$b = 0;
}
else if($a > $maxseite AND ($a-$anzahl-2)<0)
{
break;
}
$a++;
}
$return = "";
if(!in_array(1,$blaetter) AND count($blaetter) > 1)
{
if(!in_array(2,$blaetter)) $return .= " <a href=\"{$url}{$anhang}{$get_name}=1\">1</a> ...";
else $return .= " <a href=\"{$url}{$anhang}{$get_name}=1\">1</a> ";
}
foreach($blaetter AS $blatt)
{
if($blatt == $seite) $return .= " <b>$blatt</b> ";
else $return .= " <a href=\"{$url}{$anhang}{$get_name}=$blatt\">$blatt</a> ";
}
if(!in_array($maxseite,$blaetter) AND count($blaetter) > 1)
{
if(!in_array(($maxseite-1),$blaetter)) $return .= "... <a href=\"{$url}{$anhang}{$get_name}=$maxseite\">letzte</a> ";
else $return .= " <a href=\"{$url}{$anhang}{$get_name}=$maxseite\">$maxseite</a> ";
}
if(empty($return))
return " <b>1</b> ";
else
return $return;
}
?>
|
|
An die Funktion wird folgendes Übergeben:
$seite: Auf welcher Seite der Besucher immoment ist.
$maxseite: Wieviele Unterseiten es insgesamt gibt.
$url: Die URL, auf die die Links verweisen sollen.
$anzahl: Wieviele Links zu den Seiten ausgegeben werden soll.
$get_name: Der GET-Name für die Seitenanzahl. Wenn dieser seite heißt, dann wird an die URL ?seite=xxx angehängt.
Die Werte für $url, $anzahl und $get_name sind optional.
Kombination mit der einfachen Blätterfunktion
Dieses lässt sich eigentlich sehr einfach mit unserer einfachen Blätterfunktion kombinieren. Als erstes muss man natürlich irgendwie die Funktion mit einbinden, entweder in einer anderen Datei auslagern und per include laden oder direkt in die Datei einbinden.
Anschließend, dort wo vorher die Ausgabe der Seiten waren, steht nun der Aufruf der Funktion.
Insgesamt sieht es so aus:
| PHP |
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:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
|
<?php
//Hier muss die Funktion 'blaetterfunktion' stehen
//Entweder per include laden, oder
//direkt einbinden, also
//function blaetterfunktion($seite,$maxseite,$url="",$anzahl=4,$get_name="seite") //{
//...
//}
// Alter Code wie gewohnt
$seite = $_GET["seite"]; //Abfrage auf welcher Seite man ist
//Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
if(!isset($seite))
$seite = 1;
//Verbindung zu Datenbank aufbauen
$link = mysql_connect("localhost","Username","Passwort") or die ("Keine Verbindung moeglich");
mysql_select_db("Datenbank") or die ("Die Datenbank existiert nicht");
//Einträge pro Seite: Hier 15 pro Seite
$eintraege_pro_seite = 15;
//Ausrechen welche Spalte man zuerst ausgeben muss:
$start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
//Tabelle Abfragen
//Tabelle heißt hier einfach: Tabelle
$abfrage = "SELECT * FROM Tabelle LIMIT $start, $eintraege_pro_seite";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo $row->id."<br>"; // Hier die Ausgabe der Einträge
}
//Jetzt kommt das "Inhaltsverzeichnis",
//sprich dort steht jetzt: Seite: 1 2 3 4 5
//Wie viele Einträge gibt es überhaupt
//Wichtig! Hier muss die gleiche Abfrage sein, wie bei der Ausgabe der Daten
//also der gleiche Text wie in der Variable $abfrage, bloß das hier das LIMIT fehlt
//Sonst funktioniert die Blätterfunktion nicht richtig,
//und hier kann nur 1 Feld abgefragt werden, also id
$result = mysql_query("SELECT COUNT(*) FROM Tabelle");
$menge = mysql_fetch_row($result);
$menge = $menge[0];
//Errechnen wie viele Seiten es geben wird
$wieviele_seiten = ceil($menge / $eintraege_pro_seite);
//Ausgabe der Seitenlinks:
echo "<div align=\"center\">";
echo "<b>Seite:</b> ";
//*****************************************
//* Dieser Abschnitt ist neu
//*****************************************
//Aufruf unserer Funktion
echo blaetterfunktion($seite, $wieviele_seiten);
echo "</div>";
?>
|
|
Für Fragen bitte extra Thema im PHP-Forum eröffnen.
Kommentare
Zurück zur Übersicht
Autor Andavos
|
|
|
|