Seite 1 von 1

[2.0.x] EInzelne Kategorien als gelesen markieren

Verfasst: 15.07.2006 12:46
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?

Verfasst: 17.07.2006 22:48
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.

Verfasst: 17.07.2006 22:56
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?

Verfasst: 17.07.2006 22:58
von mdi
siehe mein edit oben. :wink:

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