Страница 1 из 2

Ищется программер, готовый модернизировать Read Tracking Mod

Добавлено: 20.03.2005 22:12
BadBlock
Есть такой мод, называется Read Tracking Mod
Добавляет в БД таблицу, в которой отслеживаются непрочтённые сообщения для каждого юзера.
То есть, хранение не в куках, а в базе данных.
Очень удобно: топик останется непрочитанным, даже если его сейчас не прочитать, не заходить в него, оставив на потом, и вернуться завтра.
Без этого мода приходится, чтобы не потерять непрочитанные темы,
обязательно заходить во всем желательные темы в течение одного визита.

Мод находится до сих пор в бета версии: http://www.phpbb.com/phpBB/viewtopic.php?t=86690
Установлен на моём форуме www.sarov.info/forum и нормально работает.

Имеется проблема. К примеру, в моём форуме с 2.5К юзеров и 200К постов (~150 постов в день) база разбухает за месяц до 450 Мб (с использованием всех трёх рекомендуемых индексов), форум начинает тормозить на этой таблице. Pruning этой таблицы из админовки при таком объёме приводит к тому, что всё просто входит в ступор. Приходится либо периодически просто обнулять таблицу (уничтожать и создавать заново пустую, при этом все темы у всех оказываются прочитанными), либо, как я сейчас думаю сделать, ставить ежедневную cron-задачу на чистку базы от записей старше 7 дней. Если же индексы не использовать, как велено, база разбухает сильно меньше, но подтормаживать начинает почти с самого начала.

Изучив работу мода, я вижу, что мод использует крайне нерациональную систему хранения информации в таблице. Он хранит непрочитанные сообщения (добавление сообщения приводит к добавлению 2.5К записей, мы-гы-гы). А надо бы – наоборот. Свои полные выкладки по улучшенной логике работы мода могу выложить, если есть кто-нибудь заинтересованный в развитии этого мода (в течение ближайших месяцев у меня времени на программирование этого дела не будет). Я вижу, что нет никаких проблем сделать так, что база совсем не будет разбухать, да.

Без этого мода -- просто невозможно уже.
Подсел, как на наркотик, настолько удобно. :)

Добавлено: 20.03.2005 22:50
Coagulant
Возможно вам подойдет мод Keep unread flags.

Добавлено: 20.03.2005 23:01
BadBlock
Хм, завабно, не видел такого... а можно в двух словах, как он работает?

Добавлено: 21.03.2005 2:13
Siava
BadBlock
Keep unread flags делает то же самое. То есть, если вы не прочитали все темы и вышли из форума, то при входе непрочитанные темы останутся на месте ;) У мода 2 режима хранения этих сообщений.. как-то через куки (я так и не понял каким образом) и в базе данных (установил именно этот вариант).
Работает нормально в форуме с 100к сообщений, где 300-400 сообщений в день :D

Добавлено: 21.03.2005 8:50
BadBlock
Он хранит ли какие именно сообщения непрочитаны?
То есть, работает ли правильно кнопка "перейти к непрочитанным сообщениям"?

А то вдруг просто флаг у темы "непрочитана", и всё, а что непрочитано ищи сам. :)
Название мода смущает, вот в чём дело.

Добавлено: 21.03.2005 10:36
Splurov
Возможно вам подойдет мод Keep unread flags.
Я попробовал себе его поставить. Всё было отлично, пока не пришёл черёд файла index.php (он у меня очень сильно изменённый - оптмизировал много). Так вот кое-чего там вообще нету и инструкцию по установке я не смог выполнить верно. Но вроде попытался встроить так сказать... Но вроде чё-то с ошибкой встроил:

Код: Выделить всё

Warning: mysql_fetch_array(): 34 is not a valid MySQL result resource in g:\htdocs\movies\www\db\mysql4.php on line 339
Это вылазит... Очень жаль. А мод по описанию просто отличный. Если у кого-то есть желание помочь привожу немодифицированный этим модом index.php:

Код: Выделить всё

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'common.php');

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//

$viewcat = ( !empty($HTTP_GET_VARS[POST_CAT_URL]) ) ? $HTTP_GET_VARS[POST_CAT_URL] : -1;

if( isset($HTTP_GET_VARS['mark']) || isset($HTTP_POST_VARS['mark']) )
{
	$mark_read = ( isset($HTTP_POST_VARS['mark']) ) ? $HTTP_POST_VARS['mark'] : $HTTP_GET_VARS['mark'];
}
else
{
	$mark_read = '';
}

//
// Handle marking posts
//
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);
}
//
// End handle marking posts
//

$tracking_topics = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_t']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_t"]) : array();
$tracking_forums = ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f']) ) ? unserialize($HTTP_COOKIE_VARS[$board_config['cookie_name'] . "_f"]) : array();

//
// If you don't use these stats on your index you may want to consider
// removing them
//
$posttopiccount= get_db_stat('posttopiccount');
$total_topics = $posttopiccount['topic_total'];
$total_posts = $posttopiccount['post_total'];
$total_users = get_db_stat('usercount');
$newest_userdata = get_db_stat('newestuser');
$newest_user = $newest_userdata['username'];
$newest_uid = $newest_userdata['user_id'];

$l_total_post_s = $lang['Posted_articles_total'];
$l_total_user_s = $lang['Registered_users_total'];

//
// Start page proper
//
$sql = "SELECT c.cat_id, c.cat_title, c.cat_order
	FROM " . CATEGORIES_TABLE . " c 
	ORDER BY c.cat_order";
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not query categories list', '', __LINE__, __FILE__, $sql);
}

$category_rows = array();
$category_rows = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);

