Seite 1 von 3

Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 01:14
von wobo
I der zur Zeit von mir benutzten Software (PunBB) gibt es eine Suchfunktion, die mir als Ergebnis alle Beiträge auflistet, die in den letzten 48 Stunden gepostet wurden, wobei die noch nicht von mir gelesenen als "neu" markiert sind.
Siehe: http://www.mandrivauser.de/search.php?action=show_24h (Bei nicht angemeldeten Usern entfällt natürlich die "ungelesen"-Markierung).

Gibt es eine derartige Funktion auch in phpBB3? Ich habe schon die Forensuche bemüht, aber möglicherweise nicht die richtigen Keywords gefunden.

wobo

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 01:17
von Metzle
Hallo,

in phpBB3 gibt es die Möglichkeit sich "Neue Beiträge" anzeigen zu lassen, seit dem letzten Besuch. Das dürfte in etwa dem entsprechen. Allerdings werden hierbei die ungelesen und gelesen Markierungen missachtet, es werden schlichtweg die neuen Beiträge seit dem letzten Besuch angezeigt.

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 11:49
von wobo
Ja, das ist mir bekannt, ich suchte aber nach dieser Option, die ich genannt habe.

Die Anzeige der neuen Beiträge seit dem letzten Login ist suboptimal, das ist bekannt. Erklärung: Wenn ich mich morgens einlogge, sehe ich beispielsweise 20 neue Beiträge. Ich lese und beantworte 10, dann muss ich weg. Nachmittags komme ich wieder, logge mich ein und sehe wieder neue Beiträge, nicht aber die 10, die ich morgens nicht mehr lesen konnte. D.h. mir sind die 10 Beiträge entgangen. Es sei denn, es werden nicht nur die ungelesenen Beiträge seit dem letzten Login, sondern ALLE ungelesenen Beiträge angezeigt - was aber wohl nicht der Fall ist.

wobo

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 12:00
von Miriam
Du könntest auch die search.php etwas "aufbohren" und zwar hier ->
finde:

Code: Alles auswählen

            case 'newposts':
                $l_search_title = $user->lang['SEARCH_NEW'];
                // force sorting
                $show_results = (request_var('sr', 'topics') == 'posts') ? 'posts' : 'topics';
                $sort_key = 't';
                $sort_dir = 'd';
                $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
                $sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');

                gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
                $s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '';

                if ($show_results == 'posts')
                {
                    $sql = 'SELECT p.post_id
                        FROM ' . POSTS_TABLE . ' p
                        WHERE p.post_time > ' . $user->data['user_lastvisit'] . "
                            $m_approve_fid_sql
                            " . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . "
                        $sql_sort";
                    $field = 'post_id';
                }
                else
                {
                    $sql = 'SELECT t.topic_id
                        FROM ' . TOPICS_TABLE . ' t
                        WHERE t.topic_last_post_time > ' . $user->data['user_lastvisit'] . '
                            AND t.topic_moved_id = 0
                            ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . '
                            ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . "
                        $sql_sort";
                    $field = 'topic_id';
                }
            break;
 
tausche aus gegen:

Code: Alles auswählen

            case 'newposts':
                $l_search_title = $user->lang['SEARCH_NEW'];
                // force sorting
                $show_results = (request_var('sr', 'topics') == 'posts') ? 'posts' : 'topics';
                $sort_key = 't';
                $sort_dir = 'd';
                $sort_by_sql['t'] = ($show_results == 'posts') ? 'p.post_time' : 't.topic_last_post_time';
                $sql_sort = 'ORDER BY ' . $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC');
                gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
                $s_sort_key = $s_sort_dir = $u_sort_param = $s_limit_days = '';
                $sort_days = request_var('st', 0);
                $select_days = ($sort_days) ? (time() - ($sort_days * 24 * 3600)) : $user->data['user_lastvisit'];
                if ($show_results == 'posts')
                {
                    $sql = 'SELECT p.post_id
                        FROM ' . POSTS_TABLE . ' p
                        WHERE p.post_time > ' . $select_days . "
                            $m_approve_fid_sql
                            " . ((sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : '') . "
                        $sql_sort";
                    $field = 'post_id';
                }
                else
                {
                    $sql = 'SELECT t.topic_id
                        FROM ' . TOPICS_TABLE . ' t
                        WHERE t.topic_last_post_time > ' . $select_days . '
                            AND t.topic_moved_id = 0
                            ' . str_replace(array('p.', 'post_'), array('t.', 'topic_'), $m_approve_fid_sql) . '
                            ' . ((sizeof($ex_fid_ary)) ? 'AND ' . $db->sql_in_set('t.forum_id', $ex_fid_ary, true) : '') . "
                        $sql_sort";
                    $field = 'topic_id';
                }
            break; 
