Addon:Userliste mehrseitig

Aus VMS1 Tutorial

Dies ist eine alte Version. Zeitpunkt der Bearbeitung: 12:44, 17. Apr. 2011 durch Jpwfour (Diskussion | Beiträge).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Userliste mehrseitig
Zielgruppe Fortgeschrittene
Aufwand 5 Minuten
Änderungen an:
Datenbank Nein
vorhandenen Dateien Nein
neue Dateien Ja

Dieses Addon erstellt im VMS1 eine mehrseitige Userliste.

Inhaltsverzeichnis

Voraussetzung

Diese Anleitung baut auf dem Addon:Userliste auf, daher muss die Datei userliste.php im Verzeichnis /content/intern/ vorhanden sein. Es empfiehlt sich, die Anleitung Schritt für Schritt durchzugehen, alternativ kann aber auch gleich die komplette Datei verwendet werden: Addon:Userliste#Komplette_Datei.

Schritt 1: Parameter festlegen

Zuerst müssen diverse Parameter angelegt bzw. abgefragt werden, bspw. wie viele Einträge pro Seite angezeigt werden sollen oder wie viele Einträge es insgesamt gibt, um daraus berechnen zu können, wie viele Seiten vorhanden sind.

Dazu folgenden Code ganz am Anfang der Datei einfügen:

<|><?php|>
/* wie viele zeilen pro seite */
$pro_seite = 20;
 
/* abfragen, wie viele zeilen es insgesamt gibt */
$user = <|>mysql_fetch_row|>(db_query("SELECT COUNT(uid) FROM ".$db_prefix."_kontodaten"));
 
/* wie viele seiten ergeben sich daraus? aufrunden */
$seiten = <|>ceil|>($user[0]/$pro_seite);
 
/* GET parameter pruefen, ob innerhalb der schranke (seite 1 bis seite MAX), ansonsten immer seite 1 */
$seite = 1;
<|>if|>(<|>isset|>($_GET['seite']) && $_GET['seite'] > 0 && $_GET['seite']<= $seiten){
	$seite = (int)$_GET['seite'];
}
 
/* berechnen des startwertes fuer die datenbankanfrage, bei seite 1: 0, bei seite 2: $pro_seite, usw. */
$start = ($seite-1)*$pro_seite;

Schritt 2: Datenbankabfrage anpassen

Damit nur noch die Einträge der gewählten Seite ausgelesen werden, muss die MySQL Anfrage noch erweitert werden um eine LIMIT von, wieviel Anweisung. Aus:

$daten = db_query("SELECT k.uid, k.status, u.nickname, u.angemeldet_seit 
	FROM ".$db_prefix."_kontodaten AS k LEFT JOIN ".$db_prefix."_userdaten AS u 
	ON u.uid=k.uid ORDER BY k.uid ASC");

wird dann:

$daten = db_query("SELECT k.uid, k.status, u.nickname, u.angemeldet_seit 
	FROM ".$db_prefix."_kontodaten AS k LEFT JOIN ".$db_prefix."_userdaten AS u 
	ON u.uid=k.uid ORDER BY k.uid ASC LIMIT ".$start.", ".$pro_seite." ");

Damit man sieht, auf welcher Seite man sich befindet, muss noch die Zeile:

head("Userliste");

erweitert werden auf:

head("Userliste Seite ".$seite);

Jetzt lässt sich das Ergebnis schon einmal testen, indem man die Seite aufruft (dann sollten nur die Einträge der 1. Seite angezeigt werden) und manuell den GET Parameter &seite=X in der URL verändert:

?content=/intern/userliste
?content=/intern/userliste&seite=2
?content=/intern/userliste&seite=4
...

Schritt 3: Navigationslinks

Die Links für die Navigation lassen wir in einer Funktion erzeugen, diese benutzt die beiden Werte $seite und $seiten, um in einer Schleife für jede Seite einen Link zu erzeugen, dabei wird der Link für die aktuelle Seite hervorgehoben. Diesen Code fügen wir direkt über der Zeile:

head("Userliste Seite ".$seite);

ein:

/*
Gibt einen Absatz mit Seiten-Navigationslinks aus,
die aktuelle Seite ist hervorgehoben.
*/
<|>function|> userlist_show_navi(){
	<|>global|> $seite, $seiten;
	<|>echo|> '<p>';
	<|>for|>($i=1; $i <= $seiten; $i++){
		<|>if|>($i!=$seite)
			<|>echo|> '<a href="?content=/intern/userliste_mehrseitig&seite='.$i.'">'.$i.'</a>';
		<|>else|>
			<|>echo|> '<a href="?content=/intern/userliste_mehrseitig&seite='.$i.'"><b>'.$i.'</b></a>';
 
		<|>if|>($i<$seiten)
			<|>echo|> ', ';
	}
	<|>echo|> '</p>';
}

Diese Funktion muss noch aufgerufen werden, um die Navigationslinks einmal oberhalb undeinmal unterhalb der Tabelle auszugeben, fügt man den Funktionsaufruf:

userlist_show_navi();

einmal direkt unter der Zeile:

head("Userliste Seite ".$seite);

und einmal direkt über der Zeile:

foot();

ein.

Das Ergebnis sollte in etwa so aussehen: index.php?content=/intern/userliste

Komplette Datei

Die Datei kann als Datei:Userliste mehrseitig.zip heruntergeladen werden.

<|><?php|>
/* wie viele zeilen pro seite */
$pro_seite = 20;
 
/* abfragen, wie viele zeilen es insgesamt gibt */
$user = <|>mysql_fetch_row|>(db_query("SELECT COUNT(uid) FROM ".$db_prefix."_kontodaten"));
 
/* wie viele seiten ergeben sich daraus? aufrunden */
$seiten = <|>ceil|>($user[0]/$pro_seite);
 
/* GET parameter pruefen, ob innerhalb der schranke (seite 1 bis seite MAX), ansonsten immer seite 1 */
$seite = 1;
<|>if|>(<|>isset|>($_GET['seite']) && $_GET['seite'] > 0 && $_GET['seite']<= $seiten){
	$seite = (int)$_GET['seite'];
}
 
/* berechnen des startwertes fuer die datenbankanfrage, bei seite 1: 0, bei seite 2: $pro_seite, usw. */
$start = ($seite-1)*$pro_seite;
 
/*
Gibt einen Absatz mit Seiten-Navigationslinks aus,
die aktuelle Seite ist hervorgehoben.
*/
<|>function|> userlist_show_navi(){
	<|>global|> $seite, $seiten;
	<|>echo|> '<p>';
	<|>for|>($i=1; $i <= $seiten; $i++){
		<|>if|>($i!=$seite)
			<|>echo|> '<a href="?content=/intern/userliste_mehrseitig&seite='.$i.'">'.$i.'</a>';
		<|>else|>
			<|>echo|> '<a href="?content=/intern/userliste_mehrseitig&seite='.$i.'"><b>'.$i.'</b></a>';
 
		<|>if|>($i<$seiten)
			<|>echo|> ', ';
	}
	<|>echo|> '</p>';
}
 
head("Userliste Seite ".$seite);
 
userlist_show_navi();
<|>?>|>
<table>
	<tr>
		<th>ID</th>
		<th>Nickname</th>
		<th>Anmeldedatum</th>
		<th>Status</th>
	</tr>
<|><?php|>
 
$gfx_status = <|>array|>();
$gfx_status[0] = '<img src="images/gelb.gif" width="15" height="15" border="0" alt="Nicht freigeschaltet" title="Nicht freigeschaltet">';
$gfx_status[1] = '<img src="images/gruen.gif" width="15" height="15" border="0" alt="Aktiv" title="Aktiv">';
$gfx_status[2] = '<img src="images/rot.gif" width="15" height="15" border="0" alt="Gesperrt" title="Gesperrt">';
 
$daten = db_query("SELECT k.uid, k.status, u.nickname, u.angemeldet_seit 
	FROM ".$db_prefix."_kontodaten AS k LEFT JOIN ".$db_prefix."_userdaten AS u 
	ON u.uid=k.uid ORDER BY k.uid ASC LIMIT ".$start.", ".$pro_seite." ");
 
<|>while|>($row=<|>mysql_fetch_assoc|>($daten)){
<|>?>|>
	<tr>
		<td align="right"><?php <|>echo|> $row['uid']; ?></td>
		<td><?php <|>echo|> $row['nickname']; ?></td>
		<td align="right"><?php <|>echo|> <|>date|>('d.m.Y', $row['angemeldet_seit']); ?></td>
		<td align="center"><?php <|>echo|> $gfx_status[$row['status']]; ?></td>
	</tr>
<|><?php|>
}
<|>?>|>
</table>
<|><?php|>
userlist_show_navi();
 
foot();
<|>?>|>
Persönliche Werkzeuge