|
Поделиться

Как вывести определённую тему на сайт?

Начиная с версии 3.1.x, моды были заменены "расширениями", которые выполняют ту же самую функцию, но без изменений в исходном коде движка.

Сообщение iliyabmw » 28.04.18 07:28

Здравствуйте, сразу прошу прощение если не уследил свой вопрос на форуме.
Пытался, искал, может плохо.. Перечитал 69 страниц темы о прилоэении recent topic for 3.0 - не нашел подходящего ответа.
Суть вопроса в том, что - есть сайт, есть форум phpbb 3.1.7.

Подскажите, как можно модифицировать скрипт чтоб выводил какой то определенный топик, который я укажу?
в настрйоках можно выбрать форум, но не топик
Код: Выделить всё
$cfg_ignore_forums = ''; 		// ids of forums you don't want to display, separated by commas or empty
[b]$cfg_only_forums = '3'; // ids of forums you only want to display, separated by commas or empty[/b]
$cfg_nm_topics = 1;			// number of topics to output
$cfg_max_topic_length = 120; 	// max topic length, if more, title will be shortened
$cfg_show_replies = false; 		// show number of replies to topics
$cfg_show_first_post = true;	// show first posts of the recent topics
$cfg_show_attachments = true;	// show attachments in the first posts of recent topics


То есть мне нужно вывести определенный топик с его содержимым и вложениями на мой сайт.
Подскажите пожалуйста как это реализовать?

вот сам скрипт, модифицированный(нашел инфу на этом форуме) под версию 3.1.*

Код: Выделить всё
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
/** 
*
* @package phpBB3
* @version $Id: recent.php,v 1.1.2 2007/08/21 23:21:39 rxu Exp $
* @copyright (c) 2005 phpBB Group 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
*
*/

/**
* @ignore
*/!

/* Config section */

$cfg_ignore_forums = ''; 		// ids of forums you don't want to display, separated by commas or empty
$cfg_only_forums = '3'; // ids of forums you only want to display, separated by commas or empty
$cfg_nm_topics = 1;			// number of topics to output
$cfg_max_topic_length = 120; 	// max topic length, if more, title will be shortened
$cfg_show_replies = false; 		// show number of replies to topics
$cfg_show_first_post = true;	// show first posts of the recent topics
$cfg_show_attachments = true;	// show attachments in the first posts of recent topics
/* End of config */

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);

