Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Может кому пригодиться ...

Форум для авторов модов для phpBB 2.0.x.
Jovani
phpBB 2.0.5
Сообщения: 477
Стаж: 19 лет 11 месяцев

Сообщение Jovani »

Олег
То, что я указал, это только форма входа на форум, и не более.
У нее есть свои и плюсы и минусы.

Если тебе нужна выборка данных из базы - имя юзера, кол-во сообщений, и тд, здесь несколько сложнее.
Все это уже не раз описывалось, и писать еще раз нет смысла.
Есть два варианта, если нужно, напишу позже, а пока дам только ссылку на вариант, как ЭТО сделать правильно:
http://www.ajquick.com/programming/phpbb/tutorial/
Jovani
phpBB 2.0.5
Сообщения: 477
Стаж: 19 лет 11 месяцев

Сообщение Jovani »

В течении 24-ех часов, наш форум посещали ...

Незнаю, может кому и пригодиться ...
Собственно, вырезка из мода:
## MOD Author: rhs98 < russ@isitaboat.co.uk > (Russell Smith) http://russ.isitaboat.co.uk/
## MOD Description: Shows which users have been online today.
## MOD Version: 1.1.2

Отличие от мода - список посетивших, выводится не на главную страницу, а в отдельную.
При посещаемом форуме, оригинальный мод будет сильно подгружать главную страницу, поэтому, передал.
Создаете два файла, и в index_body.tpl делаете ссылку на today.php.



today.php (в корень форума)

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

<?php

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

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


// Lets build a page ...
$page_title = $l_title;
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

$template->set_filenames(array(
	'body' => 'today.tpl')
);
make_jumpbox('viewforum.'.$phpEx);



// Begin USERS ONLINE TODAY
// http://russ.isitaboat.co.uk/
$uot_this_timestamp_array = getdate();
$uot_when_from = mktime ( 0 , 0 , 0 , $uot_this_timestamp_array[mon] , $uot_this_timestamp_array[mday] , $uot_this_timestamp_array[year] );



$sql =  "SELECT count(*) cnt
	FROM ".USERS_TABLE." u
	WHERE u.user_session_time >= ". $uot_when_from . "
	ORDER BY u.username ASC";
