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

 

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

У 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.

 

См. также:

  1. vBulletin и RSS
  2. VB и Skype
  3. Форум «Классика» в ЖЖ
  4. vBulletin 3.6: новые функции
  5. Added value
  6. Форум «Классика», vBulletin и блоги
  7. Хорошие и не очень хорошие новости
  8. Тот, кто делает vBulletin
  9. vBulletin 3.7.0: что нового?
  10. Что нового в vBulletin 3.8.0

About Boris

http://www.lifanovsky.com/cv/
This entry was posted in Интернет and tagged , , , , . Bookmark the permalink.

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

  1. ravadir says:

    Спасибо, попробую на досуге. Кстати с phpbb на vb не переезжал, а вот опыт переезда на Simple Machines Forum был и он мне понравился едва ли не больше чем все форумы, которые я видел. Рекомендую.

  2. FreeDreamer says:

    А что делать, если при инклуде lastposts3.php русские буквы не воспринимаются? На сайте кодировка 1251

  3. Борис says:

    Не знаю. Там тоже 1251. Не воспринимаются — это как?

  4. FreeDreamer says:

    Закарючки выводятся, а английские выводятся нормально, уже как выше писали и в unicode конвертировал и тд, всеравно.

  5. Ituanews says:

    У кого взяли пост?

  6. Борис says:

    Сам написал, а что?

  7. FaridaAnguAlieva says:

    Доброго времени суток!
    Спасибо, очень помогло!
    Хороший форум, буду читать дальше, надеюсь подскажите что не так делаю. Буду держать в курсе читателей.
    Кстати, а наверно можно же тут дать рекламу? Подскажите, есть у вас на сайте раздел где почитать про рекламу?

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

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

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>