Nun kannst Du mit dem Parameter st=<anzahl_der_tage> im Link die Tage zum Anzeigen vorgeben. Z.B. so:

Code: Alles auswählen

/search.php?search_id=newposts&st=2
Hier also 2 Tage als Zeitrahmen. Falls kein Zeitrahmen übergeben wird, benutzt die Suche die (vor-)letzte Login-Zeit des suchenden Users.
Vergiss aber nicht, die SID mit append_sid() zu übergeben, wenn Du den Link baust.

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 12:34
von wobo
Miriam hat geschrieben:Vergiss aber nicht, die SID mit append_sid() zu übergeben, wenn Du den Link baust.
Was meinst Du damit - sorry, bin kein richtiger PHP-Coder...

wobo

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 12:41
von Miriam
Also das einpflegen des neuen Links.. falls Du es denn so machen möchtest.... wäre beispielhaft so möglich: http://www.phpbb.de/community/viewtopic ... 2#p1033932
append_sid() brauchst Du in phpBB deshalb, damit der User auch eingeloggt bleibt.

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 13:43
von wobo
Habe den Code von Dir eben mal ausprobiert - da bekomme ich alle Beiträge des gesamten Forums aufgelistet. Also bis hin zu Beiträgen, die über 5 Jahre alt sind.

Hmm, möglicherweise reden wir aneinander vorbei. Diese Funktion sollte auch im nicht angemeldeten Zustand (z.B. für nicht registrierte Besucher) zur Verfügung stehen.
In PunBB wird das - soweit ich das verstehe - so umgesetzt, dass einfach vom aktuellen Zeitpunkt 24 Stunden zurückgerechnet wird und alle Beiträge, die einen Zeitstempel innerhalb dieser Zeitspanne tragen, aufgelistet werden wie andere Suchergebnisse auch, allerdings nach Thread geordnet. Zusätzlich wird eben noch abgefragt, ob ein User angemeldet ist, wenn ja, werden von ihm ungelesene Beiträge markiert.

Es wäre schade, wenn wir diese Funktion nicht mehr zur Verfügung stellen könnten, da diese Funktion eine der meist eingesetzten Funktionen ist, soweit ich das von den Usern erfahre. Eine Alternative wäre eine "echte" Ungelesen-Funktion, die das "Ungelesen"-Tag so lange behält, bis der User den Beitrag gelesen hat oder "alle Foren als gelesen" markiert hat - also auch über einen Logout/Login hinaus.

wobo

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 15:23
von Metzle
Hallo,

ich habs mal in die Mod Suche/Anfrage verschoben.

Spontan würde mir noch eine Mod einfallen, die alle ungelesenen Beiträge anzeigt: View or mark unread posts
Damit werden alle ungelesenen Beiträge angezeigt über einen Link, der oben hinzugefügt wird, und man kann damit auch Beiträge als ungelesen markieren. Zwar auch nicht ganz das, was du suchst, aber es geht eher in die Richtung und vielleicht kannst du dich damit anfreunden erst mal.

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 17:29
von wobo
Die MOD kenne ich, die benutzte ich schon unter phpbb2 - die zeigt aber nur etwas an, wenn ein User angemeldet ist.
Du hast recht: es ist nicht das, was ich suche. Siehe Link in meinem ersten Beitrag.

wobo

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 21.01.2009 19:13
von Miriam
wobo hat geschrieben:Habe den Code von Dir eben mal ausprobiert - da bekomme ich alle Beiträge des gesamten Forums aufgelistet. Also bis hin zu Beiträgen, die über 5 Jahre alt sind...
Auch wenn Du die Suche mit Parameter st=2 aufrust, so wie ich es oben gepostet habe? :o