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

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

Спасибо за внимание.
 
Последнее редактирование:
Назад
Сверху