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

Recent Topics

Все моды, созданные нашим сообществом для phpBB 2.0.x, анонсированы тут.
pokoy
phpBB 1.0.0
Сообщения: 8
Стаж: 18 лет 8 месяцев

Сообщение pokoy »

А как сделать чтобы темы открывались в новом окне?
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5284
Стаж: 19 лет 3 месяца
Откуда: Питер
Благодарил (а): 186 раз
Поблагодарили: 793 раза

Сообщение Siava »

pokoy
в recent_body.tpl

найди

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

<a href="{topicrow.U_TOPIC}">
замени на

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

<a href="{topicrow.U_TOPIC}" target="_blank">
=)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Йыс
phpBB 1.4.0
Сообщения: 34
Стаж: 18 лет 9 месяцев

Сообщение Йыс »

Так как же всё таки вывести определённое количество тем с помощью этого мода (в архиве всё по английски, достаточных знаний php нету, найти ответ не удалось)?
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Открываем recent.php, ищем и меняем:

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

$cfg_nm_topics = 15;		// number of topics to output
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Йыс
phpBB 1.4.0
Сообщения: 34
Стаж: 18 лет 9 месяцев

Сообщение Йыс »

Спасибо, прекрасный мод. Только вот надо было на русском языке его делать.
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

К следующей версии надеюсь успею подготовить подробное руководство на русском языке
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 4 месяца
Откуда: Орёл

Сообщение Профессор »

Вариант без вызова templates.php Выводит все.
Моя переделка мода Xperta. Работает без вызова templates.php, что сокрашает нагрузку на сервер.

Выводит даты создания и авторов постов. Авторы выводятся не тольк зарегистрированные, но и те, кто писали без регистрации.

Предупреждаю, что адреса формируются для форума с установленным модом Search Engines Friendly Board.

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

<?php
// recent.php,v 1.0.4
define('IN_PHPBB', true);
global $board_config, $userdata;
$phpbb_root_path = './';
include('./common.php');
$cfg_ignore_forums = '0';
$cfg_nm_topics = 10;
$cfg_max_topic_length = 50;
$sql = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.topic_replies, p.poster_id, u.user_id, u.username, p.post_time, p.post_username 
	FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . FORUMS_TABLE . " AS f, " . USERS_TABLE . " AS u
	WHERE t.forum_id = f.forum_id
		AND f.auth_read = " . AUTH_ALL . "
		AND t.forum_id NOT IN(" . $cfg_ignore_forums .")
		AND p.post_id = t.topic_last_post_id
		AND t.topic_moved_id = 0
		AND u.user_id = p.poster_id 
		AND u.username = u.username
	ORDER BY p.post_id DESC LIMIT $cfg_nm_topics";
if ( !$result = $db->sql_query($sql) )	{
	message_die(GENERAL_ERROR, "Could not fetch recent topics information.", '', __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
	$topic_title = $row['topic_title'];
	$topic_title = ( strlen($topic_title) > $cfg_max_topic_length ) ? substr($topic_title, 0, $cfg_max_topic_length) . '&hellip;' : $topic_title;
	$time_last_topic = create_date('d M G:i', $row['post_time'], $board_config['board_timezone']);
	$viewtopic_url = 'http://Ваш сайт/forum/topic' . $row['topic_id'] . '.html';
	$last_viewtopic_url = 'http://Ваш сайт/forum/post' . $row['topic_last_post_id'] . '.html#' . $row['topic_last_post_id'];
	if ( $row['post_username'] == '' )	{
		$name = $row['username'];
	}
	else	{
		$name = $row['post_username'];
	}	
	$output = '<a href=' . $last_viewtopic_url . ' target=_blank><img src=http://Ваш сайт/forum/latest_reply.gif alt=Последнее></a><a href=' . $viewtopic_url . ' target=_blank>' . str_replace("'", "\'", $topic_title) . '</a> Ответов-' . $row['topic_replies'] . ',' . $name . ',' .  $time_last_topic . '<br>';
	echo "document.writeln('$output');\n";
}
?>
Последний раз редактировалось Профессор 13.09.2005 20:05, всего редактировалось 1 раз.
Йыс
phpBB 1.4.0
Сообщения: 34
Стаж: 18 лет 9 месяцев

Сообщение Йыс »

Профессор
Этот код содержит множество ошибок. Лучше просто отвязать скрипт от шаблона:

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

<?php
$cfg_ignore_forums = '0'; 	// id'ы форумов, с которых не будут отображаться последние темы (разделять запятыми).
$cfg_nm_topics = 15;		// количество тем для вывода.
$cfg_max_topic_length = 30; // максимальная длина темы, если больше, заголовок будет укорочен.

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

if (!empty($HTTP_SERVER_VARS['SERVER_SOFTWARE']) && strstr($HTTP_SERVER_VARS['SERVER_SOFTWARE'], 'Apache/2'))
{
	header ('Cache-Control: no-cache, pre-check=0, post-check=0');
}
else
{
	header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
}
header ('Expires: 0');
header ('Pragma: no-cache');

$orig_word = array();
$replacement_word = array();
obtain_word_list($orig_word, $replacement_word);

$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
$server_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['server_name']));
$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) : '';
$script_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path']));
$script_name = ($script_name == '') ? $script_name : '/' . $script_name;
$board_path = $server_protocol . $server_name . $server_port . $script_name;
$viewtopic_url = $board_path . '/viewtopic.' . $phpEx;

$sql = "SELECT * FROM " . USERS_TABLE . " WHERE user_id = ". ANONYMOUS;
if ( !($result = $db->sql_query($sql)) )
{
	message_die(CRITICAL_ERROR, 'Невозможно получить анонимные данные из таблицы пользователей.', '', __LINE__, __FILE__, $sql);
}
$userdata = $db->sql_fetchrow($result);
init_userprefs($userdata);

$sql = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id
	FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . FORUMS_TABLE . " AS f
	WHERE t.forum_id = f.forum_id
		AND f.auth_read = " . AUTH_ALL . "
		AND t.forum_id NOT IN(" . $cfg_ignore_forums .")
		AND p.post_id = t.topic_last_post_id
		AND t.topic_moved_id = 0
	ORDER BY p.post_id DESC LIMIT $cfg_nm_topics";

if ( !$result = $db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, "Невозможно выбрать информацию о последних темах.", '', __LINE__, __FILE__, $sql);
}

while ( $row = $db->sql_fetchrow($result) )
{
	$topic_title = $row['topic_title'];
	if ( count($orig_word) )
	{
		$topic_title = preg_replace($orig_word, $replacement_word, $topic_title);
	}
	$topic_title = ( strlen($topic_title) > $cfg_max_topic_length ) ? substr($topic_title, 0, $cfg_max_topic_length) . '&hellip;' : $topic_title;

		echo '<a href="' . $viewtopic_url . '?' . POST_TOPIC_URL . '=' . $row['topic_id'] . '">';
		echo str_replace("'", "\'", $topic_title), "</a><br>";
}

?>
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 4 месяца
Откуда: Орёл

Сообщение Профессор »

Йыс, а что Вы имеете в виду под ошибками?
У меня это вполне нормально работает. Ну разве, что border="0" в тегах img надо поставить.
Кстати, в том варианте, который вы написали выводятся только названия тем, а в предложенной выше модификации выводится все. И имена пользователей (зарегистрированных и не зарегистрированных) и даты и ссылки на последние сообщения.
Йыс писал(а):echo '<a href="' . $viewtopic_url . '?' . POST_TOPIC_URL . '=' . $row['topic_id'] . '">';
echo str_replace("'", "\'", $topic_title), "</a><br>";
Возможно, то что Вы приняли за ошибки является следствием того, что моя модификация мода написана не для простого форума, а с установленным модом Search Engines Friendly Board. Я формирую в список последних тем названия топиков в виде
topic' . $row['topic_id'] . '.html
Это не ошибка, а так надо.

