Главная страница для форума на SMF

Комментировать К комментариям

При работе с различными форумами возникает необходимость создания главной страницы, на которую выводились бы последние темы, последние объявления, случайные фотографии, статистика и другие данные с форума.
В этой небольшой статье я публикую законченные куски кода для вывода различной информации с бесплатного и поэтому весьма распространенного, форумного движка Simple Machines Forum (SMF).

Получение доступа к функциям SMF

Файл ssi.php находящийся в пакете установки форума SMF, содержит некоторые функции, которые позволяют получить доступ к различным данным форума SMF. Поэтому подключив его к Вашему скрипту, Вы получите необходимые возможности. Простые примеры использования функций ssi.php множно посмотреть запустив пример — ssi_examples.php находящийся в одном с ним каталоге.

1
< ?php require_once("PATH_TO_HOME_DIR/smf/SSI.php"); ?>

Вывод приглашения авторизации/приветственного сообщения

1
2
3
4
5
6
7
8
9
<ul id="topmenu">
<?php
if ($context['user']['is_guest'])
	echo '<li>Пожалуйста, <a href="http://cqnovgorod.ru/smf/index.php?action=login">войдите</a> или <a href="http://cqnovgorod.ru/smf/index.php?action=register">зарегистрируйтесь</a>. Не получили <a href="http://cqnovgorod.ru/smf/index.php?action=activate">код активации</a>?</li>';
else {
	echo '<li>', $txt['hello_member'], ' <a href="', $scripturl, '?action=profile"><strong>', $context['user']['name'], '</strong></a>', allowedTo('pm_read') ? ', ' . $txt['msg_alert_you_have'] . ' <a href="' . $scripturl . '?action=pm">' . $context['user']['messages'] . ' ' . ($context['user']['messages'] == '1' ? $txt['message_lowercase'] : $txt['msg_alert_messages']) . '</a>' . $txt['newmessages4'] . ' ' . $context['user']['unread_messages'] . ' ' . ($context['user']['unread_messages'] == '1' ? $txt['newmessages0'] : $txt['newmessages1']) : '', '.</li>';
	echo '<li>', ssi_logout('','array'), '</li>'; }
?><li><a href="/smf/index.php?action=forum"><b>Форум</b></a></li>
</ul>

Вывод последнего опроса

Так как стандарная функция ssi.php выводит опрос по заданному идентификатору темы, то для получения идентификатора последней темы с опросом служит функция forum_getPollid() возвращающая этот идентификатор.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// Получаем идентификатор последнего опроса
function forum_getPollid() {
	global $db_prefix, $smcFunc;
	$request = $smcFunc['db_query']('', '
                SELECT t.ID_TOPIC
		FROM {db_prefix}topics AS t 
		WHERE t.ID_POLL != 0 ORDER BY t.id_last_msg DESC LIMIT 1',
		array (
		)
	);
	$row = $smcFunc['db_fetch_assoc']($request);
	$smcFunc['db_free_result']($request);
	return $row['ID_TOPIC'];
} ?>										
<h3>Опрос</h3>
<?php ssi_showPoll(forum_getPollid()); ?>

Вывод списка последних тем

Данный список можно использовать как для публикации новостей, так и для вывода последних предложений с доски объявлений форума.

