Seite 3 von 3

Re: Anzeige aller Beiträge der letzten 48 Stunden

Verfasst: 28.02.2009 12:05
von gsxfan
Prima. Das mit GPL ist mir schon klar, aber ich frage lieber nach.

Ok, hier meine Änderungen für die Anzeige der Beiträge der letzten 3/6/12/24 Stunden. Mod wäre dazu vielleicht zuviel gesagt.

Zu ändernde Dateien:

/search.php
/include/functions.php
/language/de/common.php
/style/<style_name>/template/overall_header.html

Öffne search.php, suche nach:

Code: Alles auswählen

$sort_days		= request_var('st', 0)
Füge danach in eine Leerzeile ein:

Code: Alles auswählen

$sort_hours		= request_var('st2', 0);
Suche:

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;
 
Füge in eine Leerzeile danach ein:

Code: Alles auswählen

case 'newposts12':
                $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 = 1;
                $sort_hours = request_var('st2', 0);
                $select_days = ($sort_days) ? (time() - ($sort_hours)) : $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; 
Speichern und schließen.
Öffne functions.php, suche nach:

Code: Alles auswählen

	'U_SEARCH_NEW'			=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts'),
Füge in eine Leerzeile danach ein:

Code: Alles auswählen

		'U_SEARCH_NEW24'			=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts12&st2=86400'),
		'U_SEARCH_NEW12'			=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts12&st2=43200'),
		'U_SEARCH_NEW6'			=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts12&st2=21600'),
		'U_SEARCH_NEW3'			=> append_sid("{$phpbb_root_path}search.$phpEx", 'search_id=newposts12&st2=10800'),
Speichern und schließen.

Öffne /language/de/common.php, suche nach:

Code: Alles auswählen

'SETTINGS'					=> 'Einstellungen',
Füge in einer Leerzeile danach ein:

Code: Alles auswählen

'SHOW_LAST_POSTS'   => 'Zeige letzte Beiträge: ',
Speichern und schließen. Das gleiche für andere Sprachverzeichnisse ausführen.

Öffne /style/<style_name>/template/overall_header.html und füge an gewünschter Stelle ein:

Code: Alles auswählen

	<td align="right">
	{L_SHOW_LAST_POSTS}<a href="{U_SEARCH_NEW3}">3h</a> | <a href="{U_SEARCH_NEW6}">6h</a> | <a href="{U_SEARCH_NEW12}">12h</a> | <a href="{U_SEARCH_NEW24}">24h</a> 	
</td>
Speichern und schließen. Da ich ein tabellenbasierenden Style verwende, muss das für andere entsprechend angepasst werden.

Zur Erklärung:
Bin halt nicht der Coder vor dem Herrn und es gibt damit keine tolle Erweiterung fürs ACP zum Konfigurieren, ich brauch die auch nicht. Im phpBB2 Forum hatte ich den Mod auch drin, aber die Einstellungen der Suchzeiten nach der Einrichtung nie wieder verändert.
Die unterschiedlichen Suchzeiten ergeben sich durch die Vorgaben in der functions.php, ganz am Ende der zusätzlichen Einträge wird der Wert mit z.B. st2=10800 = 10800 Sekunden = 3 Stunden vorgegeben.
Der Codeschnipsel von Miriam arbeitete mit Tagen, das war mir halt zuwenig. Ich möchte gerne auf einen Blick sehen, was in den letzten Stunden ablief. In der search.php wird nun mit (time() - ($sort_hours)) die Anzahl der mit st2 definierten Sekunden von der aktuellen Zeit abgezogen und die in diesem Zeitraum aufgelaufenen Beiträge werden angezeigt.

Comments welcome....vielleicht kann man das auch viel einfacher lösen. Oder es hat Sicherheitslücken.