Реклама

Настроить

ru_vbsupport

Маленькие секреты домохозяйки. Делаем форум порталом. Ч. 2. Кто на сайте.

Июн. 7, 2007 | 10:37 am
posted by: [info]besfamilny in [info]ru_vbsupport

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

Если, опять же, брать за эталон совершенства сайт www.vBsupport.org, то там вывод гостей реализуется следующим образом:

require_once(DIR . '/includes/functions_bigthree.php');
    $datecut = TIMENOW - $vbulletin->options['cookietimeout'];
    $numbervisible = 0;
    $numberregistered = 0;
    $numberguest = 0;
    $forumusers = $db->query_read_slave("
        SELECT
            user.username, (user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, user.usergroupid,
            session.userid, session.inforum, session.lastactivity,
            IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid
        FROM " . TABLE_PREFIX . "session AS session
        LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
        WHERE 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 href=\"$forumdir/member.php?$session[sessionurl]u=$loggedin[userid]\" rel=\"nofollow\"  id=\"nodecor\">$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 "одни тараканы..";
    }

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

Делается это сообразно прописанному уравнению:

    $guests = $numberguest." каких-то темных личностей"; - основная фраза множественного числа
    }
    elseif ((($numberguest % 10) > 1) && (($numberguest % 10) < 5))
    {
        $guests = $numberguest." каких-то темных личности";
- для количества больше одного, но меньше пяти человек
    }
     elseif ($numberguest == 1)
    {
        $guests = "какая-то темная личность";
- один человек
    }
     elseif (($numberguest % 10) == 1)
    {
        $guests = $numberguest." какая-то темная личность";
- несколько десятков и один человек (скажем, 21)
    }
    elseif ((($numberguest % 10) > 4) && (($numberguest % 10) < 9) || (($numberguest % 10) == 0))
    {
        $guests = $numberguest." каких-то темных личностей";
- пять и более, но меньше десяти человек

Сохраняем, запускаем, смотрим. Если всё правильно, код должен вывести на страницу все никнеймы тех зарегистрированных посетителей (кроме тех, кто скрыт), что находятся на форуме в данный момент, а также общее количество незарегистрированных.

Урок №3 будет посвящен выводу на главную страницу активных тем форума.

ссылка | Оставить комментарий [3] | в избранное | рассказать другу

ru_vbsupport

vB-шкурки

Май. 29, 2007 | 05:21 pm
posted by: [info]besfamilny in [info]ru_vbsupport

От генерального спонсора нашей трансляции - сайта RapidLinks.ru

CКИНЫ для VBULLETIN 3.6.X.

     Style - Gardena - 3.6.4
     Style - Postcard - 3.6.4
     Style - 3.6.X Anti-Freeze
     Style - Reboot - 3.6.0
     Style - Black smart - 3.6.6, 3.6.7
     Style - Love - 3.6.4
     Style - Tech-skin - 3.6.5
     Style - Butterflies - 3.6.0
     Style - Cars - 3.6.4
     [3.6.3] Faddah Style Fluid
     Style - Futuresque - 3.6.7
     Style - Dark Clean - 3.6.1
     Style - GreenShield - 3.6.5
     Style - Styles Green - VSPro - 3.6.4
     Style - Blacknight - 3.6.5
     Style - Brownish - 3.6.5
     Style - bo20 - 3.6.7
     Style - Steel Blue 3.6.x
     Style - BlackIce - 3.6.4
     Style - dark_vb - 3.6.4
     Style - Darkness - 3.6.7
     Style - Kirsch - 3.6.0, 3.6.3, 3.6.4
     Style - Black and Blue - 3.6.4
     Style - The Fallen Paladin's Castle - 3.6.4
     Black & Red Style - 3.6.4
     Style - Blaze - 3.6.4
     Style - Bleed My Lungs - 3.6.4
     Style - Orange Blue - 3.6.4
     Style - Tulip - 3.6.4
     Style -Bad Company, EA/DICE Battlefield Game
     Chestnut Style - 3.6.4

Фух... Всё!

ссылка | Оставить комментарий | в избранное | рассказать другу

ru_vbsupport

Маленькие секреты домохозяйки. Делаем форум порталом. Ч. 1. Новости.

Май. 24, 2007 | 09:51 am
posted by: [info]besfamilny in [info]ru_vbsupport

Этой мисакой мы начинаем цикл публикаций о том, как при помощи заранее установленного форума системы vBulletin, ловкости рук и никакого мошенничества, обзавестись собственным сайтом, управляемым посредством ковыряния туды-сюды тех или иных разделов форума и тем.
Хочу подчеркнуть - помимо установки самого форума вам не придется больше ставить ничего - ни порталы, ни CMS, ни прочую белиберду. Только вобла, HTML, немножко РНР и пара ударов в бубен.

Начнем с самого первого и самого главного.
Лицо любого сайта - это его новостная колонка. До недавних времен считалось, что, даже не будучи в сильном желании обзаводиться мамбой (джумлой) или каким-нибудь другим сабдримером, вы все равно будете вынуждены юзать манликс, кьют или какой-нибудь другой, довольно простой, но именно что другой аналог, который - да - будет выводить на главную написанные вами новости, но не проинтегрирует их с форумом. Иными словами, камменты к ньюсам отдельно от прочего. Две базы, две возможности у юзера быть забаненным, два геморроя вам вместо одного. Альтернатива - джумла.
Так было вчера. Но так больше не будет сегодня, ибо сегодня камменты к новостям и форум неразлучны, словно Карл и Маркс.
Итак, о том, как же добиться подобного самому, в домашних условиях:

Пункт 1. Создаем стартовую страницу.

Тут все просто. Проявляете заложенные в вас навыки дизайнера-верстальщика, в HTML создаете ваш индекс, где отводите место под новости. Заливаете индекс на ФТП, не забыв обозвать его именно как index.php, а не index.html. Надеюсь, нет нужды объяснять, почему.

Пункт 2. Подключаем Базу Данных.
И тут останавливаться надолго не будем. По умолчанию вы уже должны уметь это делать, иначе дальнейшее прочтение теряет всякий смысл. Итак, вы умеете подключать БД и вы это сделали.

Пункт 3. Самое интересное.

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

Заголовок темы - автор - дата - количество комментариев

Ну или:

- Вася Пупкин опять сделал это!!! - Neo - 24.05.07 - 12 комментариев

Где-то так.
Скрипт, порождающий полученный продукт, настроен таким образом, что выводит некие компоненты - дату, автора и прочее. Это понятно и ежу.
А теперь давайте представим себе, что тема форума - это и есть новость. Тогда заголовок темы станет названием новости, ник последнего написавшего мы меняем на ник автора темы (новости), дату последнего комментария - на дату создания темы (новости). С количеством комментариев не делаем ничего. Затем делаем так, чтобы, вслед за заголовком, выводился и текст первого сообщения темы - получаем текст новости, и меняем сортировку - с даты последнего комментария на дату создания темы. Получаем код, который выведет на главную N последних тем - прообраз новостного скрипта.
Теперь проводим подготовку на самом форуме. Создаем на нем раздел, где запрещаем создание тем всем посетителям, кроме определенной группы (групп), условно назовем которую ньюсмейкерами. Надеюсь, вы, помимо HTML и подключения БД, уже освоили админпанель форума и сумеете разобраться с правами, поэтому на данном пункте время терять не будем.
Итак, мы получили свободный для прочтения и комментирования, но закрытый рядовому посетителю для создания тем раздел, судьбой которого - стать накопителем новостей. Его ID вам известен, для примера договоримся, что он - 2.
Теперь мы вновь садимся за HTML и рисуем шаблон вашей новости, расставляя по местам заголовок, дату, автора, комментарии и прочее. И, как только все это сделано, приступаем к главной части нашего Марлезонского балета - выводу куда надо всего того, что нам нужно, так, чтобы все это было, как решено.

Пункт 4. Самое-пресамое интересное.
Чтобы долго не бегать белкой по дубу, взял за пример скрипт вывода новостей с сайта vBsupport.org, дочерней фирмой которого мы являемся.
Он выглядит так:


$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>
&nbsp;&nbsp;&nbsp;&nbsp;'.$row['ftitle'].' <br>
&nbsp;&nbsp;&nbsp;&nbsp;'.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 .= ("&nbsp;|&nbsp;");
 }
 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;


