Seite 1 von 1

Memberlist nach Letztem Beitrag sortieren lassen?

Verfasst: 30.04.2003 10:46
von Jason
Hi,
ich habe in der Memberlist eine spalte hinzugefügt in der die Zeit des letzten Beitrags des jeweiligen Users angezeigt wird nun würde ich die Möglichkeit haben auch danach die memberliste zu sortieren ist das irgendwie möglich?

Hier meine veränderte memberlist: memberlist.php

Bin für jede hilfe dankbar!!

Grüße Jason

Verfasst: 30.04.2003 13:14
von Acid
s.u.

Verfasst: 01.05.2003 09:27
von esperitox
@Acid berichtige mich wenn ich damit falsch liege aber damit wird er nicht viel anfangen können es gibt keine spalte user_last_post o. ähnl. in der Users tabelle wo die Zeit/ID des letzten Beitrags gespeichert ist den ein User gepostet hat :-? man müsste es also aus der Posts tabelle holen dazu müsste man aber eine ganze menge umschreiben...

esperitox

Verfasst: 01.05.2003 12:26
von Acid
absolut richtig. :D
Aber da ma wirklich einiges ändern müsste, ist es einfacher ´n last_post in die users Tabelle einzutragen, wonach dann sortiert werden kann.

Verfasst: 01.05.2003 12:51
von Jason
Acid hat geschrieben:absolut richtig. :D
Aber da ma wirklich einiges ändern müsste, ist es einfacher ´n last_post in die users Tabelle einzutragen, wonach dann sortiert werden kann.
Ja aber wie krieg ich in diese spalte denn immer das aktuelle datum des letzten Posts rein das müsste dann ja auch Automatisch immer geändert werden wenn der User wieder postet oder hab ich da was falsch verstanden?Weil nach einer leeren spalte kann man ja nicht sortieren :o

Gruß Jason

Verfasst: 01.05.2003 13:21
von Acid
Zunächst musst Du den Query in der functions_post.php anpassen, der die Usertabelle beim Posten updated (blauer Code ist neu):
$sql = "UPDATE " . USERS_TABLE . "
SET user_posts = user_posts $sign $last_post
WHERE user_id = $user_id";
Nun musst Du $last_post natürlich noch definieren, passe dazu folgenden Code an (blauer Code is neu):
$sign = ($mode == 'delete') ? '- 1' : '+ 1';
$current_time = time();
$last_post = ($mode != 'delete') ? ', user_last_post = '.$current_time : '';
Das bewirkt, das beim Posten, die aktuelle Zeit in eine Extraspalte in der Userstabelle aufgenommen wird (und das beim Löschen sich daran nix verändert).

Natürlich brauchst Du noch die neue Spalte in der Userstabelle:
ALTER TABLE phpbb_users ADD user_last_post INT(11) NOT NULL DEFAULT '0';
Nun baust Du den anderen Hack (memberlist.php) wieder aus und änderst die Datei an folgenden Stellen (blauer Code ist neu):
$mode_types_text = array($lang['Sort_Joined'], $lang['Sort_Username'], $lang['Last_Post'], $lang['Sort_Location'], $lang['Sort_Posts'], $lang['Sort_Email'], $lang['Sort_Website'], $lang['Sort_Top_Ten']);
$mode_types = array('joindate', 'username', 'lastpost', 'location', 'posts', 'email', 'website', 'topten');

[..]

'L_POSTS' => $lang['Posts'],
'L_POST_TIME' => $lang['Last_Post'],

[..]

case 'joined':
$order_by = "user_regdate ASC LIMIT $start, " . $board_config['topics_per_page'];
break;
case 'lastpost':
$order_by = "user_last_post $sort_order LIMIT $start, " . $board_config['topics_per_page'];
break;


[..]

$sql = "SELECT username, user_last_post, user_id

[..]

$username = $row['username'];
$user_id = $row['user_id'];
$last_post_time = ( $row['user_last_post'] != 0 ) ? create_date($board_config['default_dateformat'], $row['user_last_post'], $board_config['board_timezone']) : $lang['None'];

[..]

'YIM' => $yim,
'LAST_POST_TIME' => $last_post_time,
Die Änderung in der memberlist_body.tpl is die gleiche wie bei dem anderen Hack.