if( ( $total_categories = count($category_rows) ) )
{
	$fname= date('d-m-y').'.dat';
	if (!file_exists($fname)) {
		//
		// Define appropriate SQL
		//
	 		$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id, t.topic_title, t.topic_id
				FROM ((( " . FORUMS_TABLE . " f
				LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
				LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
				LEFT JOIN " . TOPICS_TABLE . " t ON t.topic_id = p.topic_id )
				ORDER BY f.cat_id, f.forum_order";
		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);
	
		//
		// Obtain list of moderators of each forum
		// First users, then groups ... broken into two queries
		//
		$sql = "SELECT aa.forum_id, u.user_id, u.username 
			FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g, " . USERS_TABLE . " u
			WHERE aa.auth_mod = " . TRUE . " 
				AND g.group_single_user = 1 
				AND ug.group_id = aa.group_id 
				AND g.group_id = aa.group_id 
				AND u.user_id = ug.user_id 
			GROUP BY u.user_id, u.username, aa.forum_id 
			ORDER BY aa.forum_id, u.user_id";
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
		}
	
		$forum_moderators = array();
		while( $row = $db->sql_fetchrow($result) )
		{
			$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '">' . $row['username'] . '</a>';
		}
		$db->sql_freeresult($result);
	
		$sql = "SELECT aa.forum_id, g.group_id, g.group_name 
			FROM " . AUTH_ACCESS_TABLE . " aa, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g 
			WHERE aa.auth_mod = " . TRUE . " 
				AND g.group_single_user = 0 
				AND g.group_type <> " . GROUP_HIDDEN . "
				AND ug.group_id = aa.group_id 
				AND g.group_id = aa.group_id 
			GROUP BY g.group_id, g.group_name, aa.forum_id 
			ORDER BY aa.forum_id, g.group_id";
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Could not query forum moderator information', '', __LINE__, __FILE__, $sql);
		}
	
		while( $row = $db->sql_fetchrow($result) )
		{
			$forum_moderators[$row['forum_id']][] = '<a href="' . append_sid("groupcp.$phpEx?" . POST_GROUPS_URL . "=" . $row['group_id']) . '">' . $row['group_name'] . '</a>';
		}
		$db->sql_freeresult($result);
	
		// Birthday Mod, Show users with birthday 
		$sql = ($board_config['birthday_check_day']) ? "SELECT user_id, username, user_birthday,user_level FROM " . USERS_TABLE. " WHERE user_birthday!=999999 ORDER BY username" :"";
		if($result = $db->sql_query($sql)) 
		{ 
			if (!empty($result)) 
			{ 
				$time_now = time();
				$this_year = create_date('Y', $time_now, $board_config['board_timezone']);
				$date_today = create_date('Ymd', $time_now, $board_config['board_timezone']);
				$date_forward = create_date('Ymd', $time_now+($board_config['birthday_check_day']*86400), $board_config['board_timezone']);
				while ($birthdayrow = $db->sql_fetchrow($result))
				{ 
					$user_birthday2 = $this_year.($user_birthday = realdate("md",$birthdayrow['user_birthday'] )); 
					if ( $user_birthday2 < $date_today ) $user_birthday2 += 10000;
					if ( $user_birthday2 > $date_today  && $user_birthday2 <= $date_forward ) 
					{ 
						// user are having birthday within the next days
						$user_age = ( $this_year.$user_birthday < $date_today ) ? $this_year - realdate ('Y',$birthdayrow['user_birthday'])+1 : $this_year- realdate ('Y',$birthdayrow['user_birthday']); 
						switch ($birthdayrow['user_level'])
						{
							case ADMIN :
							$birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>'; 
							$style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
								break;
							case MOD :
							$birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>'; 
							$style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
								break;
							default: $style_color = '';
						}
						$birthday_week_list .= ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $birthdayrow['user_id']) . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,'; 
					} else if ( $user_birthday2 == $date_today ) 
				      	{ 
						//user have birthday today 
						$user_age = $this_year - realdate ( 'Y',$birthdayrow['user_birthday'] ); 
						switch ($birthdayrow['user_level'])
						{
							case ADMIN :
							$birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>'; 
			      				$style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
								break;
							case MOD :
					      		$birthdayrow['username'] = '<b>' . $birthdayrow['username'] . '</b>'; 
			      				$style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
								break;
							default: $style_color = '';
						}
		
						$birthday_today_list .= ' <a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $birthdayrow['user_id']) . '"' . $style_color .'>' . $birthdayrow['username'] . ' ('.$user_age.')</a>,'; 
					}
					 
				}
				if ($birthday_today_list) $birthday_today_list[ strlen( $birthday_today_list)-1] = ' ';
				if ($birthday_week_list) $birthday_week_list[ strlen( $birthday_week_list)-1] = ' ';
			}
			$db->sql_freeresult($result);
		}


		$oldfname= date('d-m-y', mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))).'.dat';
		if (file_exists($oldfname)) unlink($oldfname);
		$fp= @fopen($fname,'w');
		$data= serialize(array($forum_data,$forum_moderators,$birthday_today_list,$birthday_week_list));
		fwrite ($fp, $data);
		fclose ($fp);

	}
	else {
		$data= unserialize(file_get_contents($fname));
		$forum_data=$data[0];
		$forum_moderators=$data[1];
		$birthday_today_list=$data[2];
		$birthday_week_list=$data[3];
	}

	if ( !($total_forums = count($forum_data)) )
	{
		message_die(GENERAL_MESSAGE, $lang['No_forums']);
	}

	//
	// 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);
	}

	//
	// Find which forums are visible for this user
	//
	$is_auth_ary = array();
	$is_auth_ary = auth(AUTH_VIEW, AUTH_LIST_ALL, $userdata, $forum_data);

	//
	// Start output of page
	//
	define('SHOW_ONLINE', true);
	$page_title = $lang['Index'];
	include($phpbb_root_path . 'includes/page_header.'.$phpEx);

	$template->set_filenames(array(
		'body' => 'index_body.tpl')
	);

	$template->assign_vars(array(
		"TOTAL_TOPICCOUNT" => $total_topics,
		"L_TOTAL_TOPICCOUNT" => $lang['total_topiccount'],
		
		'TOTAL_POSTS' => sprintf($l_total_post_s, $total_posts),
		'TOTAL_USERS' => sprintf($l_total_user_s, $total_users),
		'NEWEST_USER' => sprintf($lang['Newest_user'], '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$newest_uid") . '">', $newest_user, '</a>'), 

		'FORUM_IMG' => $images['forum'],
		'FORUM_NEW_IMG' => $images['forum_new'],
		'FORUM_LOCKED_IMG' => $images['forum_locked'],

// Start add - Birthday MOD
		'L_WHOSBIRTHDAY_WEEK' => ($board_config['birthday_check_day'] > 1) ? sprintf( (($birthday_week_list) ? $lang['Birthday_week'] : $lang['Nobirthday_week']), $board_config['birthday_check_day']).$birthday_week_list : '',
		'L_WHOSBIRTHDAY_TODAY' => ($board_config['birthday_check_day']) ? ($birthday_today_list) ? $lang['Birthday_today'].$birthday_today_list : $lang['Nobirthday_today'] : '',
// End add - Birthday MOD

		'L_FORUM' => $lang['Forum'],
		'L_TOPICS' => $lang['Topics'],
		'L_REPLIES' => $lang['Replies'],
		'L_VIEWS' => $lang['Views'],
		'L_POSTS' => $lang['Posts'],
		'L_LASTPOST' => $lang['Last_Post'], 
		'L_NO_NEW_POSTS' => $lang['No_new_posts'],
		'L_NEW_POSTS' => $lang['New_posts'],
		'L_NO_NEW_POSTS_LOCKED' => $lang['No_new_posts_locked'], 
		'L_NEW_POSTS_LOCKED' => $lang['New_posts_locked'], 
		'L_ONLINE_EXPLAIN' => $lang['Online_explain'], 

		'L_MODERATOR' => $lang['Moderators'], 
		'L_FORUM_LOCKED' => $lang['Forum_is_locked'],
		'L_MARK_FORUMS_READ' => $lang['Mark_all_forums'], 

		'U_MARK_READ' => append_sid("index.$phpEx?mark=forums"))
	);
	//
	// Okay, let's build the index
	//

	//
	// Let's decide which categories we should display
	//

	$display_categories = array();

	for ($i = 0; $i < $total_categories; $i++ )
	{
		$display_categories[$category_rows[$i]['cat_id']] = FALSE;
	}

	for ($i = 0; $i < $total_forums; $i++ )
	{
		if ( $is_auth_ary[$forum_data[$i]['forum_id']]['auth_view'] )
		{
			$display_categories[$forum_data[$i]['cat_id']] = TRUE;
		}
	}
	for($i = 0; $i < $total_categories; $i++)
	{
		$cat_id = $category_rows[$i]['cat_id'];
		//
		// Yes, we should, so first dump out the category
		// title, then, if appropriate the forum list
		//
		if ( $display_categories[$cat_id] )
		{
			$template->assign_block_vars('catrow', array(
				'CAT_ID' => $cat_id,
				'CAT_DESC' => $category_rows[$i]['cat_title'],
				'U_VIEWCAT' => append_sid("index.$phpEx?" . POST_CAT_URL . "=$cat_id"))
			);

			if ( $viewcat == $cat_id || $viewcat == -1 )
			{
				for($j = 0; $j < $total_forums; $j++)
				{
					if ( $forum_data[$j]['cat_id'] == $cat_id )
					{
						$forum_id = $forum_data[$j]['forum_id'];

						if ( $is_auth_ary[$forum_id]['auth_view'] )
						{
							if ( $forum_data[$j]['forum_status'] == FORUM_LOCKED )
							{
								$folder_image = $images['forum_locked']; 
								$folder_alt = $lang['Forum_locked'];
							}
							else
							{
								$unread_topics = false;
								if ( $userdata['session_logged_in'] )
								{
									if ( !empty($new_topic_data[$forum_id]) )
									{
										while( list($check_topic_id, $check_post_time) = @each($new_topic_data[$forum_id]) )
										{
											if ( intval($tracking_topics[$check_topic_id]) < $check_post_time )
											{
												$unread_topics = true;
												break;
											}
										}

										if ( !empty($tracking_forums[$forum_id]) )
										{
											if ( $tracking_forums[$forum_id] > $forum_data[$j]['post_time'] )
											{
												$unread_topics = false;
											}
										}

										if ( isset($HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all']) )
										{
											if ( $HTTP_COOKIE_VARS[$board_config['cookie_name'] . '_f_all'] > $forum_data[$j]['post_time'] )
											{
												$unread_topics = false;
											}
										}
									}
								}

								$folder_image = ( $unread_topics ) ? $images['forum_new'] : $images['forum']; 
								$folder_alt = ( $unread_topics ) ? $lang['New_posts'] : $lang['No_new_posts']; 
							}

							$posts = $forum_data[$j]['forum_posts'];
							$topics = $forum_data[$j]['forum_topics'];

							if ( $forum_data[$j]['forum_last_post_id'] )
							{
								$last_post_time = create_date($board_config['default_dateformat'], $forum_data[$j]['post_time'], $board_config['board_timezone']);

								// OLD
								// $last_post = $last_post_time . '<br />';
								//
								
								// MOD - TODAY AT - BEGIN
								//
								if ( $board_config['time_today'] < $forum_data[$j]['post_time'])
								{ 
									$last_post = sprintf($lang['Today_at'], create_date($board_config['default_timeformat'], $forum_data[$j]['post_time'], $board_config['board_timezone'])) . ' | '; 
								}
								else if ( $board_config['time_yesterday'] < $forum_data[$j]['post_time'])
								{ 
									$last_post = sprintf($lang['Yesterday_at'], create_date($board_config['default_timeformat'], $forum_data[$j]['post_time'], $board_config['board_timezone'])) . ' | '; 
								}
								else
								{ 
									$last_post = $last_post_time . ' | '; 
								} 
								// MOD - TODAY AT - END
								
								$last_post .= ( $forum_data[$j]['user_id'] == ANONYMOUS ) ? ( ($forum_data[$j]['post_username'] != '' ) ? $forum_data[$j]['post_username'] . ' ' : $lang['Guest'] . ' ' ) : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '='  . $forum_data[$j]['user_id']) . '">' . $forum_data[$j]['username'] . '</a> ';
								$last_post = '<span class="nobr">' . $last_post . '</span>';
								$last_post .= '<br /><a href="' . append_sid("viewtopic.$phpEx?"  . POST_TOPIC_URL . '=' . $forum_data[$j]['topic_id']) . '">' . $forum_data[$j]['topic_title'] . '</a>';

								$last_post .= '&nbsp;<a href="' . append_sid("viewtopic.$phpEx?"  . POST_POST_URL . '=' . $forum_data[$j]['forum_last_post_id']) . '#' . $forum_data[$j]['forum_last_post_id'] . '" class="newMessageLink" title="' . $lang['View_latest_post'] . '"><span>[' . $lang['View_latest_post'] . ']</span></a>';
							}

							else
							{
								$last_post = $lang['No_Posts'];
							}

							if ( count($forum_moderators[$forum_id]) > 0 )
							{
								$l_moderators = ( count($forum_moderators[$forum_id]) == 1 ) ? $lang['Moderator'] : $lang['Moderators'];
								$moderator_list = implode(', ', $forum_moderators[$forum_id]);
							}
							else
							{
								$l_moderators = '&nbsp;';
								$moderator_list = '&nbsp;';
							}

							$row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
							$row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];

							$template->assign_block_vars('catrow.forumrow',	array(
								'ROW_COLOR' => '#' . $row_color,
								'ROW_CLASS' => $row_class,
								'FORUM_FOLDER_IMG' => $folder_image, 
								'FORUM_NAME' => $forum_data[$j]['forum_name'],
								'FORUM_DESC' => $forum_data[$j]['forum_desc'],
								'POSTS' => $forum_data[$j]['forum_posts'],
								'TOPICS' => $forum_data[$j]['forum_topics'],
								'VIEWS' => $forum_data[$j]['forum_views'],
								'LAST_POST' => $last_post,
								'MODERATORS' => $moderator_list,
								'FORUM_ID' => $forum_id,

								'L_MODERATOR' => $l_moderators, 
								'L_FORUM_FOLDER_ALT' => $folder_alt,

								'U_VIEWFORUM' => append_sid("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id"))
							);
						}
					}
				}
			}
		}
	} // for ... categories
}// if ... total_categories
else
{
	message_die(GENERAL_MESSAGE, $lang['No_forums']);
}

