Заголовки последних сообщений на vBulletin

30/03/2006 17:26 | Рубрики: Интернет | Метки: , , , ,

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

У vBulletin, как и у любой хорошей вещи, есть свои недостатки. Я перешел на него с phpBB, для которого есть замечательная приблуда под названием topics_anywhere. Она позволяет не только показывать последние сообщения на главной (или любой другой) странице форума, но и отдает те же последние сообщения в виде RSS, а также дает возможность с помощью простого Java-скрипта демонстрировать апдейты форума вообще на любой веб-странице (кроме, естественно, ЖЖ, где вообще никакие скрипты вставлять в код страницы нельзя). Короче говоря, это совершенно необходимая вещь для любого вменяемого форума на phpBB. Когда я ее активно использовал, я даже делал русский перевод для нее. С переходом на vB я это дело бросил и, судя по сайту, никто мою инициативу не поддержал, хотя дело совершенно плевое. Так там и лежит мой старый перевод. Ну, да ладно.

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

Существует, правда, отдельная приблуда для vB, которая называется fps_external (есть две версии - для 3.0.х и для 3.5.х).

Тем не менее, fps_external, хоть и решает проблему с предоставлением RSS-фида, не дает простого способа демонстрровать последние новости на страницах самого форума. Еще со времен phpBB участники моего форума "Классика" привыкли, чтобы им на любой странице показывали 5-7 последних сообщений, размещенных на форуме. Привыкли они к этому настолько, что даже намного более продвинутаяя функция "Новые сообщения", которая есть в vB, их не устраивает. Когда я переходил на новый движок, грешним делом, думал, что удастся обойтись без кустарных примочек, но народ настаивал.

Первая мысль по этому поводу - надо использовать RSS. Но после того, как я выяснил, как именно vBulletin отдается по RSS, я понял, что это не подходит. Стал искать что-то другое. И нашел.

Во времена vB 3.x удавалось обходиться обычным php include. После перехода на vB 3.5.x это дело работать перестало, в связи с чем пришлось выдумать простенький модуль. Вообще, эта система не блещет изящностью, но зато позволяет быстро и легко развернуть монитор последних сообщений форума практически на любой странице. Рассказываю, каким образом.

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

Вариант 1. Последние сообщения на самом форуме.

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

В скачанном архиве находятся два файла: lastposts3.php (который написал не я, а некто Robin Hood, причем очень давно) и latest_posts.xml. Первый мы кладем в корневую директорию форума (туда же, где, например, лежит index.php), не забыв указать в самом его начале параметры общения с базой mysql. После этого идем в администраторскую панель и находим там пункт "Система модулей" или что-то в этом роде. Нажимаем "Сохранить/Загрузить модуль". Импортируем туда файл xml из скачанного архива. Теперь в списке установленных модулей появился модуль latest_posts. После этого мы идем в раздел "Стили и шаблоны" админской панели и можем использовать переменную $news в любом месте общего шаблона. Конкретно на форуме "Классика" это, например, сделано так:

<!-- рисуем табличку из трех колонок -->
<table border="0" width="$stylevar[outertablewidth]" cellpadding="0" cellspacing="0"align="center">
<tr>
<!-- в первой колонке у нас логотип и ссылка на чат -->
<td width="33%" align="$stylevar[left]" style="border-right-style: solid; border-right-width: 1px">
<p style="text-align: center">
<a href="$vboptions[forumhome].php$session[sessionurl_q]" mce_href="$vboptions[forumhome].php$session[sessionurl_q]"><img
src="$stylevar[titleimage]" mce_src="$stylevar[titleimage]" border="0" alt="$vboptions[bbtitle]" /></a>
<br><a href="http://forumklassika.ru/chat/" mce_href="http://forumklassika.ru/chat/"><b><font size="2">Чат</font></b></a>

</p>
</td>

<!-- во второй колонке у нас вызов рекламного баннера -->
<td width="33%" align="$stylevar[center]">