Потом, у вас темы выводятся при помощи
echo '<a href="' . $viewtopic_url . '?' . POST_TOPIC_URL . '=' . $row['topic_id'] . '">';
Дело в том, что таким образом скрипт не сможет вывести ничего на экран на другом сайте. Хотя, как знать. Я вывожу текст в небольшой фрейм. Может, если фрейм не использовать, то все будет нормально? Мне же нужен вывод именно во фрейм, а echo во фрейм не выводило, а вот через
echo "document.writeln('$output');\n";
все получилось нормально.

Понимаю, что фреймы лучше не использовать. Они плохо индексируются, но мне с точки зрения дизайна нужно было, чтобы вывод осуществлялся в строго ограниченную область, которую не растянуло бы по вертикали. К тому же задержка с выводом во фрейм не вызывает тормозов при загрузке всей страницы. Хотя, фрейм является у меня наследием мода Topic Anywhere, который безюожно тормозил. А частично ускорил его работу, но всё равно небольшая задержка оставалась. Мод Xperta вне всякого сомнения работает гораздо быстрее, но я считаю, что его можно улучшить. Одним из способов этого является отказ от использвания templates.php при выводе тем через скрипт на стороннем сайте. Коль можно обойтись без templates, так зачем его вызывать?

Для вывода тем на главной странице сайта я также использую мод Xperta , но делаю это не через script. Я считаю это не экономичным. Завтра помещу здесь свой вариант. Думаю Xpert оценит нововведения и перенесет их в свой мод. :)

Добавлено спустя 6 минут 4 секунды:
Профессор писал(а):Йыс, а что Вы имеете в виду под ошибками?
У меня это вполне нормально работает. Ну разве, что border="0" в тегах img надо поставить.

Впрочем, у меня убраны вот эти строки.
if (!empty($HTTP_SERVER_VARS['SERVER_SOFTWARE']) && strstr($HTTP_SERVER_VARS['SERVER_SOFTWARE'], 'Apache/2'))
{
header ('Cache-Control: no-cache, pre-check=0, post-check=0');
}
else
{
header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
}
header ('Expires: 0');
header ('Pragma: no-cache');

$orig_word = array();
$replacement_word = array();
obtain_word_list($orig_word, $replacement_word);

$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
$server_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['server_name']));
$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) : '';
$script_name = preg_replace('#^\/?(.*?)\/?$#', '\1', trim($board_config['script_path']));
$script_name = ($script_name == '') ? $script_name : '/' . $script_name;
$board_path = $server_protocol . $server_name . $server_port . $script_name;
$viewtopic_url = $board_path . '/viewtopic.' . $phpEx;
Просто мод вначале был переделан для формирования последних тем на главной странице форума, а там этих строк не требовалось. Потом я стал использвать мод для вывода тем на другой дружественный сайт, а этот кусок не вставил. Как я понимаю, он отвечает за запрет кэширования, но у меня всё нормально работает и без него.

Кстати, в том варианте, который написал Йыс выводятся только названия тем, а в предложенной выше модификации выводится все. И имена пользователей (зарегистрированных и не зарегистрированных) и даты и ссылки на последние сообщения.
Йыс писал(а):echo '<a href="' . $viewtopic_url . '?' . POST_TOPIC_URL . '=' . $row['topic_id'] . '">';
echo str_replace("'", "\'", $topic_title), "</a><br>";
Возможно, то что Вы приняли за ошибки является следствием того, что моя модификация мода написана не для простого форума, а с установленным модом Search Engines Friendly Board. Я формирую в список последних тем названия топиков в виде
topic' . $row['topic_id'] . '.html
Это не ошибка, а так надо.

Потом, у вас темы выводятся при помощи
echo '<a href="' . $viewtopic_url . '?' . POST_TOPIC_URL . '=' . $row['topic_id'] . '">';
Дело в том, что таким образом скрипт не сможет вывести ничего на экран на другом сайте. Хотя, как знать. Я вывожу текст в небольшой фрейм. Может, если фрейм не использовать, то все будет нормально? Мне же нужен вывод именно во фрейм, а echo во фрейм не выводило, а вот через
echo "document.writeln('$output');\n";
все получилось нормально.

