Addon:Userliste mehrseitig sortierbar
Aus VMS1 Tutorial
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', '⇓'); } 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; } $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(); ?>
