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', '⇓');
}
 
function up_link($sort){
	sort_link($sort, 'ASC',  '⇑');
}
 
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