[request] Neues "New Posts in this Forum"-System?
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
-
- Mitglied
- Beiträge: 8
- Registriert: 02.09.2004 18:08
[request] Neues "New Posts in this Forum"-System?
Hallo allerseits,
ich muss gestehen, mich nicht so recht mit dem System anfreunden zu können, das der Markierung von Foren als "enthält neue Beiträge" oder "enthält keine neuen Beiträge" zugrunde liegt. Soweit ich mir die Sache angesehen habe, scheint es so zu funktionieren: Sobald sich in einem Forum ungelesene Beiträge befinden, wird es auf der Index-Seite mit dem "New Posts"-Icon angezeigt. Das ist zwar logisch und macht Sinn, aber stört manchmal, wie zum Beispiel in dieser Situation:
Man besucht ein Forum und findet dort zwei ungelesene Themen vor. Eines davon interessiert einen nicht, das andere hingegen schon. Folglich klickt man letzteres an, liest sich den Inhalt durch und kehrt hernach auf die Index-Seite zurück. Dort angekommen ist aber das Forum immer noch mit dem "New Posts"-Indikator versehen. Wenn man sich nicht gerade die letzte Posting-Zeit und den Benutzernamen des letzten Posters in dem Thread gemerkt hat, den man gerade gelesen hatte, ist es unmöglich, zu unterscheiden, ob dort ein neuer Beitrag auf einen wartet oder das Skript einfach nur das "New Posts"-Symbol darstellt, weil man den zweiten Thread nicht gelesen hat.
Natürlich verstehe ich, dass im Wesentlich für solche Fälle der "mark as read"-Button da ist. Aber er erfordert einen Klick und ein neues Browserfenster (im anderen möchte man ja den interessanten Thread lesen), ist also nicht optimal. Besser wäre – jedenfalls meiner Meinung nach – folgende Handhabung:
Das Forumsskript könnte sich die letzte Zeit meines Besuchs im jeweiligen Forum merken und beim Reload der Index-Seite nur überprüfen, ob nach dieser Zeit noch Beiträge gepostet wurden. Nur in diesem Fall würde es dann den "New Posts"-Indikator für das Forum setzen (der dann auch ein wirklicher "New Posts"-Indikator wäre und kein "unread Posts"-Indikator).
Eine verhältnismäßig einfache Lösung wäre es, nach der Anzeige des Foruminhaltes in der viewforum.php alle Themen automatisch als gelesen markieren zu lassen. Das würde aber in zwei Situationen Probleme bereiten: Erstens dort, wo man mit den Darstellungsoptionen (Anzeige der letzten x Tage/Monate/Wochen ...) experimentiert (nach einem Reload wäre alles als gelesen markiert), zweitens dort, wo man einen Thread vielleicht willentlich nicht liest, um ihn sich für später aufzuheben.
Kann mir jemand helfen? Ich würde mich über jede Unterstützung sehr freuen.
Beste Grüße
M. Sherling
ich muss gestehen, mich nicht so recht mit dem System anfreunden zu können, das der Markierung von Foren als "enthält neue Beiträge" oder "enthält keine neuen Beiträge" zugrunde liegt. Soweit ich mir die Sache angesehen habe, scheint es so zu funktionieren: Sobald sich in einem Forum ungelesene Beiträge befinden, wird es auf der Index-Seite mit dem "New Posts"-Icon angezeigt. Das ist zwar logisch und macht Sinn, aber stört manchmal, wie zum Beispiel in dieser Situation:
Man besucht ein Forum und findet dort zwei ungelesene Themen vor. Eines davon interessiert einen nicht, das andere hingegen schon. Folglich klickt man letzteres an, liest sich den Inhalt durch und kehrt hernach auf die Index-Seite zurück. Dort angekommen ist aber das Forum immer noch mit dem "New Posts"-Indikator versehen. Wenn man sich nicht gerade die letzte Posting-Zeit und den Benutzernamen des letzten Posters in dem Thread gemerkt hat, den man gerade gelesen hatte, ist es unmöglich, zu unterscheiden, ob dort ein neuer Beitrag auf einen wartet oder das Skript einfach nur das "New Posts"-Symbol darstellt, weil man den zweiten Thread nicht gelesen hat.
Natürlich verstehe ich, dass im Wesentlich für solche Fälle der "mark as read"-Button da ist. Aber er erfordert einen Klick und ein neues Browserfenster (im anderen möchte man ja den interessanten Thread lesen), ist also nicht optimal. Besser wäre – jedenfalls meiner Meinung nach – folgende Handhabung:
Das Forumsskript könnte sich die letzte Zeit meines Besuchs im jeweiligen Forum merken und beim Reload der Index-Seite nur überprüfen, ob nach dieser Zeit noch Beiträge gepostet wurden. Nur in diesem Fall würde es dann den "New Posts"-Indikator für das Forum setzen (der dann auch ein wirklicher "New Posts"-Indikator wäre und kein "unread Posts"-Indikator).
Eine verhältnismäßig einfache Lösung wäre es, nach der Anzeige des Foruminhaltes in der viewforum.php alle Themen automatisch als gelesen markieren zu lassen. Das würde aber in zwei Situationen Probleme bereiten: Erstens dort, wo man mit den Darstellungsoptionen (Anzeige der letzten x Tage/Monate/Wochen ...) experimentiert (nach einem Reload wäre alles als gelesen markiert), zweitens dort, wo man einen Thread vielleicht willentlich nicht liest, um ihn sich für später aufzuheben.
Kann mir jemand helfen? Ich würde mich über jede Unterstützung sehr freuen.
Beste Grüße
M. Sherling
-
- Mitglied
- Beiträge: 8
- Registriert: 02.09.2004 18:08
Einzig mit Änderungen an der index.php ist es nicht getan.
Du kannst dir ja mal dieses Thema anschauen (entspricht zwar nicht ganz deinen Vorstellungen, aber eventuell dennoch interessant für dich).
Du kannst dir ja mal dieses Thema anschauen (entspricht zwar nicht ganz deinen Vorstellungen, aber eventuell dennoch interessant für dich).
-
- Mitglied
- Beiträge: 8
- Registriert: 02.09.2004 18:08
Vielen Dank, der Hinweis ist gut. Leider wird das aber wohl doch nicht das richtige für mich sein, da ich weitere Datenbank-Lösungen gerne vermeiden möchte – schon in der derzeitigen Version würde ich mir für mein Board mehr Geschwindigkeit wünschen, weswegen ich ein Mehr an Datenbankabfragen unbedingt vermeiden möchte.
Bez. der index.php: Kommt nicht am Ende alles auf diese Funktion an?
Nur wo lässt sich da die richtige Einstellung treffen? Für mich klingt p.post_time > " . $userdata['user_lastvisit'] . " im Wesentlichen nach der richtigen Abfrage. Aber pro User steht in der Datenbank nur ein Wert für user_lastvisit. Theoretisch müsste doch ein Wert für alle Subforen vorhanden sein?
Vielleicht kann mich jemand, der sich etwas besser in PHP und dem phpBB-code auskennt (was nicht schwierig ist ... ), aufklären? Ich bin für jeden Hinweis dankbar!
Beste Grüße
M. Sherling
Bez. der index.php: Kommt nicht am Ende alles auf diese Funktion an?
Code: Alles auswählen
//
// Obtain a list of topic ids which contain
// posts made since user last visited
//
if ( $userdata['session_logged_in'] )
{
$sql = "SELECT t.forum_id, t.topic_id, p.post_time
FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
WHERE p.post_id = t.topic_last_post_id
AND p.post_time > " . $userdata['user_lastvisit'] . "
AND t.topic_moved_id = 0";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query new topic information', '', __LINE__, __FILE__, $sql);
}
$new_topic_data = array();
while( $topic_data = $db->sql_fetchrow($result) )
{
$new_topic_data[$topic_data['forum_id']][$topic_data['topic_id']] = $topic_data['post_time'];
}
$db->sql_freeresult($result);
}
Vielleicht kann mich jemand, der sich etwas besser in PHP und dem phpBB-code auskennt (was nicht schwierig ist ... ), aufklären? Ich bin für jeden Hinweis dankbar!