if ( !($uot_result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not obtain regd user/online information', '', __LINE__, __FILE__, $sql);
}

$row = $db->sql_fetchrow($uot_result);
$uot_count = $row['cnt'];



$sql =  "SELECT u.user_id, u.username, u.user_allow_viewonline, u.user_level, user_session_time
	FROM ".USERS_TABLE." u
	WHERE u.user_session_time >= ". $uot_when_from . "
	ORDER BY u.username ASC";
if ( !($uot_result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not obtain regd user/online information', '', __LINE__, __FILE__, $sql);
}

$users_online_today=array();

while ( $row = $db->sql_fetchrow($uot_result) )
{
	//counter stuff
	$$which_counter++;
	$row_color = ( $$which_counter % 2 ) ? $theme['td_color1'] : $theme['td_color2'];
	$row_class = ( $$which_counter % 2 ) ? $theme['td_class1'] : $theme['td_class2'];

	//generate the user name (robbed from the code above)
	$uot_user_id = $row['user_id'];

	//reset the style...
	$uot_style = '';

	if ( $uot_user_id != $prev_user )
	{
		$uot_username_plain = $uot_username = $row['username'];

		if ( $row['user_level'] == ADMIN )
		{
			$uot_style = 'style="color:#' . $theme['fontcolor3'] . ';"';
			$uot_username = '<b>' . $uot_username . '</b>';
		}
		else if ( $row['user_level'] == MOD )
		{
			$uot_style = 'style="color:#' . $theme['fontcolor2'] . ';"';
			$uot_username = '<b>' . $uot_username . '</b>';
		}

		if ( !$row['user_allow_viewonline'] )
		{
			$view_online = ( $userdata['user_level'] == ADMIN ) ? true : false;
			$uot_username = $lang['UOT_hidden_start'] . $uot_username . $lang['UOT_hidden_end'];
		}
		else
		{
			$view_online = true;
		}

	}

	//annon does not have a profile...
	if($row['user_id']>0){
		$uot_username = sprintf('<a href="profile.php?mode=viewprofile&u=%d" title="%s последнее посещение в: %s" %s>%s</a>',$uot_user_id,$uot_username_plain,create_date('d-m-Y H:i', $row['user_session_time'], $board_config['board_timezone']),$uot_style,$uot_username);
	}

	//this will show just the user's name, with the time in the tool tip.
	if($view_online)
	{
		array_push($users_online_today,$uot_username);
	}

}

if(count($users_online_today)==0){
	array_push($users_online_today,$lang['UOT_none']);
}

$template->assign_vars(array(
	'UOT_COUNT' => $uot_count,
	'UOT_LIST' => implode(", ",$users_online_today)
	)
);
//end of UOT

// Generate the page
$template->pparse('body');
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>

today.tpl в (templates/xxxxxxx/today.tpl)

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

<br><table width=100% cellspacing=2 cellpadding=2 border=0><tr><td><a class=topictitle href="{U_INDEX}">{L_INDEX}</a></td></tr></table>

<table class=forumline width=100% cellspacing=1 cellpadding=3 border=0>
<tr><th>В течении 24-ех часов, наш форум посещало участников - <font color="bb1100">{UOT_COUNT}</font></th></tr>

<tr class=postbody>
<td class=row1 align=left>&nbsp;{UOT_LIST}&nbsp;</td>
</tr>
</table>
<br>

<table width=100% height=30 border=0 cellpadding=2 cellspacing=0 align=center>
<tr class=postbody><td align=left valign=top>{JUMPBOX}</td></tr>
</table>
Шаблон, естественно, подгоните под себя.
К сожалению, оформлять по правилам, нет времени, но на вопросы, по возможности, отвечу ...
Последний раз редактировалось Jovani 30.05.2005 5:38, всего редактировалось 1 раз.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5283
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Jovani
кстати, есть мод такой - вот весь его код :lol:

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

######################################################## 
## 
## MOD Title: Users of the day 
## MOD Version: 2.0 
## Author: ZoZo <zozo@etoiles.net> 
## 
## Description: 
## Displays, under the online users list, a list of the users 
## who come during the last XX hours. Can also display the list 
## of the users who didn't come. (see "Edit below") 
## 
## Installation Level: easy 
## Installation Time: 2-3 minutes 
## 
## Files To Edit: 3 
## - /templates/subSilver/index_body.tpl 
## - /language/lang_english/lang_main.php 
## - /includes/page_header.php 
## 
## Included Files: None 
## 
######################################################## 
## VERSION HISTORY: 
## 
## June 20th 2003: v2.0 
## 1. The list's delay is customizable, but you must give a number in hours, 24 by default. 
## 2. There's now a counter for each list. 
## 3. The MOD doesn't display the list of the users who didn't visit by default. 
## 
## October 28th 2002: v1.1 
## 1. The MOD uses the database variable "user_session_time" instead of "user_lastvisit", which is updated only when the user logs out. 
## 
## October 15th 2002: v1.0 
## 1. Created main features. 
## 
######################################################## 
## TODO LIST: 
## 
## 1. Don't restrict the time unit to hours. 
## 
######################################################## 
## PLEASE REPORT ANY BUGS OR SUGGESTIONS ## 
######################################################## 

# 
#-----[ ACTION: open ]--------------------------------- 
# 
/templates/subSilver/index_body.tpl 

# 
#-----[ ACTION: find ]--------------------------------- 
# 
<td class="row1" align="center" valign="middle" rowspan="2"><img src="templates/subSilver/images/whosonline.gif" alt="{L_WHO_IS_ONLINE}" /></td> 

# 
#-----[ ACTION: replace by ]--------------------------- 
# 
<td class="row1" align="center" valign="middle" rowspan="3"><img src="templates/subSilver/images/whosonline.gif" alt="{L_WHO_IS_ONLINE}" /></td> 

# 
#-----[ ACTION: find ]--------------------------------- 
# 
<td class="row1" align="left"><span class="gensmall">{TOTAL_USERS_ONLINE} &nbsp; [ {L_WHOSONLINE_ADMIN} ] &nbsp; [ {L_WHOSONLINE_MOD} ]<br />{RECORD_USERS}<br />{LOGGED_IN_USER_LIST}</span></td> 

# 
#-----[ ACTION: add after ]---------------------------- 
# 
</tr> 
<tr> 
<td class="row1" align="left"><span class="gensmall">{USERS_OF_THE_DAY_LIST}</span></td> 

# 
#-----[ ACTION: repeat for all templates ]------------- 
# 



# 
#-----[ ACTION: open ]-------------------------------- 
# 
/language/lang_english/lang_main.php 

# 
#-----[ ACTION: find ]-------------------------------- 
# 
$lang['Registered_users'] = 

# 
#-----[ ACTION: add before ]-------------------------- 
# 
$lang['Day_users'] = '%d registered users visit during the last %d hours:'; 
$lang['Not_day_users'] = '%d registered users <span style="color:red">DIDN\'T</span> visit during the last %d hours:'; 

# 
#-----[ ACTION: repeat for all languages ]------------ 
# 



# 
#-----[ ACTION: open ]-------------------------------- 
# 
/includes/page_header.php 

# 
#-----[ ACTION: find ]-------------------------------- 
# 
'LOGGED_IN_USER_LIST' => $online_userlist, 

# 
#-----[ ACTION: add after ]--------------------------- 
# 
'USERS_OF_THE_DAY_LIST' => $day_userlist, 

# 
#-----[ ACTION: find ]-------------------------------- 
# 
// 
// Obtain number of new private messages 
// if user is logged in 
// 

# 
#-----[ ACTION: add before ]-------------------------- 
# 
// 
// Users of the day MOD 
// 

// ############ Edit below ############ 
// # 
$display_not_day_userlist = 0; // change to 1 here if you also want the list of the users who didn't visit to be displayed 
$users_list_delay = 24; // change here to the number of hours wanted for the list 
// # 
// ############ Edit above ############ 

$sql = "SELECT user_id, username, user_allow_viewonline, user_level, user_session_time 
FROM ".USERS_TABLE." 
WHERE user_id > 0 
ORDER BY user_level DESC, username ASC"; 
if( !($result = $db->sql_query($sql)) ) 
{ 
message_die(GENERAL_ERROR, 'Could not obtain user/day information', '', __LINE__, __FILE__, $sql); 
} 

$day_userlist = ''; 
$day_users = 0; 
$not_day_userlist = ''; 
$not_day_users = 0; 

while( $row = $db->sql_fetchrow($result) ) 
{ 
$style_color = ''; 
if ( $row['user_level'] == ADMIN ) 
{ 
$row['username'] = '<b>' . $row['username'] . '</b>'; 
$style_color = 'style="color:#' . $theme['fontcolor3'] . '"'; 
} 
else if ( $row['user_level'] == MOD ) 
{ 
$row['username'] = '<b>' . $row['username'] . '</b>'; 
$style_color = 'style="color:#' . $theme['fontcolor2'] . '"'; 
} 
if ( $row['user_allow_viewonline'] ) 
{ 
$user_day_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>'; 
} 
else 
{ 
$user_day_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'><i>' . $row['username'] . '</i></a>'; 
} 
if ( $row['user_allow_viewonline'] || $userdata['user_level'] == ADMIN ) 
{ 
if ( $row['user_session_time'] >= ( time() - $users_list_delay * 3600 ) ) 
{ 
$day_userlist .= ( $day_userlist != '' ) ? ', ' . $user_day_link : $user_day_link; 
$day_users++; 
} 
else 
{ 
$not_day_userlist .= ( $not_day_userlist != '' ) ? ', ' . $user_day_link : $user_day_link; 
$not_day_users++; 
} 
} 
} 

$day_userlist = ( ( isset($forum_id) ) ? '' : sprintf($lang['Day_users'], $day_users, $users_list_delay) ) . ' ' . $day_userlist; 

$not_day_userlist = ( ( isset($forum_id) ) ? '' : sprintf($lang['Not_day_users'], $not_day_users, $users_list_delay) ) . ' ' . $not_day_userlist; 

if ( $display_not_day_userlist ) 
{ 
$day_userlist .= '<br />' . $not_day_userlist; 
} 

// 
// End of MOD 
// 



# 
#-----[ ACTION: save/close all ]---------------------- 
# 

# 
#-----[ ACTION: upload the modified files ]----------- 
# 

# 
#-----[ ACTION: enjoy ]------------------------------- 
# 

# 
#-----[ PLEASE REPORT ANY BUGS OR SUGGESTIONS]-------- 
#
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

Siava
он же сказал, что выводится не на главную, а на отдельную страницу...
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Siava
Загрузку этим модом себе представляешь? Тем более он очень неоптимальный - считает данные для каждой страницы...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5283
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

Xpert
Да, представляю - он у меня одно время был установлен :lol:
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 3 месяца
Откуда: Novosibirsk,RU

Сообщение [R: R@m$e$ :U] »

Xpert
кста... загрузка им действительно большая =) у мя стоит =)))
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
alexnik
phpBB 1.0.0
Сообщения: 2
Стаж: 18 лет 2 месяца
Откуда: Н. Новгород