<!-- start ad class 2 --><p align="center">

<!-- здесь идет, собственно, код или что угодно, что захочется сюда вставить, либо пустое место -->

</p><!-- end ad class 2 -->

</td>
<!-- а в третьей колонке у нас, как раз-таки, и показываются новости -->

<td width="34%" align="$stylevar[right]">
$news
</td>
</tr>
</table>

Если вставить такой код в общий шаблон header, то результат будет в точности таким, как на всех страницах форума "Классика". Строго говоря, абсолютно таким же образом можно воткнуть новости в любое место на форуме - для этого надо только поменять в модуле установку "местоположение хака". По умолчанию там стоит global_start, но можно указать все, что угодно, после чего использовать в соответствсующих местах все ту же переменную $news.

Формат вывода новостей и их количество регулируется в самом файле lastposts3.php. Я не стану подробно рассказывать, что там да как - любой человек, который оказался достаточно продвинут для того, чтобы дочитать до этого места, сможет разобраться, как там все сделано. По умолчанию выводится 7 последних сообщений с именами последних ответивших и временем ответа.

Вариант 2. Отображение последних сообщений на страницах, не связанных с форумом.

Как я уже сказал, к сожалению, vBulletin не предоставляет внятных средств для экспорта своих заголовков на другие сайты. В настоящее время я также не нашел и настолько же удобного дополнения, как topics_anywhere. Но в качестве временной (гхм-гхм) меры можно использовать все тот же lastposts3.php. Например, это можно видеть в правой колонке блога, который вы сейчас читаете. Сверху - анонсы хороших концертов, а ниже - "Сейчас на форуме "Классика". Этот список тоже формирует lastposts3.php. Еще одна его копия кладется туда, куда удобно (в данном случае - в корень lifanovsky.com), после чего этот файл с отредактированными под данный конкретный случай настройками вызывается директивой include:

<?php
include(path_to_file/lastposts3.php);
?>

Думаю, что его также можно вставить в страницу и каким-нибудь другим образом, если почему-либо php не подходит. Но вот как это сделать конкретно - я уже не подскажу.

Важный момент заключается в том, что у меня форум и Lifanovsky.com располагаются на одном хостинге и даже на одном аккаунте, соответственно, обращаться к базе я могу сколько угодно. Можно ли сделать так, чтобы брались заголовки с другого хостинга наверняка я не знаю, но думаю, что если там, где расположен форум, разрешено обращаться к базе mysql с удаленного сервера - тогда все будет работать. Если же нет - тогда случай сложный, и чем тут помочь, я не знаю. Думаю, что в этом случае придется дергать более продвинутых разработчиков хаков с vBulletin.Org или же наших соотечественников с vBulletin.com.ru или с vBulletin.net.ru.

См. также