Понимаю, что фреймы лучше не использовать. Они плохо индексируются, но мне с точки зрения дизайна нужно было, чтобы вывод осуществлялся в строго ограниченную область, которую не растянуло бы по вертикали. К тому же задержка с выводом во фрейм не вызывает тормозов при загрузке всей страницы. Хотя, фрейм является у меня наследием мода Topic Anywhere, который безюожно тормозил. А частично ускорил его работу, но всё равно небольшая задержка оставалась. Мод Xperta вне всякого сомнения работает гораздо быстрее, но я считаю, что его можно улучшить. Одним из способов этого является отказ от использвания templates.php при выводе тем через скрипт на стороннем сайте. Коль можно обойтись без templates, так зачем его вызывать?

Для вывода тем на главной странице сайта я также использую мод Xperta , но делаю это не через script. Я считаю это не экономичным. Завтра помещу здесь свой вариант. Думаю Xpert оценит нововведения и перенесет их в свой мод. :)
Последний раз редактировалось Профессор 14.09.2005 8:41, всего редактировалось 1 раз.
Йыс
phpBB 1.4.0
Сообщения: 34
Стаж: 18 лет 9 месяцев

Сообщение Йыс »

Возможно, то что Вы приняли за ошибки является следствием того, что моя модификация мода написана не для простого форума, а с установленным модом Search Engines Friendly Board.
Видимо, да.

Вообще, думаю, что для данного мода достаточно приведённого выше мной кода, лишь с указанием того, как сделать вывод с определённого форума.
Потом, у вас темы выводятся при помощи:

echo '<a href="' . $viewtopic_url . '?' . POST_TOPIC_URL . '=' . $row['topic_id'] . '">';

Дело в том, что таким образом скрипт не сможет вывести ничего на экран на другом сайте.
Думаю, выводить на другой сайт, в большинстве случаев, просто нет надобности. Да и переделать обратно для вывода с помощью тега <script> крайне просто.
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 4 месяца
Откуда: Орёл

Сообщение Профессор »

Йыс писал(а):Думаю, выводить на другой сайт, в большинстве случаев, просто нет надобности.
Но ведь бывают случаи, когда какие-то сайты готовы разместить список последних тем форума.

Или несколько сайтов используют один и тот же общий форум. Но находятся они на разных доменах и у разных хостеров, а потому единую базу данных использовать не могут. Вот тут-то и оптимально использовать скрипт.

А вот выводить последние темы через скрипт на главную страницу форума или портала, на мой взгляд, слишком неэкономично, как в отношении ресурсов сервера, так и в плане скорости загрузки страницы.
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 4 месяца
Откуда: Орёл

Сообщение Профессор »

Вот мои переделки мода для загрузки на главной странице форума или на страницах портала. Как и прошлый раз отмечу, что мод переделан для работы с установленным Search Engines Friendly Board. К тому же я убрал себе автоцензор, чтобы меньше нагрузка была.

Этой строкой вызываем recent.php из index.php или с портала.
include('./forum/recent.php');
Содержание recent.php
<?php
// recent.php,v 1.0.4
global $board_config, $userdata;
$cfg_ignore_forums = '0';
$cfg_nm_topics = 10;
$cfg_max_topic_length = 50;
init_userprefs($userdata);
// Load template
$template->set_filenames(array(
'body' => 'recent_body.tpl'));
// Fetching topics of public forums
$sql = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id, t.topic_replies, p.poster_id, u.user_id, u.username, p.post_time, p.post_username
FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . FORUMS_TABLE . " AS f, " . USERS_TABLE . " AS u
WHERE t.forum_id = f.forum_id
AND f.auth_read = " . AUTH_ALL . "
AND t.forum_id NOT IN(" . $cfg_ignore_forums .")
AND p.post_id = t.topic_last_post_id
AND t.topic_moved_id = 0
AND u.user_id = p.poster_id
AND u.username = u.username
ORDER BY p.post_id DESC LIMIT $cfg_nm_topics";
if ( !$result = $db->sql_query($sql) ) {
message_die(GENERAL_ERROR, "Could not fetch recent topics information.", '', __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$topic_title = $row['topic_title'];
$topic_title = ( strlen($topic_title) > $cfg_max_topic_length ) ? substr($topic_title, 0, $cfg_max_topic_length) . '&hellip;' : $topic_title;
$time_last_topic = create_date('d M G:i', $row['post_time'], $board_config['board_timezone']);
if ( $userdata['session_logged_in'] ) {
$viewtopic_url = 'http://dozor.org/forum/viewtopic.php?' . POST_TOPIC_URL . '=' . $row['topic_id'];
$last_viewtopic_url = 'http://dozor.org/forum/viewtopic.php?' . POST_POST_URL . '=' . $row['topic_last_post_id'] . '#' . $row['topic_last_post_id'];
}
else {
$viewtopic_url = 'http://dozor.org/forum/topic' . $row['topic_id'] . '.html';
$last_viewtopic_url = 'http://dozor.org/forum/post' . $row['topic_last_post_id'] . '.html#' . $row['topic_last_post_id'];
}
if ( $row['post_username'] == '' ) {
$name = $row['username'];
}
else {
$name = $row['post_username'];
}
$template->assign_block_vars('topicrow', array(
'U_LAST_POST' => $last_viewtopic_url,
'TOPIC_REPLIES' => $row['topic_replies'],
'U_TOPIC' => $viewtopic_url,
'TOPIC_TITLE' => str_replace("'", "\'", $topic_title),
'TIME' => $time_last_topic,
'USERNAME' => $name));
}
$template->pparse('body');
?>
Содержание recent_body.tpl
<!-- BEGIN topicrow -->
<a href={topicrow.U_LAST_POST}><img src=http://dozor.org/forum/latest_reply.gif alt=Последнее></a><a href={topicrow.U_TOPIC}>{topicrow.TOPIC_TITLE}</a> Ответов-{topicrow.TOPIC_REPLIES}, {topicrow.USERNAME}, {topicrow.TIME}<br>
<!-- END topicrow -->
Работать он, естественно, будет быстрее, чем при вызове из скрипта.

Как я уже говорил выше, что Xpertу стоит делать два варианта мода. В одном случае вызов recent.php идет через script со стороннего сайта, а в другом - из самого форума или портала.
Lola

Сообщение Lola »

Сегодня скачала этот замечательный мод.
Давно уже хотелось, чтобы на гл.странице сайта были последние затронутые темы форума.
Файлы необходимые куда надо закачала...
А какой код надо на гл.страницу сайта вставлять?? Подскажите, пожалуйста.
Я пробовала тот, что

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

<?php // recent.php,v 1.0.4 
global $board_config, $userdata; 
$cfg_ignore_forums = '0'; 

И т.д.
Но, видимо, я что-то не правильно поняла, потому что пишет мне ошибку :?
Профессор
phpBB 1.4.2
Сообщения: 53
Стаж: 19 лет 4 месяца
Откуда: Орёл

Сообщение Профессор »

Lola, тот вариант, фрагмент которого Вы указали, Вам не подойдет. Он приспособлен для работы с установленным модом Search Engines Friendly Board. Это мы уже изголяемся. :)

На самой первой странице этой темы найдите ссылку на оригинал мода. Его пока и ставьте.
Lola

Сообщение Lola »

На самой первой странице этой темы найдите ссылку на оригинал мода. Его пока и ставьте.
Спасибо большое за Ваш ответ!
Только я не нашла на первой странице код, который надо вставлять на гл.страницу сайта :oops:
Если честно, я перечитала все сообщения этой темы... но... :(
Не могли бы Вы мне, недогадливой такой, дать точный код, который надо вставлять? И, может, еще что-то надо кроме этого делать???

Помогите, пожалуйста.

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