Где:

- строка

$obrez = false;
 if (strlen($row['pagetext']) &gt; 1200)
 {
  $row['pagetext'] = substr($row['pagetext'], 0, 1000);
  $obrez = true;

обрезает вашу статью до 1000 знаков, заменяя остальные активной ссылкой внутрь темы, выглядящей как "[дальше...]", но не обрезает ее, если количество знаков не превышает 1200.

- расшифровка символов такова:
'.$row['title'].' - Заголовок темы, он же - название статьи
'.$row['postusername'].' - автор темы/статьи
'.$row['ftitle'].' - описание новостного раздела, в том случае, если вы планируете их несколько
'.vbdate("d.m - H:i", $row['dateline']).' - дата создания темы/написания статьи
'.$row['pagetext'].' - сама статья

Если вас устраивает вид новости, используемый на vBsupport, можете не заморачиваться с расстановкой этих параметров, а просто скопировать код себе на страницу. Если вы делали все правильно, скрипт заработает.

Пункт 5. Послесловие.
Как видите, я не стал заморачивать вас с функцией ротатора или, называя по другому, листинга страниц с новостями. Это долго, да и не нужно - ничего, кроме другого велосипеда, вы здесь не изобретете. Ротатор работает, листает по 5 новостей на страницу. Если вам надо меньше или больше, поколдуйте со строкой

$pagenum = check_int($pagenum,1);
$pp = check_int($pp,5);
if ($pp &gt; 100)
{
 $pp = 5;
}
$start_pt = ($pagenum - 1)*$pp; 


где наиболее интересна для вас, как несложно догадаться, цифра 5.

В принципе, этот скрипт и этот метод не претендует на звание высшей инстанции. Это всего лишь еще один способ сделать вашу админскую жизнь немного проще и удобнее, они ничем не лучше и не хуже прочих, он всего лишь альтернативен им. Ваше дело, пользоваться таким способом или нет.
Скажу лишь, что vBsupport им пользуется уже долгое время и за все это время способ не вызвал практически никаких нареканий.
Наверное, это и называется репутацией....
Впрочем, о репутации мы с вами еще поговорим.

Успехов и до новых встреч!

ссылка | Оставить комментарий [19] | в избранное | рассказать другу

ru_vbsupport

vBulletin 3.6.7-3.6.7 PL - NULL vBSupport.org Fixed

Май. 22, 2007 | 01:30 pm
posted by: [info]besfamilny in [info]ru_vbsupport

Полностью нулёная версия. Всё чистенько. Всключает в себя патч 3.6.7-3.6.7 PL (XSS атака).

RapidShare
FileFactory
DepositFiles

Если ссылка сдохла, сообщите мне об этом в комментариях - перелью.
Кстати - хотите знать, куда вообще можно залить файл без необходимости что-то приобретать? Пожалте подкатушки )

ссылка | Оставить комментарий | в избранное | рассказать другу

Реклама

Настроить