Комментариев: 10

  1. 1
    Sarit пишет:

    Hello! I don't speak Russian so I have no idea how to find your email address on this website. I was wondering if you offer this website's theme (the 3-column version) for download somewhere?

    Thanks!
    Sarit

  2. 2
    lnx пишет:

    спасибо, очень хорошо все расписано.

  3. 3
    Boris пишет:

    Не за что. :) А у Вас получилось? Нельзя ли ссылку на форум, где еще так сделано? Мне просто было бы интересно посмотреть. Если не жалко, конечно. ;)

  4. 4
    Александр пишет:

    А, у меня не вышло. :(
    Не ставится latest_posts.xml в vBulletin 3.0.1
    Выдает ошибку
    Invalid or empty style file specified

    Посмотрите, что может бить с latest_posts.xml

    Очень надо.

    Спасибо,
    Александр

  5. 5
    Meld пишет:

    большое спасяб...
    приятно видеть человека, который не жлобится...
    при интеграции возникла трабла с тем, что Вобла вещает в Win-1251, а сайт в UTF-8 выводилось не совсем то, что хотелось....
    Функция PHP «convert_cyr_string» чавой-то не предусматривает UTF-8 :(
    была нарыта функция Unicode, если у кого проблемы с UTF-8, то в lastposts3.php после
    ## CUSTOMIZE SETTINGS FOR YOUR SITE ## добавить:
    function unicode($str) {
    $encode = "";
    for ($ii=0;$ii<strlen($str);$ii++) {
    $xchr=substr($str,$ii,1);
    if (ord($xchr)>191) {
    $xchr=ord($xchr)+848;
    $xchr="&#" . $xchr . ";";
    }
    if(ord($xchr) == 168) {
    $xchr = "&#1025";
    }
    if(ord($xchr) == 184) {
    $xchr = "&#1105";
    }
    $encode=$encode . $xchr;
    }
    return $encode;
    }
    после строчки: $poster = $thread_get['lastposter'];
    Добавить: $poster = unicode($poster);
    и после: $title = substr($title,0,$txtlimit);
    Добавить: $title = unicode($title);

    2Boris
    можно это и в статью добавить...
    причем дописав про convert_cyr_string – там просто.
    если че - писАйте на почту...

  6. 6
    Boris пишет:

    Александр. На самом деле, я уже забыл. А вообще в версии 3.0.1 сама система плагинов-то уже существует? Или все-таки она появилась только в версии 3.5.
    Если так, то я плохо себе представляю, каким образом и куда Вы пытаетесь прикрутить эту xml-ку.
    Возможно, я и ошибаюсь. Но если я прав, тогда Вам надо не плагин устанавливать, а руками в админской панели, в том стиле, в котором Вы хотите показывать новости (или во всех), найти в общих шаблонах поле, в которое можно вводить код php. Я бы Вам сказал точно, но я уже не помню сейчас, как это называлось там.
    В это поле надо ввести такой код:

    ob_start();
    require("lastposts3.php");
    $news = ob_get_contents();
    ob_end_clean();

    Кажется, там даже был по умолчанию пример.
    То есть не плагин устанавливать, а просто вот такой код ввести, после чего использовать переменную $news так же, как рассказано в моем посте.
    А система модулей была как раз введена для того, чтобы облегчить этот процесс, так что на Вашем месте я бы просто проапгрейдил vB до последней версии. Если, конечно, он у Вас не нуленый. ;)
    Если совсем ничего выходить не будет - пишите еще, по идее, это все дело двух минут буквально.

    Meld, спасибо, тоже приятно слышать. На самом деле я действительно так долго возился с поисками такой штуки, что других людей жалко. :) За дополнение спасибо - добавлю обязательно!

  7. 7
    oleg пишет:

    Спасибо за инфу.
    Все заработало вроде :-)

  8. 8
    AltaHits пишет:

    Здравствуйте!
    У меня есть проблема :( Каждый день на форуме сбрасывается пароль и приходиться его востонавливать. Как решить проблему?

    ________
    С уважением, Анатолий Сергеев

  9. 9
    Борис пишет:

    Анатолий, это неверные настройки cookies, вероятнее всего.

  10. 10
    Lifanovsky.com » vBulletin и RSS пишет:

    [...] нужно было ставить отдельные приблуды, а то и вовсе пользоваться обходными путями. Сегодня vBulletin предлагает уже вполне себе вменяемые [...]

Оставить комментарий

Паевой фонд, пифы в тюмени, пифы саратова от Тройки. Сувенирная продукция трафаретная печать футболок, печать на футболки. Насколько выгодны паевые фонды. Доходность паевых фондов
Ноутбуки Acer acer 5920g 602g16mi с описанием электрический триммер, триммеры Золотые обручальные кольца из золота и платины в магазине Gold4u.
Предлагаем икси в ростове от клиники Ma-ma.ru. Трубочки для коктелей шары воздушные одноразовая посуда Рассылка по поисковому маркетингу
Лидер программ для эмуляции alcohol 120 в интернет-магазине Softkey.ru