[Готовое решение] Вывод новостей на сайте из XenForo (мои 5 копеек, в общую кучу)

Тема в разделе "XenForo", создана пользователем WormeR, 15 сен 2014.

Информация :
Хотите добавить продукт, следуйте правилам:
1)Добавить скриншот.
2)Добавить описание (Описание на английском языке использовать - запрещено).
3)Ссылка на скачивание должна вести на сторонний файлообменник (использовать вложения - запрещено).
Модераторы: DMS
  1. WormeR

    WormeR Создатель

    Регистр.:
    27 ноя 2007
    Сообщения:
    44
    Симпатии:
    5
    Добрый день!

    Думал как выразить свою благодарность сообществу за годы помощи мне и нашел способ:

    Встала задача: выводить новостную ленту на лету с форума (т.к. делать отдельную ленту - лениво) и в связи с переездом и отсутствием адекватных готовых решений, решил написать свой.

    index.php
    Код:
    <?
    require_once ('inc/functions.php'); //подключаем функции
    news('24', '0', '10'); //задаем параметры - 1. ID категории форума 2. LIMIT вывода, в моем случае 0,10
    ?>
    
    /inc/functions.php
    Код:
    <?
    require_once ('class.mysql.php');
    require_once ('nbbc.php');
    
        function news($cat, $from, $to)
        {
            $db  = new mysql();
            if(!$db->IsConnected())
                exit("db error");
       
            $q = "SELECT `xf_thread`.`thread_id`, `xf_thread`.`node_id`, `xf_thread`.`title`, `xf_thread`.`reply_count`, `xf_thread`.`view_count`, `xf_thread`.`user_id`, `xf_thread`.`username`, `xf_thread`.`post_date`, `xf_thread`.`first_post_id`, `xf_post`.`message` FROM `xf_thread` LEFT JOIN `xf_post` ON `xf_post`.`thread_id` = `xf_thread`.`thread_id` AND `xf_post`.`post_id` = `xf_thread`.`first_post_id` WHERE `xf_thread`.`node_id` =  '{$cat}' ORDER BY  `xf_post`.`post_date` DESC LIMIT {$from} , {$to}";
            $r = $db->query($q); // ($q, TRUE) для дебага   
                
            foreach($r as $obj)
                {
                    $bbcode = new BBCode;
                    $obj->message = $bbcode->Parse($obj->message);
       
                $obj->posted_date = date("d.m.Y H:i", $obj->posted_date); //приводим дату к человекопонятному формату
           
                    echo "<div class='panel panel-default'>";
                    echo "    <div class='panel-heading'><a href='/forum2/index.php?threads/{$obj->thread_id}/'>{$obj->title}</a></div>";
                    echo "    <div class='panel-body'>";
                    echo "        <p>{$obj->message}</p>";           
                    echo "    </div>";
                    echo "    <div class='panel-footer'>Дата: {$obj->posted_date} | Автор: <a href='/forum2/index.php?members/{$obj->user_id}/'>{$obj->username}</a> | Просмотров: {$obj->view_count} | Комментариев: {$obj->reply_count}</div>";
                    echo "</div>";
               
        
                }
            $db->close();
        }
    ?>
    
    Про require в functions.php: я привык к классу для работы с базой и ббкодам сторонних разработчик, копаться в сырцах XenForo мне не хотелось, чтобы найти как у них все работает. Но если вы желаете разобраться, вы можете заменить их на родные классы форума для работы.

    Ссылки на используемые мною классы:
    class.mysql.php - Перейти по ссылке
    nbbc.php - Перейти по ссылке

    Плюсы данного метода:
    1. Можно выводить как угодно и где угодно(в моем случае - заменив полностью страницу с новостями)
    2. Скорость выполнения: Запрос на выборку из базы 10 последних записей занимает 0.0005сек.

    Все классы div'ов в коде это отсылка к twitter bootstrap3

    P.S. Если вы прочитали текст и решили его перепостить или написать плагин\модуль, прошу оставлять ссылки на автора работы (меня) сюда на форум или на мой игровой проект: Перейти по ссылке, или мой email dyworm[at]gmail.com

    Спасибо за внимание.
     
    Последнее редактирование: 6 ноя 2015
    kuzovbmw и exarh нравится это.