В Черном списке
Join Date: Mar 2008
Posts: 1,324
Версия vB: 3.8.4
Reputation:
Professional 474
Репутация в разделе: 369
|
ЖЖ-Комьюнити. Делаем форум порталом.
3
Так-как поиск выдаёт множества тем без ответов, решил немного поподробнее расписать. На уникальность не претендую и автор сырцов не я. Ну что-же, поехали.
- Обычно, множество вопросов заключается в:
Можно реализовать 2-мя способами, я назову более логичный на мой взгляд. На своём сайте, я всё сделаю с помощью инклудов, есть куда стремиться совершенствованию, ну и ладно 
Так-как нам нужно не только подключить базу, но и указать другие жизненоважные функции, то считаю логичным создать файл
со следующим содержимым:
PHP Code:
<?php // ####################### SET PHP ENVIRONMENT ########################### error_reporting(E_ALL & ~E_NOTICE); // #################### DEFINE IMPORTANT CONSTANTS ####################### $curdir = getcwd(); $curdir = str_replace("\\", "/", $curdir); $forumpath = $curdir.'/forum'; // Папка с форумом $forumdir = basename($forumpath); //адрес форума require_once('./global.php'); require_once (DIR . '/includes/class_bbcode.php'); ############Парсер BB кодов################ $bbcode_parser = &new vB_BbCodeParser($vbulletin, fetch_tag_list()); GLOBAL $parser, $prefix, $db ; ?>
На этом нашь конфиг файл завершается, при использовании дополнительных функции форума вы можете редактировать его по собственному желанию.
Теперь создаём файлик index.php, в который мы будем инклудить наши мини-скрипты.
Первым делом, заинклудим в него нашь конфиг следующим образом:
PHP Code:
<?php include 'path_to_dir_with_scripts/config.php'; ?>
Затем сооружаем вывод новостей, куда-же главная без новостей 
Я не стал напрягаться по этому поводу, и взял код с ЖЖ, только теперь создаём файл news.php,
и вставляем в него:
Новости
PHP Code:
<? $forum_ids = "2"; // номер(а) раздела(ов), из которого(ых) выводятся темы. Разделять запятыми
$pagenum = htmlspecialchars(intval($_GET['page'])); $pp = htmlspecialchars(intval($_GET['perpage']));
function check_int($inpval,$retval) { if ($inpval) { $len = strlen($inpval); for($i=0; $i<$len; $i++) { if($inpval[$i] < '0' && $inpval[$i] > '9') { return $retval; exit; } } return $inpval; } else { return $retval; } }
$pagenum = check_int($pagenum,1); $pp = check_int($pp,5); if ($pp > 100) { $pp = 5; } $start_pt = ($pagenum - 1)*$pp;
$result = $vbulletin->db->query_read(" SELECT T.threadid, T.postusername, T.title as title, T.replycount, T.postuserid as userid, F.description as ftitle, P.pagetext, P.dateline, T.lastpostid, T.views FROM " . TABLE_PREFIX . "thread T LEFT JOIN " . TABLE_PREFIX . "user U ON (T.lastposter = U.username) INNER JOIN " . TABLE_PREFIX . "forum F ON (T.forumid = F.forumid) INNER JOIN " . TABLE_PREFIX . "post P on P.postid = T.firstpostid WHERE T.forumid in (".$forum_ids.") and T.visible = 1 ORDER BY T.threadid desc LIMIT ".intval($start_pt).", ".intval($pp) );
$all_news = $vbulletin->db->query_first(" SELECT COUNT(`threadid`) AS all_cnt FROM thread WHERE forumid in (".$forum_ids.") ");
require_once(DIR . '/includes/class_bbcode.php'); $bbcode_parser =& new vB_BbCodeParser($vbulletin, fetch_tag_list()); while ($row = $db->fetch_array($result)) { $obrez = false; if (strlen($row['pagetext']) > 1200) { $row['pagetext'] = substr($row['pagetext'], 0, 1000); $obrez = true; } $row['pagetext'] = $bbcode_parser->do_parse($row['pagetext'],'0','1','1','1');
echo '<strong> <font size="2">'.$row['title'].'</font> </strong><font size="-2" face="Tahoma" color="#999999">- <a href="'.$forumdir.'/member.php?u='.$row['userid'].'" id="nodecor">'.$row['postusername'].'</a> <br> '.$row['ftitle'].' <br> '.vbdate("d.m - H:i", $row['dateline']).'<br><br></font> <div align="justify">'.$row['pagetext'].''; if ($obrez) { echo'... <a href="'.$forumdir.'/showthread.php?t='.$row['threadid'].'"><font size="-2" face="Tahoma">[дальше]</div></font></a>'; } echo '
<p align="right"><font size="-2" face="Tahoma"><a href="'.$forumdir.'/newreply.php?do=newreply&noquote=1&p='.$row['lastpostid'].'"><b>комментировать</b></a> <br> <a href="'.$forumdir.'/showthread.php?goto=newpost&t='.$row['threadid'].'" id="nodecor">ответов: <strong>'.$row['replycount'].'</strong> | просмотров: <b>'.$row['views'].'</b></a></font></p><br><br>';
}
if ((($pp > 20) || ($pp < 10)) && (($pp % 10 > 1) && ($pp % 10 <5))) { $news_end = "и"; } elseif ((($pp > 20) || ($pp < 10)) && ($pp % 10 == 1)) { $news_end = "ь"; } elseif ($pp != 0) { $news_end = "ей"; }
$pageslink = ""; if ($all_news['all_cnt'] > ($start_pt + $pp)) { $pageslink = '<div align="right"><a href="index.php?page='.($pagenum + 1).'&pp='.$pp.'"><b>на '.$pp.' новост'.$news_end.' назад</div>'; if ($start_pt) { $pageslink .= (" | "); } else { $pageslink .= "</p>"; } } if ($start_pt) { if ($pageslink == "") { $pageslink = '<div align="right">'; } $pageslink .= '<a href="index.php?page='.($pagenum - 1).'&pp='.$pp.'"><b>на '.$pp.' новост'.$news_end.' вперёд</b></div>'; } echo $pageslink; ?>
Этот файл так-же инклудим в наш index.php, по этим примерам можно реализовать и остальные скрипты. Я просто выложу которые имеются у меня.
Вывод пользователей online
<?php
require_once(DIR . '/includes/functions_bigthree.php');
$datecut = TIMENOW - $vbulletin->options['cookietimeout'];
$numbervisible = 0;
$numberregistered = 0;
$numberguest = 0;
$forumusers = $db->query_read_slave("
SELECT
". $pref ."user.username, (". $pref ."user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, ". $pref ."user.usergroupid,
". $pref ."session.userid, ". $pref ."session.inforum, ". $pref ."session.lastactivity,
IF(displaygroupid=0, ". $pref ."user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid
FROM ". $pref ."session AS ". $pref ."session
LEFT JOIN ". $pref ."user AS ". $pref ."user ON(". $pref ."user.userid = ". $pref ."session.userid)
WHERE ". $pref ."session.lastactivity > $datecut
" . iif($vbulletin->options['displayloggedin'] == 1 OR $vbulletin->options['displayloggedin'] == 3, "ORDER BY username ASC") . "
");
if ($vbulletin->userinfo['userid'])
{
// fakes the user being online for an initial page view of index.php
$vbulletin->userinfo['joingroupid'] = iif($vbulletin->userinfo['displaygroupid'], $vbulletin->userinfo['displaygroupid'], $vbulletin->userinfo['usergroupid']);
$userinfos = array
(
$vbulletin->userinfo['userid'] => array
(
'userid' =>& $vbulletin->userinfo['userid'],
'username' =>& $vbulletin->userinfo['username'],
'invisible' =>& $vbulletin->userinfo['invisible'],
'inforum' => 0,
'lastactivity' => TIMENOW,
'usergroupid' =>& $vbulletin->userinfo['usergroupid'],
'displaygroupid' =>& $vbulletin->userinfo['displaygroupid'],
'infractiongroupid' =>& $vbulletin->userinfo['infractiongroupid'],
)
);
}
else
{
$userinfos = array();
}
$inforum = array();
while ($loggedin = $db->fetch_array($forumusers))
{
$userid = $loggedin['userid'];
if (!$userid)
{ // Guest
$numberguest++;
$inforum["$loggedin[inforum]"]++;
}
else if (empty($userinfos["$userid"]) OR ($userinfos["$userid"]['lastactivity'] < $loggedin['lastactivity']))
{
$userinfos["$userid"] = $loggedin;
}
}
if (!$vbulletin->userinfo['userid'] AND $numberguest == 0)
{
$numberguest++;
}
foreach ($userinfos AS $userid => $loggedin)
{
$numberregistered++;
if ($userid != $vbulletin->userinfo['userid'])
{
$inforum["$loggedin[inforum]"]++;
}
fetch_musername($loggedin);
($hook = vBulletinHook::fetch_hook('forumhome_loggedinuser')) ? eval($hook) : false;
if (fetch_online_status($loggedin))
{
$numbervisible++;
$activeusers .= ",
<a class=\"a_ser\" href=\"$forumdir/member.php?$session[sessionurl]u=$loggedin[userid]\"
rel=\"nofollow\" onclick=\"return hs.htmlExpand(this, { objectType: 'iframe', height: '900', width: '700' } )\">$loggedin[musername]</a>$loggedin[invisiblemark]";
}
}
// memory saving
unset($userinfos, $loggedin);
$activeusers = substr($activeusers, 2); // get rid of initial comma
$db->free_result($forumusers);
$totalonline = $numberregistered + $numberguest;
$numberinvisible = $numberregistered - $numbervisible;
if ($numberguest > 0)
{
if (($numberguest > 10) && ($numberguest < 20))
{
$guests = $numberguest." каких-то неизвестных";
}
elseif ((($numberguest % 10) > 1) && (($numberguest % 10) < 5))
{
$guests = $numberguest." каких-то неизвестных";
}
elseif ($numberguest == 1)
{
$guests = "какой-то подозрительный тип";
}
elseif (($numberguest % 10) == 1)
{
$guests = $numberguest." какой-то подозрительный тип";
}
elseif ((($numberguest % 10) > 4) && (($numberguest % 10) < 9) || (($numberguest % 10) == 0))
{
$guests = $numberguest." каких-то подозрительных типов";
}
}
if ($totalonline)
{
if ($activeusers)
{
echo $activeusers;
if ($numberguest)
{
echo " и еще ".$guests;
}
}
else
{
echo $guests;
}
}
else
{
echo "только души..";
}
?>
Последние сообщения
<?php
$result = $vbulletin->db->query_read("
SELECT threadid, lastposter, title, T.lastpost as lastpostdate, replycount, U.userid as userid
FROM ". $pref ."thread T
LEFT JOIN ". $pref ."user U ON (T.lastposter = U.username)
WHERE T.forumid not in (4,5,34,151)
ORDER BY T.lastpost DESC
LIMIT 10");
while ($row = $db->fetch_array($result))
{
print '<i>тема:</i> <a href="'.$forumdir.'/showthread.php?goto=newpost&t='.$row['threadid'].'">'.$row['title'].'</a> <strong>['.$row['replycount'].']</strong>';
if ($row['userid'])
{
print '<br><i>автор: </i> <a href="'.$forumdir.'/member.php?action=getinfo&userid='.$row['userid'].'">'.$row['lastposter'].'</a>';
}
else
{
print '<br><i>автор: </i> '.$row['lastposter'];
}
print '<br><i>дата: </i> '.date("d.m.y, H:i",$row['lastpostdate']).'<hr>';
}
?>
Ну и думаю, не самая вредная приблуда, скрипт вывода о загрузки сервера, запросов в БД и время генерации страницы.
Приблуда:)
<?
if ($vbulletin->userinfo['usergroupid'] == 6) {
$pageendtime = microtime();
$starttime = explode(' ', $pagestarttime);
$endtime = explode(' ', $pageendtime);
$totaltime = vb_number_format($endtime[0] - $starttime[0] + $endtime[1] - $starttime[1], 5);
$debughtml = '<center><span class="smallfont">Время генерации страницы <b>' . $totaltime . '</b> секунды с <b>' . $vbulletin->db->querycount . '</b> запросами'; }
if ($vbulletin->userinfo['usergroupid'] == 6) {
if ($loadavg = @file_get_contents("/proc/loadavg")) {
$regs = explode(" ",$loadavg);
$serverload = ' [Загрузка сервера: <b>' . $regs[0] .'</b> : ' . $regs[1] . ' : ' . $regs[2] . ']';
}elseif ($stats=@exec('uptime')) {
preg_match('/averages?: ([0-9\.]+),[\s]+([0-9\.]+),[\s]+([0-9\.]+)/',$stats,$regs);
$serverload = ' [Загрузка сервера: <b>' . $regs[1] .'</b> : ' . $regs[2] . ' : ' . $regs[3] . ']';
}elseif ($loadavg = @`sysctl vm.loadavg|cut -d" " -f3-5`) {
$regs = explode(" ",$loadavg);
$serverload = ' [Загрузка сервера: <b>' . $regs[0] .'</b> : ' . $regs[1] . ' : ' . $regs[2] . ']';
}
$debughtml .= iif($_TEMPLATEQUERIES, ' (<b>' . sizeof($_TEMPLATEQUERIES) . '</b> запрос(а) для некэшируемых шаблонов)', '') . "$serverload";
ksort($tempusagecache);
foreach ($tempusagecache AS $tempname => $times) {
if ($_TEMPLATEQUERIES["$tempname"]){
$debughtml .= '<center><span class="smallfont">Некэшируемые шаблоны: <font color="red"><b>' . $tempname . '</b></font> (' . $times . ')</span></center>';
}
}
}
$debughtml .= "</span></center>";
$load = $debughtml;
?>
<div align="center">
<?php echo $load; ?>
</div>
Теперь самое время призадуматься бы о внешнем виде, но это думаю будет не сложно. Выслушаю вопросы и доводы как лучше и как нельзя.
Last edited by maJic : 04-23-2009 at 06:44 PM.
|