Парсинг RSS лент в блок на главной форума

Автор crazyASD, 17 сентября 2010, 00:40:32

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

crazyASD

Долго искал мод парсинга RSS ленты с сайта на форум, ан нету таких!  :o
Пять минут гугления и нормальный код был найден и допилен до совместимости с SMF!
Тестировалось на SMF 1.1.11

Итак, открываем Boardindex.template.php вашей темы:

Ищем:

    // Show the news fader?  (assuming there are things to show...)
    if ($settings['show_newsfader'] && !empty($context['fader_news_lines']))
    {
        echo '
    <table border="0" width="100%" class="tborder" cellspacing="' , ($context['browser']['is_ie'] || $context['browser']['is_opera6']) ? '1' : '0' , '" cellpadding="4" style="margin-bottom: 2ex;">
        <tr>
            <td class="catbg"> &nbsp;', $txt[102], '</td>
        </tr>
        <tr>
            <td valign="middle" align="center" height="60">';

        // Prepare all the javascript settings.
        echo '
                <div id="smfFadeScroller" style="width: 90%; padding: 2px;"><b>', $context['news_lines'][0], '</b></div>
                <script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[
                    // The fading delay (in ms.)
                    var smfFadeDelay = ', empty($settings['newsfader_time']) ? 5000 : $settings['newsfader_time'], ';
                    // Fade from... what text color? To which background color?
                    var smfFadeFrom = {"r": 0, "g": 0, "b": 0}, smfFadeTo = {"r": 255, "g": 255, "b": 255};
                    // Surround each item with... anything special?
                    var smfFadeBefore = "<b>", smfFadeAfter = "</b>";

                    var foreColor, backEl, backColor;

                    if (typeof(document.getElementById(\'smfFadeScroller\').currentStyle) != "undefined")
                    {
                        foreColor = document.getElementById(\'smfFadeScroller\').currentStyle.color.match(/#([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/);
                        smfFadeFrom = {"r": parseInt(foreColor[1]), "g": parseInt(foreColor[2]), "b": parseInt(foreColor[3])};

                        backEl = document.getElementById(\'smfFadeScroller\');
                        while (backEl.currentStyle.backgroundColor == "transparent" && typeof(backEl.parentNode) != "undefined")
                            backEl = backEl.parentNode;

                        backColor = backEl.currentStyle.backgroundColor.match(/#([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/);
                        smfFadeTo = {"r": eval("0x" + backColor[1]), "g": eval("0x" + backColor[2]), "b": eval("0x" + backColor[3])};
                    }
                    else if (typeof(window.opera) == "undefined" && typeof(document.defaultView) != "undefined")
                    {
                        foreColor = document.defaultView.getComputedStyle(document.getElementById(\'smfFadeScroller\'), null).color.match(/rgb\((\d+), (\d+), (\d+)\)/);
                        smfFadeFrom = {"r": parseInt(foreColor[1]), "g": parseInt(foreColor[2]), "b": parseInt(foreColor[3])};

                        backEl = document.getElementById(\'smfFadeScroller\');
                        while (document.defaultView.getComputedStyle(backEl, null).backgroundColor == "transparent" && typeof(backEl.parentNode) != "undefined" && typeof(backEl.parentNode.tagName) != "undefined")
                            backEl = backEl.parentNode;

                        backColor = document.defaultView.getComputedStyle(backEl, null).backgroundColor.match(/rgb\((\d+), (\d+), (\d+)\)/);
                        smfFadeTo = {"r": parseInt(backColor[1]), "g": parseInt(backColor[2]), "b": parseInt(backColor[3])};
                    }

                    // List all the lines of the news for display.
                    var smfFadeContent = new Array(
                        "', implode('",
                        "', $context['fader_news_lines']), '"
                    );
                // ]]></script>
                <script language="JavaScript" type="text/javascript" src="', $settings['default_theme_url'], '/fader.js"></script>
            </td>
        </tr>
    </table>';
    }


После него добавляем:

    echo '
      <div class="tborder" ', $context['browser']['needs_size_fix'] && !$context['browser']['is_ie6'] ? 'style="width: 100%;"' : '', '>
      <div class="catbg" style="padding: 6px; vertical-align: middle;">
        &nbsp; Новости
      </div>
  <table  border="0" width="100%">
<tr>
<td align="center" class="windowbg2" width="100%" height="60px">';
function parserSide($feedURL) {
    $rss = simplexml_load_file($feedURL);
    $i = 0;
    foreach ($rss->channel->item as $feedItem) {
        $i++;
        echo "&nbsp;&nbsp;<span class='middletext'><a href='$feedItem->link' title='$feedItem->title'>" . $feedItem->title . "</a></span>&nbsp;&nbsp;";
        if($i >= 5) break;
        echo "<span class='middletext'>|</span>";
    }
}
parserSide("http://path_to_rss_feed");
  echo'</td>
</tr>
</table></div><br />';


Осталось прописать в переменную parserSide адрес нужной RSS ленты, для примера с этого форума:

parserSide("http://www.simplemachines.ru/index.php?type=rss;action=.xml");

Всё! Готово!
Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

arxat


crazyASD

Аналогично, тут никаких нету подводных камней.
Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

Stern

Цитата: crazyASD от 17 сентября 2010, 00:40:32
Долго искал мод парсинга RSS ленты с сайта на форум, ан нету таких!  :o ...

а как же RSS Feed Poster?)
МышЫ плакали, кололись, но продолжали жрать кактус...

crazyASD

Это совершенно другое. Парсер ничего никуда не постит, а просто форматирует RSS фид и выводит заголовки в любой блок форума, а не в сообщения.
Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

Stern

Цитата: crazyASD от 21 января 2011, 14:34:37
Это совершенно другое. Парсер ничего никуда не постит, а просто форматирует RSS фид и выводит заголовки в любой блок форума, а не в сообщения.
Скриншот в студию, плз.! - дабы представлять, что вы предлагаете!
МышЫ плакали, кололись, но продолжали жрать кактус...

crazyASD

Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

Stern

Полезная вещь, спасибо!

P.S. Даты копирайтов у вас устарели(
МышЫ плакали, кололись, но продолжали жрать кактус...

crazyASD

Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

Drakonsa

Цитата: Stern от 21 января 2011, 20:02:39
Полезная вещь, спасибо!

P.S. Даты копирайтов у вас устарели(
На моем родном форуме, обновляемом с 1.1.5, стоит: Powered by SMF 1.1.12 | SMF © 2006, Simple Machines LLC  и как-то все-равно.

STEN1977

Цитата: crazyASD от 17 сентября 2010, 00:40:32
Долго искал мод парсинга RSS ленты с сайта на форум, ан нету таких!  :o
Пять минут гугления и нормальный код был найден и допилен до совместимости с SMF!
Тестировалось на SMF 1.1.11

Итак, открываем Boardindex.template.php вашей темы:

Ищем:

    // Show the news fader?  (assuming there are things to show...)
    if ($settings['show_newsfader'] && !empty($context['fader_news_lines']))
    {
        echo '
    <table border="0" width="100%" class="tborder" cellspacing="' , ($context['browser']['is_ie'] || $context['browser']['is_opera6']) ? '1' : '0' , '" cellpadding="4" style="margin-bottom: 2ex;">
        <tr>
            <td class="catbg"> &nbsp;', $txt[102], '</td>
        </tr>
        <tr>
            <td valign="middle" align="center" height="60">';

        // Prepare all the javascript settings.
        echo '
                <div id="smfFadeScroller" style="width: 90%; padding: 2px;"><b>', $context['news_lines'][0], '</b></div>
                <script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[
                    // The fading delay (in ms.)
                    var smfFadeDelay = ', empty($settings['newsfader_time']) ? 5000 : $settings['newsfader_time'], ';
                    // Fade from... what text color? To which background color?
                    var smfFadeFrom = {"r": 0, "g": 0, "b": 0}, smfFadeTo = {"r": 255, "g": 255, "b": 255};
                    // Surround each item with... anything special?
                    var smfFadeBefore = "<b>", smfFadeAfter = "</b>";

                    var foreColor, backEl, backColor;

                    if (typeof(document.getElementById(\'smfFadeScroller\').currentStyle) != "undefined")
                    {
                        foreColor = document.getElementById(\'smfFadeScroller\').currentStyle.color.match(/#([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/);
                        smfFadeFrom = {"r": parseInt(foreColor[1]), "g": parseInt(foreColor[2]), "b": parseInt(foreColor[3])};

                        backEl = document.getElementById(\'smfFadeScroller\');
                        while (backEl.currentStyle.backgroundColor == "transparent" && typeof(backEl.parentNode) != "undefined")
                            backEl = backEl.parentNode;

                        backColor = backEl.currentStyle.backgroundColor.match(/#([\da-f][\da-f])([\da-f][\da-f])([\da-f][\da-f])/);
                        smfFadeTo = {"r": eval("0x" + backColor[1]), "g": eval("0x" + backColor[2]), "b": eval("0x" + backColor[3])};
                    }
                    else if (typeof(window.opera) == "undefined" && typeof(document.defaultView) != "undefined")
                    {
                        foreColor = document.defaultView.getComputedStyle(document.getElementById(\'smfFadeScroller\'), null).color.match(/rgb\((\d+), (\d+), (\d+)\)/);
                        smfFadeFrom = {"r": parseInt(foreColor[1]), "g": parseInt(foreColor[2]), "b": parseInt(foreColor[3])};

                        backEl = document.getElementById(\'smfFadeScroller\');
                        while (document.defaultView.getComputedStyle(backEl, null).backgroundColor == "transparent" && typeof(backEl.parentNode) != "undefined" && typeof(backEl.parentNode.tagName) != "undefined")
                            backEl = backEl.parentNode;

                        backColor = document.defaultView.getComputedStyle(backEl, null).backgroundColor.match(/rgb\((\d+), (\d+), (\d+)\)/);
                        smfFadeTo = {"r": parseInt(backColor[1]), "g": parseInt(backColor[2]), "b": parseInt(backColor[3])};
                    }

                    // List all the lines of the news for display.
                    var smfFadeContent = new Array(
                        "', implode('",
                        "', $context['fader_news_lines']), '"
                    );
                // ]]></script>
                <script language="JavaScript" type="text/javascript" src="', $settings['default_theme_url'], '/fader.js"></script>
            </td>
        </tr>
    </table>';
    }


После него добавляем:

    echo '
      <div class="tborder" ', $context['browser']['needs_size_fix'] && !$context['browser']['is_ie6'] ? 'style="width: 100%;"' : '', '>
      <div class="catbg" style="padding: 6px; vertical-align: middle;">
        &nbsp; Новости
      </div>
  <table  border="0" width="100%">
<tr>
<td align="center" class="windowbg2" width="100%" height="60px">';
function parserSide($feedURL) {
    $rss = simplexml_load_file($feedURL);
    $i = 0;
    foreach ($rss->channel->item as $feedItem) {
        $i++;
        echo "&nbsp;&nbsp;<span class='middletext'><a href='$feedItem->link' title='$feedItem->title'>" . $feedItem->title . "</a></span>&nbsp;&nbsp;";
        if($i >= 5) break;
        echo "<span class='middletext'>|</span>";
    }
}
parserSide("http://path_to_rss_feed");
  echo'</td>
</tr>
</table></div><br />';


Осталось прописать в переменную parserSide адрес нужной RSS ленты, для примера с этого форума:

parserSide("http://www.simplemachines.ru/index.php?type=rss;action=.xml");

Всё! Готово!

Дело ясное, что дело темное.... Ничего не получилось...... Обидно

Bugo


STEN1977

Цитата: Bugo от 06 февраля 2011, 22:31:51
Вы до конца дочитали?

Угу... и читал и три часа изголялся над своим форумом..... Я не умееееююю :'( :'( :'( :'(

crazyASD

Учитесь, ничего сложного там нету, ну совсем ничего.
Сон разума порождает монстров
Wordpress - рулит!  SMF 2.0.11

STEN1977

Цитата: crazyASD от 08 февраля 2011, 17:24:54
Учитесь, ничего сложного там нету, ну совсем ничего.

Абсолютно согласен чтот ничего... Я его уже и вставил как надо, и куда надо, и заменил что надо... Короче плюнул и решил: Жил же без него и еще столько же проживу.....

Stern

#15
Цитата: crazyASD от 22 января 2011, 22:59:55
В смысле?
Powered by SMF 1.1.13 | SMF © 2006-2009, Simple Machines LLC
© 2004 - 2010 ____cadstudio.ru by crazyASD | Valid XHTML & CSS | Sitemap

Цитата: crazyASD от 28 декабря 2010, 15:20:35
Аналогично, тут никаких нету подводных камней.
Поставил на 2RC5, кодировка форума 1251
русские теги выводит кракозябрами.(
подозреваю, что вина в том лежит на хостинге, ибо после переезда на него перестал работать СимплеПорталовский вывод rss-лент...
Есть предположения, как победить?

в дополнение - простая замена цифири в if($i >= 5) break; не увеличивает количество выводимых заголовков - нужно дописывать в адрес ;limit=хх (вот здесь справка на офсайте по кастомизации rss-вывода с форума).
МышЫ плакали, кололись, но продолжали жрать кактус...