//
// Generate the page
//
$template->pparse('body');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>
Копирайты сверху убраны для экономии места, которое займёт мой пост.

Добавлено: 21.03.2005 10:49
Siava
BadBlock
Он хранит ли какие именно сообщения непрочитаны?
То есть, работает ли правильно кнопка "перейти к непрочитанным сообщениям"?
Да, именно новые посты и темы помечаются непрочитанными ;) Естественно, если вы загляните в непрочитанную тему и выйдете оттуда, то все её сообщения пометятся как прочитанные.

Добавлено: 21.03.2005 11:46
BadBlock
Не подскажете, давно ли стоит у вас мод и какой при этом у вас размер его таблиц(ы) в базе данных?

Добавлено: 21.03.2005 14:01
Siava
BadBlock
Мод установлен около полугода, размер всей БД 95Мб, а вот размер его таблицы сейчас сказать точно не смогу, надо дома глянуть ;) но примерно 1-3Мб (лучше вечерком гляну, чтоб точнее)

Добавлено: 21.03.2005 14:06
BadBlock
Ага, посмотрите, плз... Это как раз тот форум, где "100к сообщений, 300-400 сообщений в день"?

Добавлено: 21.03.2005 14:17
Siava
BadBlock
Да. Он у меня в локальной сети (дома на выделенном сервере), доступ к которой из инета закрыт, поэтому я с работы не могу туда зайти. Вечерком гляну ;)

