Внимание!
Не все расширения для phpBB 3.2 совместимы с phpBB 3.3, главным образом из-за неверного синтаксиса в определениях сервисов (отсутствия обрамляющих кавычек - '...').
Перед обновлением необходимо убедиться в совместимости всех расширений.
Рекомендуется предварительно тестировать обновление на копии конференции (локально или на сервере).

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

Идеи для расширения функциональности phpBB 2.0.x
Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

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

Сообщение 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К записей, мы-гы-гы). А надо бы – наоборот. Свои полные выкладки по улучшенной логике работы мода могу выложить, если есть кто-нибудь заинтересованный в развитии этого мода (в течение ближайших месяцев у меня времени на программирование этого дела не будет). Я вижу, что нет никаких проблем сделать так, что база совсем не будет разбухать, да.

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

Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Зарегистрирован: 10.01.2005 19:43
Откуда: Москва

Сообщение Coagulant »

Возможно вам подойдет мод Keep unread flags.

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Сообщение BadBlock »

Хм, завабно, не видел такого... а можно в двух словах, как он работает?

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4306
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 113 раз
Поблагодарили: 483 раза

Сообщение Siava »

BadBlock
Keep unread flags делает то же самое. То есть, если вы не прочитали все темы и вышли из форума, то при входе непрочитанные темы останутся на месте ;) У мода 2 режима хранения этих сообщений.. как-то через куки (я так и не понял каким образом) и в базе данных (установил именно этот вариант).
Работает нормально в форуме с 100к сообщений, где 300-400 сообщений в день :D
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.5.x)

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Сообщение BadBlock »

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

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

Splurov
phpBB 1.4.4
Сообщения: 138
Зарегистрирован: 28.11.2004 10:12
Откуда: Россия, Москва

Сообщение 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);

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

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4306
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 113 раз
Поблагодарили: 483 раза

Сообщение Siava »

BadBlock
Он хранит ли какие именно сообщения непрочитаны?
То есть, работает ли правильно кнопка "перейти к непрочитанным сообщениям"?
Да, именно новые посты и темы помечаются непрочитанными ;) Естественно, если вы загляните в непрочитанную тему и выйдете оттуда, то все её сообщения пометятся как прочитанные.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.5.x)

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Сообщение BadBlock »

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

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4306
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 113 раз
Поблагодарили: 483 раза

Сообщение Siava »

BadBlock
Мод установлен около полугода, размер всей БД 95Мб, а вот размер его таблицы сейчас сказать точно не смогу, надо дома глянуть ;) но примерно 1-3Мб (лучше вечерком гляну, чтоб точнее)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.5.x)

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Сообщение BadBlock »

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

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4306
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 113 раз
Поблагодарили: 483 раза

Сообщение Siava »

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

(сорри, это уже оффтоп) :oops:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.5.x)

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4306
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 113 раз
Поблагодарили: 483 раза

Сообщение 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
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.5.x)

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Сообщение BadBlock »

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

Аватара пользователя
BadBlock
phpBB 1.4.3
Сообщения: 82
Зарегистрирован: 20.03.2005 21:48
Откуда: Саров, Россия
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Сообщение BadBlock »

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

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

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4306
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 113 раз
Поблагодарили: 483 раза

Сообщение Siava »

BadBlock
1. Сам с таким никогда не сталкивался, но два человека из 400 жаловались на подобный глюк, да и происходит он редко..
2. В каком смысле? У меня работает без проблем, как для всего форума, так и для отдельных разделов.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.5.x)

Вернуться в «Запросы модов для phpBB 2.0.x»