//
// Let's prevent caching
//
$server_software = $request->server('SERVER_SOFTWARE');
if (!empty($server_software) && strstr($request->server('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('Content-type: text/html; charset=UTF-8');
header('Expires: 0');
header('Pragma: no-cache');

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('common');

//
// Building URL
//

$board_path = generate_board_url();
$viewtopic_url = $board_path . '/viewtopic.' . $phpEx;

// Fetching forums that should not be displayed
$forums = implode(',', array_keys($auth->acl_getf('!f_read', true)));
$cfg_ignore_forums = (!empty($cfg_ignore_forums) && !empty($forums)) ? $cfg_ignore_forums . ',' . $forums : ((!empty($forums)) ? $forums : ((!empty($cfg_ignore_forums)) ? $cfg_ignore_forums : ''));

// Building sql for forums that should not be displayed
$sql_ignore_forums = (!empty($cfg_ignore_forums)) ? ' AND t.forum_id NOT IN(' . $cfg_ignore_forums .') ' : '';

// Building sql for forums that should only be displayed
$sql_only_forums = (!empty($cfg_only_forums)) ? ' AND t.forum_id IN(' . $cfg_only_forums .') ' : '';

// Fetching topics of public forums
$sql = 'SELECT t.topic_id, t.forum_id, t.topic_title, t.topic_last_post_id, t.topic_first_post_id, t.topic_posts_approved, t.topic_posts_unapproved, t.topic_posts_softdeleted, p.post_id, p.post_text, p.bbcode_uid, p.bbcode_bitfield, p.post_attachment
	FROM ' . TOPICS_TABLE . ' AS t, ' . POSTS_TABLE . ' AS p, ' . FORUMS_TABLE . " AS f
	WHERE t.forum_id = f.forum_id
		$sql_ignore_forums
		$sql_only_forums 
		AND p.post_id = t.topic_first_post_id
		AND t.topic_moved_id = 0
	ORDER BY t.topic_last_post_id DESC LIMIT $cfg_nm_topics";

$result = $db->sql_query($sql);

$recent_topics = $db->sql_fetchrowset($result);

//
// BEGIN ATTACHMENT DATA
//
if($cfg_show_first_post && $cfg_show_attachments)
{
	$attach_list = $update_count = array();
	foreach ($recent_topics as $post_attachment)
	{
		if ($post_attachment['post_attachment'] && $config['allow_attachments'])
		{
			$attach_list[] = $post_attachment['post_id'];

			if ($post_attachment['post_approved'])
			{
				$has_attachments = true;
			}
		}
	}

	// Pull attachment data
	if (sizeof($attach_list))
	{
		if ($auth->acl_get('u_download') )
		{
			$sql_attach = 'SELECT *
				FROM ' . ATTACHMENTS_TABLE . '
				WHERE ' . $db->sql_in_set('post_msg_id', $attach_list) . '
					AND in_message = 0
				ORDER BY filetime DESC, post_msg_id ASC';
			$result_attach = $db->sql_query($sql_attach);

			while ($row_attach = $db->sql_fetchrow($result_attach))
			{
				$attachments[$row_attach['post_msg_id']][] = $row_attach;
			}
			$db->sql_freeresult($result_attach);
		}
		else
		{
			$display_notice = true;
		}
	}
}
//
// END ATTACHMENT DATA
//

foreach ( $recent_topics as $row )
{
	$topic_title = censor_text($row['topic_title']);
	$topic_title = (utf8_strlen($topic_title) > $cfg_max_topic_length) ? utf8_substr($topic_title, 0, $cfg_max_topic_length) . '&hellip;' : $topic_title;
	$topic_title = str_replace(array("\r\n", "\r", "\n"), '<br />', $topic_title);
	$topic_title = addslashes($topic_title);
	
	// Replies
$phpbb_content_visibility = $phpbb_container->get('content.visibility');
	$replies = $phpbb_content_visibility->get_count('topic_posts', $row, $row['forum_id']) - 1;

	// Instantiate BBCode if need be
	if ($row['bbcode_bitfield'] !== '')
	{
		$bbcode = new bbcode(base64_encode($row['bbcode_bitfield']));
	}

	$message = $row['post_text'];

	// Parse the message
	$message = censor_text($message);

	// Second parse bbcode here
	if ($row['bbcode_bitfield'])
	{
		$bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
	}

	$message = str_replace("\n", '<br />', $message);

	// Always process smilies after parsing bbcodes
	$message = smiley_text($message);
	
	// Parse attachments
	if ($cfg_show_first_post && $cfg_show_attachments && !empty($attachments[$row['post_id']]))
	{
		parse_attachments($row['forum_id'], $message, $attachments[$row['post_id']], $update_count);
	}
	
	$message = str_replace(array("\r\n", "\r", "\n"), '<br />', $message);
	$message = addslashes($message);
	$message = str_replace('./', $board_path . '/', $message);
	$tags = array('dl', 'dt', 'dd');
	$message = strip_selected_tags($message, $tags);
	
	
	$template->assign_block_vars('topicrow', array( 
		'U_TOPIC' 		=> $viewtopic_url . '?f=' . $row['forum_id'] . '&amp;t=' . $row['topic_id'] . '&amp;view=unread#unread' ,
		'TOPIC_TITLE' 	=> $topic_title , 
		'TOPIC_REPLIES'	=> ($cfg_show_replies) ? '[' . $replies . '] ' : '',
		'S_HAS_ATTACHMENTS'		=> ($cfg_show_first_post && $cfg_show_attachments && !empty($attachments[$row['post_id']])) ? true : false,
	));

	if ($cfg_show_first_post)
	{
		$template->assign_block_vars('topicrow.first_post_text', array(
			'TOPIC_FIRST_POST_TEXT' => ($cfg_show_first_post) ? '<span style="color:white">' . $message . '</span>' : ''
		));
	}

	// Display not already displayed Attachments for this post, we already parsed them. ;)
	if ($cfg_show_first_post && $cfg_show_attachments && !empty($attachments[$row['post_id']]))
	{
		foreach ($attachments[$row['post_id']] as $attachment)
		{
			$attachment = str_replace(array("\r\n", "\r", "\n"), '<br />', $attachment);
			$attachment = str_replace('"./', '"' . $board_path . '/', $attachment);
			$tags = array('span', 'dt', 'dd');
			$attachment = strip_selected_tags($attachment, $tags);

			$template->assign_block_vars('topicrow.first_post_text.attachment', array(
				'DISPLAY_ATTACHMENT'	=>  $attachment)
			);
		}
	}

}
$db->sql_freeresult($result);
		
//
// Load template
//
$template->set_filenames(array(
	'body' => 'recent_body.html')
);

//
// Output
//
$template->display('body');



/**
* Works like PHP function strip_tags, but it only removes selected tags.
* Example: * strip_selected_tags('<b>Person:</b> <strong>Larcher</strong>', 'strong') => <b>Person:</b> Larcher
* by Matthieu Larcher 
* http://ru2.php.net/manual/en/function.strip-tags.php#76045
*/
function strip_selected_tags($text, $tags = array())
{
	$args = func_get_args();
	$text = array_shift($args);
	$tags = (func_num_args() > 2) ? array_diff($args,array($text)) : (array)$tags;
	foreach ($tags as $tag)
	{
		while(preg_match('/<'.$tag.'(|\W[^>]*)>(.*)<\/'. $tag .'>/iusU', $text, $found))
		{
			$text = str_replace($found[0],$found[2],$text);
		}
	}

	return preg_replace('/(<('.join('|',$tags).')(|\W.*)\/>)/iusU', '', $text);
}


?>


Добавлено спустя 45 секунд:
вот как я сделал последнии новости на сайт http://e46fanatics.com.ua/news.html
Но тут показывает именно последнюю новость. А нужно указать именно конкретную тему чтобю в таком виде показывало
iliyabmw
 
Сообщения: 5
Зарегистрирован: 15.04.18 08:07

Сообщение Shredder » 28.04.18 11:04

Вместо AND p.post_id = t.topic_first_post_id укажите AND t.topic_id = id_нужного_вам_топика
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 989
Зарегистрирован: 22.08.13 09:05

Сообщение iliyabmw » 28.04.18 11:48

Вернуться к началу
Shredder » 40 минут назад
Вместо AND p.post_id = t.topic_first_post_id укажите AND t.topic_id = id_нужного_вам_топика

Ооооо, первое что хочу сказать - спасибо большое! Дейтсвительно, у кого не спрашивал - говорят невозможно - нужно писать отдельное расщирение..

Поменял, почти то что надо:
Название темы показывает именно id которой я указал, переходит именно у ту тему id которой я указал, всё так как хотел :)
Единственно содержимое показывает - последней темы на форуме, последнее сообщение

Добавлено спустя 7 минут 30 секунд:
Получилось, указал дополнительно просто AND t.topic_id

Код: Выделить всё
	WHERE t.forum_id = f.forum_id
		$sql_ignore_forums
		$sql_only_forums 
		AND p.post_id = t.topic_first_post_id
		AND t.topic_id = 2 
		AND t.topic_moved_id = 0
	ORDER BY t.topic_last_post_id DESC LIMIT $cfg_nm_topics";


Спасибо большое, вы не представляете что мне уже пришлось изучить :lol: Я уже и javascript аытался внедрить и ленту новостей :mrgreen:
Сейчас всё рабатоает так как мне надо :!: :!: :!: :!: :!:

Добавлено спустя 10 часов 26 минут 52 секунды:
Можете подсказать ещё по одному вопросу?
вот у меня вот так сейчас всё выводится, специально выделил чтоб было видно пробелы.


Это происходит только если в теме сообщения висят миниатюры, если полноразмерное изображение - всё окей. Но у меня на форуме везде миниатюры.
Можно как то исправить, убрать эти пробелы? Либо выводить на сайт не миниатюру а полноразмерное изображение(при этом на форуме чтоб оставались миниатюры)
В идеале конечно чтоб как на форуме отображалось по две миниатюры на строчку.


Вот как выглядит на сайте
http://e46fanatics.com.ua/iliya.html

Добавлено спустя 9 минут 42 секунды:
я так понял это надо сделать в файле recent_body.html?
Код: Выделить всё
<!-- BEGIN topicrow -->
document.writeln('{topicrow.TOPIC_REPLIES}<a href="{topicrow.U_TOPIC}">{topicrow.TOPIC_TITLE}</a><br />\n');
	<!-- BEGIN first_post_text -->
	document.writeln('{topicrow.first_post_text.TOPIC_FIRST_POST_TEXT}<br />\n');
		<!-- BEGIN attachment -->
		document.writeln('{topicrow.first_post_text.attachment.DISPLAY_ATTACHMENT}<br />\n');
		<!-- END attachment -->
	document.writeln('<br />\n');
	<!-- END first_post_text -->
<!-- END topicrow -->



Добавлено спустя 8 часов 28 минут 8 секунд:
Пробовал вчера в файле recent_body.html убирать <br/> и ставить document.write вместо writeln - без результатов :(

Добавлено спустя 1 минуту 2 секунды:
Можно сделать как то чтоб скрипт брал прямые url картинки а не миниатюры?

Добавлено спустя 1 час 37 минут 37 секунд:
скрипт кучу br добавляет..
iliyabmw
 
Сообщения: 5
Зарегистрирован: 15.04.18 08:07

Сообщение Shredder » 29.04.18 09:05

Скорее всего, надо дописывать функцию strip_selected_tags(, чтобы она умела вырезать теги br.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 989
Зарегистрирован: 22.08.13 09:05

Сообщение iliyabmw » 29.04.18 12:37

Разобрался, удалил br отсюда
Код: Выделить всё
	// Parse attachments
	if ($cfg_show_first_post && $cfg_show_attachments && !empty($attachments[$row['post_id']]))
	{
		parse_attachments($row['forum_id'], $message, $attachments[$row['post_id']], $update_count);
	}
	
	$message = str_replace(array("\r\n", "\r", "\n"), '', $message);
	$message = addslashes($message);
	$message = str_replace('./', $board_path . '/', $message);
	$tags = array('dl', 'dt', 'dd');
	$message = strip_selected_tags($message, $tags);

Проблема в том что скрипт определяет картинки как URL и всёровно каждую с новой строки выводит :(
Пробовал играться с стилями dasplay: inline / inline-block / block , указывал ширину блока - без изменений, дело в скрипте ?
сейчас выводится вот так


А надо чтоб в строку, а не переносило каждое вложение(ссылку) на следующую строку
iliyabmw
 
Сообщения: 5
Зарегистрирован: 15.04.18 08:07

Сообщение Shredder » 29.04.18 17:49

У вас в коде стоит <div class="inline-attachment">. div - это блочный элемент, он всегда будет с новой строки. Чтобы сделать его инлайновым, надо либо заменить div на span, либо к div добавить свойство display: inline-block;
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Shredder
Администратор
 
Сообщения: 989
Зарегистрирован: 22.08.13 09:05

Сообщение iliyabmw » 29.04.18 21:04

Shredder писал(а):У вас в коде стоит <div class="inline-attachment">. div - это блочный элемент, он всегда будет с новой строки. Чтобы сделать его инлайновым, надо либо заменить div на span, либо к div добавить свойство display: inline-block;

Спасибо большое за наводку, поискал хорошо и нашел где поменять, Прикол в том что для inline-attachment ставил inline и inline-block - не работало...
В файле bbcode.html - заменил div на span и всё получилось 8-)
iliyabmw
 
Сообщения: 5
Зарегистрирован: 15.04.18 08:07


Вернуться в Скрипты и расширения для phpBB

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron