Addon:Userliste mehrseitig sortierbar

Aus VMS1 Tutorial

Wechseln zu: Navigation, Suche
Userliste mehrseitig sortierbar
Zielgruppe Experte
Aufwand 5 Minuten
Änderungen an:
Datenbank Nein
vorhandenen Dateien Nein
neue Dateien Ja

Dieses Addon erstellt im VMS1 eine mehrseitige sortierbare Userliste.

Inhaltsverzeichnis

Voraussetzung

Diese Anleitung baut auf dem Addon:Userliste mehrseitig 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 mehrseitig#Komplette_Datei.

Schritt 1: Parameter festlegen

Zusätzlich zur Seitenzahl werden Parameter einmal für die Spalte, nach der sortiert werden soll, und einmal für die Richtung, benötigt.

$sort = 'uid';
$valid_sort = <|>array|>('uid' => 'k.uid', 'nickname' => 'u.nickname', 'angemeldet_seit' => 'u.angemeldet_seit');
<|>if|>(<|>isset|>($_GET['sort']) && <|>array_key_exists|>($_GET['sort'], $valid_sort)){
	$sort = $_GET['sort'];
}
 
$dir = 'ASC';
$valid_dir = <|>array|>('ASC', 'DESC');
<|>if|>(<|>isset|>($_GET['dir']) && <|>in_array|>($_GET['dir'], $valid_dir)){
	$dir = $_GET['dir'];
}

Schritt 2: Links

Für die Erzeugung der Pfeile zur Sortierung sind folgende Funktionen zuständig:

<|>function|> down_link($sort){
	sort_link($sort, 'DESC', '&dArr;');
}
 
<|>function|> up_link($sort){
	sort_link($sort, 'ASC',  '&uArr;');
}
 
<|>function|> sort_link($sortkey, $direction, $symbol){
	<|>global|> $seite, $sort, $dir;
	<|>if|>($dir != $direction || $sortkey != $sort)
		<|>echo|> '<a href="?content=/intern/userliste&seite='.$seite.'&sort='.$sortkey.'&dir='.$direction.'">'.$symbol.'</a>';
	<|>else|>
		<|>echo|> $symbol;
}

Die Seitenlinks müssen angepasst werden, um die Sortierung über Seitenwechsel hinweg zu erhalten:

<|>function|> userlist_show_navi(){
	<|>global|> $seite, $seiten, $sort, $dir;
	<|>echo|> '<p>';
	<|>for|>($i=1; $i <= $seiten; $i++){
		<|>if|>($i!=$seite)
			<|>echo|> '<a href="?content=/intern/userliste&seite='.$i.'&sort='.$sort.'&dir='.$dir.'">'.$i.'</a>';
		<|>else|>
			<|>echo|> '<b>'.$i.'</b>';
 
		<|>if|>($i<$seiten)
			<|>echo|> ', ';
	}
	<|>echo|> '</p>';
}

Diese Funktionsaufrufe müssen nun noch in den Tabellenkopf eingefügt werden:

<table>
	<tr>
		<th>ID <|><?php|> down_link('uid'); <|>?>|> <|><?php|> up_link('uid'); ?></th>
		<th>Nickname <|><?php|> down_link('nickname'); <|>?>|> <|><?php|> up_link('nickname'); ?></th>
		<th>Anmeldedatum <|><?php|> down_link('angemeldet_seit'); <|>?>|> <|><?php|> up_link('angemeldet_seit'); ?></th>
		<th>Status</th>
	</tr>

Um dem Benutzer die aktuelle Sortierung anzuzeigen, wird die Zeile:

head("Userliste Seite ".$seite);

erweitert auf:

$pretty_sort = <|>array|>('uid' => 'ID', 'nickname' => 'Nickname', 'angemeldet_seit' => 'Anmeldedatum');
$pretty_dir = <|>array|>('ASC' => 'aufsteigend', 'DESC' => 'absteigend');
head("Userliste Seite ".$seite.", sortiert nach ".$pretty_sort[$sort]." ".$pretty_dir[$dir]."");

Schritt 3: Datenbankabfrage anpassen

$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 ".$valid_sort[$sort]." ".$dir." LIMIT ".$start.", ".$pro_seite." ");

Das Ergebnis kann man unter index.php?content=/intern/userliste sehen.

Komplette Datei

<|><?php|>
$pro_seite = 20;
 
$user = <|>mysql_fetch_row|>(db_query("SELECT COUNT(uid) FROM ".$db_prefix."_kontodaten"));
$seiten = <|>ceil|>($user[0]/$pro_seite);
 
$seite = 1;
<|>if|>(<|>isset|>($_GET['seite']) && $_GET['seite'] > 0 && $_GET['seite']<= $seiten){
	$seite = (int)$_GET['seite'];
}
$start = ($seite-1)*$pro_seite;
 
$sort = 'uid';
$valid_sort = <|>array|>('uid' => 'k.uid', 'nickname' => 'u.nickname', 'angemeldet_seit' => 'u.angemeldet_seit');
<|>if|>(<|>isset|>($_GET['sort']) && <|>array_key_exists|>($_GET['sort'], $valid_sort)){
	$sort = $_GET['sort'];
}
 
$dir = 'ASC';
$valid_dir = <|>array|>('ASC', 'DESC');
<|>if|>(<|>isset|>($_GET['dir']) && <|>in_array|>($_GET['dir'], $valid_dir)){
	$dir = $_GET['dir'];
}
 
<|>function|> userlist_show_navi(){
	<|>global|> $seite, $seiten, $sort, $dir;
	<|>echo|> '<p>';
	<|>for|>($i=1; $i <= $seiten; $i++){
		<|>if|>($i!=$seite)
			<|>echo|> '<a href="?content=/intern/userliste&seite='.$i.'&sort='.$sort.'&dir='.$dir.'">'.$i.'</a>';
		<|>else|>
			<|>echo|> '<b>'.$i.'</b>';
 
		<|>if|>($i<$seiten)
			<|>echo|> ', ';
	}
	<|>echo|> '</p>';
}
 
<|>function|> down_link($sort){
	sort_link($sort, 'DESC', '&dArr;');
}
 
<|>function|> up_link($sort){
	sort_link($sort, 'ASC',  '&uArr;');
}
 
<|>function|> sort_link($sortkey, $direction, $symbol){
	<|>global|> $seite, $sort, $dir;
	<|>if|>($dir != $direction || $sortkey != $sort)
		<|>echo|> '<a href="?content=/intern/userliste&seite='.$seite.'&sort='.$sortkey.'&dir='.$direction.'">'.$symbol.'</a>';
	<|>else|>
		<|>echo|> $symbol;
}
 
$pretty_sort = <|>array|>('uid' => 'ID', 'nickname' => 'Nickname', 'angemeldet_seit' => 'Anmeldedatum');
$pretty_dir = <|>array|>('ASC' => 'aufsteigend', 'DESC' => 'absteigend');
head("Userliste Seite ".$seite.", sortiert nach ".$pretty_sort[$sort]." ".$pretty_dir[$dir]."");
 
userlist_show_navi();
<|>?>|>
<table>
	<tr>
		<th>ID <|><?php|> down_link('uid'); <|>?>|> <|><?php|> up_link('uid'); ?></th>
		<th>Nickname <|><?php|> down_link('nickname'); <|>?>|> <|><?php|> up_link('nickname'); ?></th>
		<th>Anmeldedatum <|><?php|> down_link('angemeldet_seit'); <|>?>|> <|><?php|> up_link('angemeldet_seit'); ?></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 ".$valid_sort[$sort]." ".$dir." 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