Beste Grüße
M. Sherling
Ja, aber wenn du es dann für die einzelnen Unterforen speicherst, müsste dies auch in der Datenbank eingetragen werden, womit du wieder bei einer Anpassung dieser wärst.

Wenn man dann ins Forum geht, wird ja angezeigt welche der Themen neu ist. Wenn man sich ausloggt oder das Forum verlässt und später wiederkommt, ist das uninteressante Thema als gelesen markiert (wenn kein neuer Beitrag geschrieben wurde).Wenn man sich nicht gerade die letzte Posting-Zeit und den Benutzernamen des letzten Posters in dem Thread gemerkt hat, den man gerade gelesen hatte, ist es unmöglich, zu unterscheiden, ob dort ein neuer Beitrag auf einen wartet oder das Skript einfach nur das "New Posts"-Symbol darstellt, weil man den zweiten Thread nicht gelesen hat.
Man kann ja den Thread zuerst lesen und dann die restlichen Themen als gelesen markieren (und es öffnet sich ja kein neues Browserfenster).Natürlich verstehe ich, dass im Wesentlich für solche Fälle der "mark as read"-Button da ist. Aber er erfordert einen Klick und ein neues Browserfenster (im anderen möchte man ja den interessanten Thread lesen)

So ist es ja eigentlich. Allerdings wird die Zeit des letzten Besuches erst neu eingetragen, wenn man das Board verlässt oder die Session abgelaufen ist.Das Forumsskript könnte sich die letzte Zeit meines Besuchs im jeweiligen Forum merken und beim Reload der Index-Seite nur überprüfen, ob nach dieser Zeit noch Beiträge gepostet wurden.
Ich stelle mir das auch ned so einfach vor. Woher soll das Forum wissen ob du die Topic ansicht verlassen hast um ein Topic zu lesen, oder ob du es verlassen hast weil du alle interesannten gelesen hast?
Zum anderen würde ich mich fragen ob das auch im interesse der anderen user ist. Ich hab die erfahrung gemacht das die Themen in einem normalen Forum eh schon viel zu schnell als gelesen markiert werden.
Zum anderen würde ich mich fragen ob das auch im interesse der anderen user ist. Ich hab die erfahrung gemacht das die Themen in einem normalen Forum eh schon viel zu schnell als gelesen markiert werden.
-
- Mitglied
- Beiträge: 8
- Registriert: 02.09.2004 18:08
Da hast Du ja völlig Recht. Aber das ist ja auch nicht der Weg, den ich gehen würde: Ich würde bei der Anzeige der Index-Übersicht folgenden Code (hier mal als "Trivialcode" skizziert) ausführen wollen:Acid hat geschrieben:Ja, aber wenn du es dann für die einzelnen Unterforen speicherst, müsste dies auch in der Datenbank eingetragen werden, womit du wieder bei einer Anpassung dieser wärst.![]()
if(this_forum.any_post.posttime > this_forum.user.lastvisit) {$icon = new_threads_in_this_forum.gif} else {$icon = no_new_threads_in_this_forum.gif}
Nur, wie komme ich an diesen Wert für den letzten Besuch des Users in einem Forum heran? Momentan wird der im Cookie gespeichert, oder?
Das wäre ja in meiner Variante ebenso. Nur würde dann auf der Index-Seite nicht mehr der Neu-Indikator zu sehen sein, weil man das Forum ja schon verlassen hat, ohne die Threads zu lesen (und bei meiner Variante würde auch kein Thread als "gelesen" markiert, nur weil ich mich mal aus dem Forum ausgeloggt habe – das ist meines Erachtens nicht logisch).Wenn man dann ins Forum geht, wird ja angezeigt welche der Themen neu ist. Wenn man sich ausloggt oder das Forum verlässt und später wiederkommt, ist das uninteressante Thema als gelesen markiert (wenn kein neuer Beitrag geschrieben wurde).
Auf den Punkt gebracht wünsche ich mir eben einfach einen "New posts"-Indikator an Stelle des bisherigen "Unread Posts"-Indikators.
Hmm. Ich gehe in ein Forum, klicke auf einen Thread, lese ihn, drücke den "Back"-Button des Browsers, klicke auf "Alles gelesen", warte einen Moment und klicke dann auf "Forum" in den Navigationslinks. Umständlich, oder? (Zugegeben, bei mir wird man nach "Alles gelesen" direkt zum Forum geleitet, das habe ich geändert) Warum kann man nicht direkt aus dem Thread heraus auf "Forum" in der Navigationsübersicht (diese hierarchische Struktur: Forum -> Board -> Thread) klicken, um damit zu einer Index-Seite zurückzukehren, auf der das jeweilige Board nicht mehr als "neu" markiert ist?Man kann ja den Thread zuerst lesen und dann die restlichen Themen als gelesen markieren (und es öffnet sich ja kein neues Browserfenster).
Meine Variante ist gar nicht so schlecht, wenn man sie sich genau überlegt. Auf diese Art und Weise funktioniert es beispielsweise bei den YaBB-Foren. Eine Software, die ich jahrelang eingesetzt habe, bevor ich auf phpBB umstieg. Nun bin nicht nur ich an das alte Schema gewöhnt, sondern auch meine User – und viele meckern schon.
Es ist ja nicht so, dass man sich nicht umgewöhnen könnte. Nur wenn man beide Systeme kennt, geht es zumindest mir (und vielen Dutzend Board-Besuchern meines Forums) so, dass einem die andere Variante besser gefällt

