Интеграция SMF

Автор devICE, 27 декабря 2006, 11:04:51

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

devICE

Совсем недавно я задумал интегрировать SMF в свою CMS. Благодаря помощи и поддержке администраторов этого ресурса мне это удалось, в дальнейшем я займусь более глубокой интеграцией этого замечательного форума в сторонние CMS. А пока я хочу поделиться полученным опытом с вами, уважаемые пользователи.
Итак приступим.
Первое и самое важное в верху своего скрипта обязательно вставьте следующую строчку:

require_once($path_to_forum_folder.'forum/SSI.php");

Без этой строчки у вас просто ничего не выйдет.
Разберёмся что нам нужно.

1. Форма авторизации. Чтобы перенести форму авторизации с SMF и расположить её элементы именно так как нужно, пишем следующий код.

$data=ssi_welcome($output_method='array');
if ($data["is_guest"]!=1)
{
$_SESSION["logout_url"]="http://localhost/devCMS/";
$welcome="<b>".$data["username"]."</b> у вас <a href=\"".$scripturl."?action=pm\">".$data["messages"]." сообщений</a>, ".$data["unread_messages"]." новых. <a href=\"".$scripturl."?action=logout;sesc=".$sc."\">Выйти</a>";
} else {
$_SESSION["login_url"]="http://localhost/devCMS/";
$welcome="<form action=\"".$scripturl."?action=login2\" method=post accept-charset=\"".$context["character_set"]."\">
Авторизация:
&nbsp;<input type=text id=user name=user size=9 />
&nbsp;<input type=password name=passwrd id=passwrd size=9 />
&nbsp;<input type=\"hidden\" name=\"cookielength\" size=4 maxlength=4 value=\"60\" />
<input type=submit value=\"Войти\" />
<a href=\"".$scripturl."?action=register\">Регистрация</a>
</form>";
}


Разберёмся с кодом.
Первая и вторая строки это объявление глобальных переменных и получение массива элементов функции ssi_welcome(). Дальше уже проверка кто зашёл: гость или авторизованный пользователь. Если зашёл гость, то выводится форма авторизации, если пользователь - приветствие с указанием количества сообщений в личном ящике. Переменные $_SESSION[] отвечают за редирект, т.е. куда уйдёт скрипт после login/logout.

2. Топ сообщений с форума.
Здесь тоже впринципе ничего сложного, если посидеть и разобраться :)
Итак код:

$bb=array();
$what=ssi_recentTopics($num_recent='10',$bb,$output_method='array');
$data=ssi_topTopicsViews($num_topics='10',$output_method='array');
$recent="<table align=center width=550 border=0 cellspacing=1 cellpadding=1>
<tr><td colspan=4 align=center bgcolor=#ffffff>Последние 10 сообщений на форуме</td></tr>
<tr>
<td align=center bgcolor=#ffffff>Тема</td>
<td align=center bgcolor=#ffffff width=150>Автор</td>
<td align=center bgcolor=#ffffff width=85>Ответов</td>
<td align=center bgcolor=#ffffff width=85>Просмторов</td>
</tr>";
foreach($what as $w)
{
if(count($w["subject"])>30)
{
$topic=substr($w["subject"],0,30)."...";
} else {
$topic=$w["subject"];
}
$recent.="<tr>
<td align=left>&nbsp;<a href=\"".$w["href"]."\">".$topic."</a></td>
<td align=center width=150><b>".$w["poster"]["link"]."</b></td>";
foreach($data as $key=>$value)
{
if($data[$key]["subject"]==$w["subject"])
{
$recent.="<td align=center width=85>".$data[$key]["num_replies"]."</td>
<td align=center width=85>".$data[$key]["num_views"]."</td>";
}
}
$recent.="</tr>";
}
$recent.="</table>";


Если вы внимательно присмотритесь к этому коду, то поймёте что ничего сложного тут нет. А выводит он табличку с указанием темы, автора и количества просмотров/ответов.

3. Статистика кто онлайн.
Не будем тянуть кота за.... за хвост и переходим сразу к коду.

$data=ssi_logOnline($output_method='array');
$users="<div align=left>Пользователи online</div>
<div align=left>Всего: ".$data["total_users"]."</div>
<div align=left>Гостей: ".$data["guests"]."</div>
<div align=left>Пользователей: ".$data["num_users"]."</div>";
if (!empty($data["users"]))
{
$users.="
<hr>
";
foreach($data["users"] as $key=>$value)
{
$users.="<div class=\"small_txt\" align=left><li><a href=\"".$data["users"][$key]["href"]."\">".$data["users"][$key]["username"]."</a></li></div>";
}
}


Данный код выведет табличку пользователей в онлайне. Подобный пример можно увидеть в правом столбце этого сайта. :)

4. Прочая статистика.
Здесь я пока реализовал только количество тем, топиков, разделов и пр. Потом может и более мощную статистику разведаю.

$data=ssi_boardStats($output_method='array');
$stats="<div align=left>Всего пользователей: ".$data["members"]."</div>
<div align=left>Всего сообщений: ".$data["posts"]."</div>
<div align=left>Всего тем: ".$data["topics"]."</div>
<div align=left>Всего категорий: ".$data["categories"]."</div>
<div align=left>Всего разделов: ".$data["boards"]."</div>
";


Код наудивление прост и разобраться в нём не составит труда.

На данный момент пока всё, по мере накопления опыта я буду обновлять эту статью. Если что-то непонятно, то пишите в ПМ или стучите в асю.
Проблемы только в голове.