1
2
3
4
5
6
7
8
9
10
11
<h3>Барахолка</h3>
<ul>
<?php
	// function ssi_boardNews($board = null, $limit = null, $start = null, $length = null, $output_method = 'echo')
	$news = ssi_boardNews(29, 5, null, 50, 'array');
	foreach ($news as $topic) {
	echo '	
	<li><span class="postauthor">', $topic['poster']['link'],'</span> <span class="postdate">', $topic['time'], '</span><br /><a href="', $topic['href'], '" class="posttitle">', $topic['subject'], '</a><br/>', $topic['body'],' ', $topic['link'],'</td></li>'; }
	unset($news);	
?>
</ul>

Вывод строки поиска

1
2
3
4
5
6
<?php 
echo '
<form action="', $scripturl, '?action=search2" method="post" accept-charset="', $context['character_set'], '">
<input type="hidden" name="advanced" value="0" /><input type="text" name="search" size="18" class="input_text" /> <input type="submit" name="submit" value="', $txt['search'], '" class="button_submit" />
</form>';
?>

Вывод случайной новости

1
<?php if ($context[random_news_line]) echo $context[random_news_line]; ?>

Вывод последней активной темы\последнего сообщения

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<h3>Последние сообщения</h3>
<ul>
<?php 
	// function ssi_recentTopics($num_recent = 8, $exclude_boards = null, $include_boards = null, $output_method = 'echo')
	$topics = ssi_recentTopics(15, 29, null, 'array'); 
	foreach ($topics as $topic) {
	echo '	
	<li><a href="', $topic['href'], '" class="posttitle">', $topic['subject'], '</a><br/>', $topic['preview'],'<br /><span class="postdate">', $topic['time'], '</span> <span class="postauthor">', $txt['by'], ' ', $topic['poster']['link'],'</span></td></li>'; }
	/*
	<a href="', $topic['board']['href'], '">', $topic['board']['name'], '</a>
	', $topic['time'], ' ', $txt['by'], ' ', $topic['poster']['link'],'
	*/
	unset($topics);
?>
</ul>

Вывод списка пользователей онлайн

Каждой группе пользователей отображаемой в списке можно определить свой стиль тега A, описав его в таблице стилей через класс grХ, где Х — id группы пользомателя.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<h4>На сайте</h4>
<?php 
	writeLog();
	$stats = ssi_whosOnline('array');
	echo '
			<ul class="ulist">
				<li>', sp_embed_image('dot'), ' ', $txt['guests'], ': ', $stats['guests'], ',', sp_embed_image('dot'), ' ', $txt['users'], ': ', $stats['num_users'], '</li>';
	if (!empty($stats['users']))
	{
	echo '
				<li>', sp_embed_image('dot'), ' ', allowedTo('who_view') && !empty($modSettings['who_enabled']) ? '<a href="' . $scripturl . '?action=who">' : '', 'Пользователей онлайн', allowedTo('who_view') && !empty($modSettings['who_enabled']) ? '</a>' : '', ': ';
	foreach ($stats['users'] as $user)
		$user['id'] ? $online.= '<a href=' .$user['href']. ' class="user gr'.$user['group'].'">' . $user['name'] . '</a>, ':'';
	$online = substr($online,0,-2);						
	echo $online, 
	      '.</li>
			</ul>';
	}
	else
	{
	echo '
		</ul><br />
		<div class="sp_fullwidth sp_center">', $txt['error_sp_no_online'], '</div>';
	}
	unset($stats);
?>

Вывод статистики сайта

1
2
3
4
5
6
<h4>Статистика</h4>	
<?php 
	$boardstats = ssi_boardStats('array');
	echo 'На форуме <a href="', $scripturl , '?action=mlist">', $boardstats['members'], ' пользователей</a> оставили ', $boardstats['posts'], ' сообщений в ', $boardstats['topics'], ' темах.';
	unset($boardstats);
?>

Вывод случайных фото MGallery

Фотографии берутся из галереи SMF Media Gallery, поэтому для работы функции необходима ее установка.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
function forum_getGallery($parameters)
{
	global $sourcedir, $txt, $settings, $boardurl, $galurl;
	static $mod, $GD_Installed;
 
	$limit = empty($parameters['limit']) ? 1 : (int) $parameters['limit'];
	$type = empty($parameters['type']) ? 0 : 1;
	$direction = empty($parameters['direction']) ? 0 : 1;
 
	require_once($sourcedir . '/Subs-MGallery.php');
 
	loadMGal_Settings();
	loadLanguage('MGallery', sp_languageSelect('MGallery'));
 
	$items = getMediaItems(0, $limit, $type ? 'RAND()' : 'm.id_media DESC');
 
	if (empty($items))
	{
		echo $txt['error_sp_no_pictures_found'];
		return;
	}
 
	echo '<table class="randphoto" width="100%">', $direction ? '
					<tr>' : '';
 
	foreach ($items as $item)
	{
	   echo !$direction ? '
					<tr>' : '', '
						<td width="50%">
							<div class="photoblock">';
		echo '
								<a href="', $galurl, 'sa=item;id=', $item['id'], '"><img src="', $galurl, 'sa=media;id=', $item['id'], ';thumb" alt="" /></a><br />
								<a href="', $galurl, 'sa=item;id=', $item['id'], '">', $item['title'], '</a><!-- <br />
								', $txt['mgallery_posted_by'], ': <a href="', $scripturl, '?action=profile;u=', $item['poster_id'], '">', $item['poster_name'], '</a><br />
								', $txt['mgallery_in_album'], ': <a href="', $galurl, 'sa=album;id=', $item['id_album'], '">', $item['album_name'], '</a> -->';
		echo '
							</div>
						</td>', !$direction ? '
					</tr>' : '';
	}
 
	echo $direction ? '
					</tr>' : '', '
				</table>';
	unset($items);
}
?>
 
<h3>Случайное фото</h3>
<?php	forum_getGallery(array('limit' => 2, 'type' => 1, 'direction' => 1)); ?>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*
CAPTCHA

*