Das Forum würde das gar nicht wissen und auch gar nicht wissen müssen. Und der zweite Punkt: Noch besser, denn "mein Forum" würde niemals auch nur einen einzigen Thread als "gelesen" markieren (es sei denn, der User klickt explizit auf "Alles gelesen"). Nicht einmal dann, wenn sich jemand ausloggt und später wiederkommt. (Das stört mich nämlich auch – wieso bestimmt mein Forum, was ich schon gelesen habe?) Das einzige, was "mein Forum" tun würde, wäre, eben wirklich nur anzuzeigen, ob es "neue" Beiträge in einem Subforum gibt oder nicht – und "neu" im Sinne von "seit dem letzten Besuch hinzugekommen" und nicht im Sinne von "das hier haben Sie noch nicht gelesen. Nun aber los, denken Sie ja nicht, sie werden meinen Hinweis sonst los!".Ich stelle mir das auch ned so einfach vor. Woher soll das Forum wissen ob du die Topic ansicht verlassen hast um ein Topic zu lesen, oder ob du es verlassen hast weil du alle interesannten gelesen hast? Zum anderen würde ich mich fragen ob das auch im interesse der anderen user ist. Ich hab die erfahrung gemacht das die Themen in einem normalen Forum eh schon viel zu schnell als gelesen markiert werden.

Beste Grüße
M. Sherling
Ja, der korrekte Wert für´s "last_visit" steht im Cookie. Es gibt zwar ein Feld "user_lastvisit" in der "users" Tabelle, aber dort wird der vorletzte Besuch eines Users gespeichert (um´s dann auf dem Index bei "dein letzter Besuch.." anzeigen zu lassen).if(this_forum.any_post.posttime > this_forum.user.lastvisit) {$icon = new_threads_in_this_forum.gif} else {$icon = no_new_threads_in_this_forum.gif}
Nur, wie komme ich an diesen Wert für den letzten Besuch des Users in einem Forum heran? Momentan wird der im Cookie gespeichert, oder?
Es gibt einen Last Visit MOD, dessen Änderungen dann einen "korrekten" last_visit-Wert ausgeben (was aber Änderungen an Dateien/Datenbank erfordert).
Was auch immer du versuchst an dem "new post"-System zu verändern... irgendwo müssen die Informationen ja gespeichert werden (an Änderungen an Dateien/Datenbank wirst du nicht herum kommen).
Man könnte versuchen, diese Navigation-Links mit dem mark as read-Code zu verbinden, so das beim Benutzen dieser dann die Foren als gelesen markiert werden, aber ist die Frage, ob die User diese Links auch immer benutzen.Warum kann man nicht direkt aus dem Thread heraus auf "Forum" in der Navigationsübersicht (diese hierarchische Struktur: Forum -> Board -> Thread) klicken, um damit zu einer Index-Seite zurückzukehren, auf der das jeweilige Board nicht mehr als "neu" markiert ist?
-
- Mitglied
- Beiträge: 8
- Registriert: 02.09.2004 18:08
Um Änderungen nicht herum kommen – vielleicht doch. Ich stelle mir da folgendes vor:
Für jedes Subforum ist also der lastvisit-Timestamp im Cookie gesichert. Und an irgend einer Stelle bei der Darstellung der Foren-Übersicht muss ja nun abfragen können (wieder "Trivialcode"):
if ( forum_xyz.any_post.posttime > readfromcookie(forum_xyz.lastvisit)) {$icon = new_threads_in_forum.gif} else {$icon = no_new_threads_in_forum.gif}
Anstelle der bisherigen Abfrage, die darauf abstellt, ob Themen im Forum noch nicht gelesen wurden. Oder irre ich mich?
Die Idee bez. der Nav-Links ist mir auch schon gekommen, leider ist es keine gute Lösung – immerhin würden ja dann alle anderen Themen auch als gelesen markiert werden (das möchte ich nicht) und zudem gibt es genügend Anwender, die einfach den "Zurück"-Button des Browsers verwenden.
Beste Grüße
M. Sherling
Für jedes Subforum ist also der lastvisit-Timestamp im Cookie gesichert. Und an irgend einer Stelle bei der Darstellung der Foren-Übersicht muss ja nun abfragen können (wieder "Trivialcode"):
if ( forum_xyz.any_post.posttime > readfromcookie(forum_xyz.lastvisit)) {$icon = new_threads_in_forum.gif} else {$icon = no_new_threads_in_forum.gif}
Anstelle der bisherigen Abfrage, die darauf abstellt, ob Themen im Forum noch nicht gelesen wurden. Oder irre ich mich?
Die Idee bez. der Nav-Links ist mir auch schon gekommen, leider ist es keine gute Lösung – immerhin würden ja dann alle anderen Themen auch als gelesen markiert werden (das möchte ich nicht) und zudem gibt es genügend Anwender, die einfach den "Zurück"-Button des Browsers verwenden.
Beste Grüße
M. Sherling
-
- Mitglied
- Beiträge: 8
- Registriert: 02.09.2004 18:08