Webamator Blog

Выводим форумные сообщения в сайдбаре
MENU
Home » wordpress » Выводим форумные сообщения в сайдбаре

Выводим форумные сообщения в сайдбаре

Данный пост навеян казалось бы простым вопросом на одном из форумов – из какого форумного движка проще всего вывести последние сообщения в блог на вордпрессе. Один из ответов предлагал решение на базе phpBB и AutoMOD – и даже давал ссылку на хабр где это было описано – мол очень удобно и не нужно ковыряться в файлах… Но если задача состоит лишь в том чтобы вывести последние форумные сообщения, то на мой взгляд есть и более удачные решения, одно из которых я и хочу предложить

Сначала о том, чем мне не понравилось то решение что выложено на хабре. Во-первых, и WP-UNITED, и AutoMOD изменяют файлы форумного движка – т.е. при обновлении форума интеграция перестанет работать. Во-вторых, это привязка к phpBB – а что делать если мне нравится другой движок, например SMF?

Я предлагаю более универсальное решение, которое позволит не зависить ни от версии форума, ни от типа форумного движка, ни даже от домена на котором находится форум. Всего три буквы и вы поймете о чем я :) RSS – любой современный форум умеет отдавать контент в виде RSS, почему бы нам не воспользоваться этим?
Вот простой пример, думаю что из комментарием все понятно:

$url = 'http://форум.ком/index.php?action=.xml;type=rss;limit=4';       //адрес RSS ленты
// в примере указан адрес фида для движка SMF, уточните какой у вашего форума
$rss = simplexml_load_file($rssurl);//Интерпретируем XML-файл в объект

foreach ($rss->channel->item as $item) {
$item->link = str_replace('&','&',$item->link);// это чтоб было валидно
//но если ваша фамилия лебедев и вам пофик на валидацию, данную строку можно убрать
$out ='<p><b><a href="';
$out .= $item->link;
$out .= '" target="_blank">';
$out .= $item->title;
$out .= '</a></b></p>';
$out .= '<p>'; 

        $item->description  = strip_tags($item->description);//убираем теги 

        $words = split(" ", $item->description);
        if ( count($words)>18 ) $item->description = join(" ", array_slice($words, 0, 18));
        //оставляю 18 слов - можно обрезать по кол-ву символов но имхо по словам красивее 

$out .= $item->description;
$out .= '[...]</p><br />'; 

//echo iconv("UTF-8", "CP1251//IGNORE", $out);//код подходит для любого движка
// в зависимости от кодировки оставьте или разремируйте
echo $out; 

} 

Данный пример будет выводить сообщения из абсолютно любого форума, который умеет отдавать RSS – т.е. практически любой современный форум. Тем не менее обратите внимание – в примере используется SMF, а у него кол-во выводимых сообщений можно указать get-ом прямо в адресе RSS-фида (обратите внимание на limit=4). Не все форумы так умеют, и если вы работаете именно с таким, то просто прервите цикл после нужного кол-ва сообщений.

как это работает в действии, можете посмотреть прямо на этом блоге в сайдбаре – выводятся последних 4 раздела с нулледа

И еще – поскольку совершенству нет предела, то данный пример лучше рассматривать в качестве конструктора, на основе которого можно сделать что-то свое. Например многие “сеошники” наверняка захотят позакрывать ссылки в nofollow (это если форум на другом домене), а кто-то просто захочет улучшить или модернизировать – например прикрутить кеширование чтоб каждый раз не дергать форум… Дерзайте, а по поводу кеширования даю подсказку – наберите в гугле ob_start()

p.s.
интересно, нужен ли кому-нить готовый плагин или данного решения достаточно?

Popularity: 100%

Добавлено 19 июня 2011
Рубрика: wordpress, Сайтостроителю
Метки: ,

Если данный пост показался вам полезным или интересным, нажмите на одну из кнопок ниже - от vkontakte, facebook, tweeter или google+, чтобы о нем узнали ваши друзья. Спасибо!

Также рекомендую публикации, похожие на "Выводим форумные сообщения в сайдбаре"

Защита PHP скриптов, вызываемых AJAX

К написанию данного поста меня побудил однотипный вопрос, задаваемый на множестве вебмастерских форумов – в том числе и на нулледе, который я модерирую и считаю лучшим из них. [...]

Lingonection.com

Сайт для австрийской фирмы, которая занимается переводами. Движок - Joomla. Полноценная мультиязычность (если посетитель, находящийся на английской странице "контакты" нажимает на немецкую версию сайта - он должен попасть [...]

Безопасность – узелок на память

1. Для запросов, инициирующих модификацию данных, следует использовать только POST запросы; 2. Следует фильтровать все вводимые данные и не позволять неочищенным данным попадать на веб-страницы; 3. Все механизмы авторизации, аутентификации [...]

Перекрестный обмен постовыми

Все блогеры рано или поздно созревают до старого доброго обмена постовыми, поскольку все так называемые “темы” которые продаются на плати.ру расчитаны на черные и серые проекты, а мы [...]

2 комментариев

  • Сергей пишет:

    Скажите пожалуйста, как заставить выводить последние темы форума. После вставки вашего кода у меня выводится:
    $url =’http://www.allremont59.ru/forum/gymrss.php’, 5; //адрес RSS ленты // в примере указан адрес фида для движка SMF, уточните какой у вашего форума $rss = simplexml_load_file($rssurl);//Интерпретируем XML-файл в объект foreach ($rss->channel->item as $item) { $item->link = str_replace(‘&’,'&’,$item->link);// это чтоб было валидно //но если ваша фамилия лебедев и вам пофик на валидацию, данную строку можно убрать $out =’
    ‘; $out .= $item->title; $out .= ‘
    ‘; $out .= ‘
    ‘; $item->description = strip_tags($item->description);//убираем теги $words = split(” “, $item->description); if ( count($words)>18 ) $item->description = join(” “, array_slice($words, 0, 18)); //оставляю 18 слов – можно обрезать по кол-ву символов но имхо по словам красивее $out .= $item->description; $out .= ‘[...]

    ‘; //echo iconv(“UTF-8″, “CP1251//IGNORE”, $out);//код подходит для любого движка // в зависимости от кодировки оставьте или разремируйте echo $out; }

    и вот что с этим делать хз.

    У меня сейчас стоит более простой вариант вывода rss, но хочется ваш код чтобы заработал….
    Спасибо

    Мой код вывода rss на WP


2 комментариев


RSS feed for comments on this post.

Leave a comment