Сообщение alexnik »

Олег писал(а): возможность вывода фразы, типа такой "привет , ИМЯ_ЮЗЕРА.
Кстати а где после авторизации хранится ID юзера?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

$userdata['user_id']
В этой теме это совсем не кстати...
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Jovani
phpBB 2.0.5
Сообщения: 477
Стаж: 19 лет 11 месяцев

Сообщение Jovani »

Еще один типа, мини-мод
Суть - в многостраничных темах, отмечать номер страницы в <title> HTML-а. Полезно, когда кто-то сохраняет все или выборочные страницы из большой темы.

В общем, открываем viewtopic.php
Находим:
// Output page header
//
$page_title = str_replace ('\'', '', $topic_title);
Заменяем на:
// Output page header
//
$page_number = floor( $start / intval($board_config['posts_per_page']) ) + 1;
if (($page_number == 1) and ($total_replies < intval($board_config['posts_per_page'])))
{
$page_number = '';
}
else
{
$page_number = ' [' . $page_number . ']';
}

$page_title = str_replace ('\'', '', $topic_title . "$page_number");
PS
Ваш код может несколько отличаться, но смысл думаю, понятен.
Кстати, вышеуказанный код можно оптимизировать, но уж не стал ...
Iftin
phpBB 2.0.7
Сообщения: 573
Стаж: 18 лет 11 месяцев
Откуда: Moscow

Re: Может кому пригодиться ...

Сообщение Iftin »

Jovani писал(а):На "мод" это не тянет, а если и тянет, то возможно, что он уже существует.
В общем, кидаю во флейм, кому нужно, разбирайтесь ...

Кратко, о том, что ЭТО:
В phpBB, меня не устроил вывод соглашения с условиями регистрации, поэтому немного переделал:
1 - убрано "менее 13-ти лет"
2 - ссылки переделаны на кнопки
3 - и самое главное - кнопка "Согласен", не активна 20 секунд, для "принудительного" прочтения условий регистрации.

Редактируется файл шаблона agreement.tpl
Меняетеся код ссылок "согласия".
К сожалению, сейчас нет времени подробно расписывать - что на что менять, думаю поймете, и кому нужно, заточит код под себя.
Если не понятно, спрашивайте, по появлению времени - отвечу.

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

<div align=center>
<form name=agree>
<input onclick=ok(); type=button value="Прочтение условий не менее 20-ти секунд!" name=agreeb>&nbsp;&nbsp;
<input onclick="self.location.href=''" type=button value="Не согласен">
</form>
<script>
function ok()
{
window.location="profile.php?mode=register&agreed=true";
}
var secs = 20;
document.agree.agreeb.disabled=true;

for(i=1;i<=secs;i++)
{
window.setTimeout("update(" + i + ")", i * 1000);
}

function update(num) {
if(num == secs) {
document.agree.agreeb.value ="Согласен";
document.agree.agreeb.disabled=false;
}
else {
printnr = secs-num;
document.agree.agreeb.value = "Внимательно читаем условия, осталось " + printnr +" сек ";
}
}
</script>
</div>
а мод учитывает версию языка шаблона профиле? :)
Jovani
phpBB 2.0.5
Сообщения: 477
Стаж: 19 лет 11 месяцев

Сообщение Jovani »

Iftin
О каком профиле речь ???
Регестрирующийся, не имеет ещё профиля на форуме.

Вернуться в «Для авторов (phpBB 2.0.x)»