[2.0.x] EInzelne Kategorien als gelesen markieren

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
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.
Antworten
Benutzeravatar
Nico Haase
Mitglied
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt
Kontaktdaten:

[2.0.x] EInzelne Kategorien als gelesen markieren

Beitrag von Nico Haase »

Moin,
irgendwie triebs mich grad dazu, einen kleinen Hack für die index.php zu schreiben, mit dem man auch einzelne Kategorien als gelesen markieren kann. Dafür nach

Code: Alles auswählen

if( $mark_read == 'forums' )
{
	if( $userdata['session_logged_in'] )
	{
		setcookie($board_config['cookie_name'] . '_f_all', time(), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
	}

	$template->assign_vars(array(
		"META" => '<meta http-equiv="refresh" content="3;url='  .append_sid("index.$phpEx") . '">')
	);

	$message = $lang['Forums_marked_read'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a> ');

	message_die(GENERAL_MESSAGE, $message);
}
einfügen:

Code: Alles auswählen

elseif ( $mark_read == 'cat' && $viewcat > -1 )
 {
 	$sql = 'SELECT forum_id FROM ' . FORUMS_TABLE . ' WHERE cat_id = ' . $viewcat;
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not query forums information', '', __LINE__, __FILE__, $sql);
	}

	$forum_data = array();
	while( $row = $db->sql_fetchrow($result) )
	{
		$forum_data[] = $row;
	}
	$db->sql_freeresult($result); 	
	$total_forums = count($forum_data);

	$is_auth_ary = array();
	$is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata, $forum_data);
 	
 	for ( $i = 0; $i <= $total_forums; $i++ )
 	 {
 	 	$forum_id = $forum_data[$i]['forum_id'];
 	 	if ( $is_auth_ary[$forum_id]['auth_view'] )
 	 	 {
 	 	 	// als gelesen markieren
 	 	 	// kopiert aus viewforum.php, zeilen 126 - 151
			$sql = "SELECT MAX(post_time) AS last_post 
				FROM " . POSTS_TABLE . " 
				WHERE forum_id = $forum_id";
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
			}
	
			if ( $row = $db->sql_fetchrow($result) )
			{
				$tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) : array();
				$tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) : array();
	
				if ( ( count($tracking_forums) + count($tracking_topics) ) >= 150 && empty($tracking_forums[$forum_id]) )
				{
					asort($tracking_forums);
					unset($tracking_forums[key($tracking_forums)]);
				}
	
				if ( $row['last_post'] > $userdata['user_lastvisit'] )
				{
					$tracking_forums[$forum_id] = time();
	
					setcookie($board_config['cookie_name'] . '_f', serialize($tracking_forums), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);
				}
			} 	 	 	
 	 	 }
 	 }
 	 
	$template->assign_vars(array(
		"META" => '<meta http-equiv="refresh" content="3;url='  . append_sid("index.$phpEx?" . POST_CAT_URL . '=' . $viewcat ) . '">')
	);

	$message = $lang['Forums_marked_read'] . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx?" . POST_CAT_URL . '=' . $viewcat ) . '">', '</a> ');

	message_die(GENERAL_MESSAGE, $message); 	 
 }
nach

Code: Alles auswählen

	$template->set_filenames(array(
		'body' => 'index_body.tpl')
	);
einfügen:

Code: Alles auswählen

	$mark_read_URL = append_sid("index.$phpEx?mark=forums");
	if ( $viewcat <> -1 ) $mark_read_URL = append_sid("index.$phpEx?mark=cat&" . POST_CAT_URL . "=" . $viewcat);
und

Code: Alles auswählen

		'L_MARK_FORUMS_READ' => $lang['Mark_all_forums'], 

		'U_MARK_READ' => append_sid("index.$phpEx?mark=forums"))
abändern zu

Code: Alles auswählen

		'L_MARK_FORUMS_READ' => $lang['Mark_all_forums'], 

		'U_MARK_READ' => $mark_read_URL)
Verbesserungsvorschläge?
Buchtips.net bietet mehr als 2500 Buchrezensionen
mdi
Mitglied
Beiträge: 5
Registriert: 18.03.2006 13:25

Beitrag von mdi »

hui!

ich habe das mal ausprobiert und den link zum markieren der foren in die zeile der kategorie-überschriften gelegt. so wird dieser auch in der ansicht der einzelkategorien angezeigt. wenn ich alles richtig gemacht habe, dann kann ich nun in der kategorie-ansicht (also mit den "zusammengeschobenen" übrigen kategorien) die foren der jeweiligen kategorie separat als gelesen markieren.

nachteil: auf der "normalen" index-seite, also in der komplett-übersicht, werden beim klicken auf den gleichen link nach wie vor sämtliche foren als gelesen markiert.

der ansatz ist also ein sehr guter, auf den ...denke ich... viele bereits lange warten. :wink: aber es hapert halt an dem besagten nachteil der allgemeingültigkeit der funktion... verbesserungsvorschläge habe ich leider nicht... ich hab nämlich keine ahnung... :lol: aber ich hoffe, dass das weiter verfolgt wird.


edit: ups. das trifft wohl auf ein "standard-forum" alles nicht zu... ich habe eine editierte index_body.tpl, auf der der link in der kategorie-ansicht normalerweise nicht angezeigt wird. :oops: also einfach vergessen, was ich da "kritisiert" habe.
Zuletzt geändert von mdi am 17.07.2006 22:57, insgesamt 1-mal geändert.
Benutzeravatar
Nico Haase
Mitglied
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt
Kontaktdaten:

Beitrag von Nico Haase »

ei, klar verfolg ich das weiter ;) was ich aber nicht kapiere ist dein allgemeingültigkeits-punkt. klicke ich im forenindex auf "als gelesen markieren", gilt das selbstverständlich für alle foren auf dem index. was würdest du an der stelle noch nachrüsten?
Buchtips.net bietet mehr als 2500 Buchrezensionen
mdi
Mitglied
Beiträge: 5
Registriert: 18.03.2006 13:25

Beitrag von mdi »

siehe mein edit oben. :wink:

hab´s gerade selbst festgestellt, dass der fehler bei mir liegt...
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“