(сорри, это уже оффтоп) :oops:

Добавлено: 22.03.2005 1:38
Siava
BadBlock
Глянул. 8)

При установке мод добавляет в таблицу users своё поле:

Код: Выделить всё

ALTER TABLE phpbb_users ADD user_unread_topics TEXT;
в котором хранит непрочитанные топики вот в таком формате:

Код: Выделить всё

1110435043;1999:0;2:0;2063:0;1994:0;1990:0;1931:0;1950:0;1986:0;2152:0;
.........и т.д..
Пользователей у меня в форуме 384 (так как я часто чищу неактивных) и таблица phpbb_users занимает около 500кб. Если учитывать, что в ней кроме непрочитанных сообщений хранятся и данные о пользователях, то можно прикинуть, какая доля уходит на этот мод, что есть очень неплохо :D

Добавлено: 22.03.2005 1:45
BadBlock
Хм... То есть, ставится текущий timestamp и для него по всем темам количество НЕпрочтённых постов, например "1999:0" -- это 0 непрочитанных постов в топике 1999. Наверное, так. Пойду поразмыслю. Спасибо...

Добавлено: 06.04.2005 13:34
BadBlock
Поставил.
Мод не без глюков:
1. Открывает иногда не ту тему по "переход к новым".
2. Порой не помечает прочитанные темы как прочитанные.

Есть ли кто-нибудь, кто работал с ним и знает про его глюки и как с ними бороться?

Добавлено: 06.04.2005 14:43
Siava
BadBlock
1. Сам с таким никогда не сталкивался, но два человека из 400 жаловались на подобный глюк, да и происходит он редко..
2. В каком смысле? У меня работает без проблем, как для всего форума, так и для отдельных разделов.