Вывод новостей на сайте

DiWorm

Проверенные
Сообщения
440
Реакции
142
Баллы
5,545
Эта новость - репост моей записи на N(не буду указывать ссылку на оригинал во избежание ;)).

Данный небольшой гайд не имеет большой ценности, но возможно новичкам поможет в их изысканиях.

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

Спасибо за внимание.
 
Последнее редактирование:
Добрый день!

Все сделал по инструкции, ошибок нет, пустой лист. Новостей тоже нет.

Версия XenForo 1.5.14

Подскажите, пожалуйста, возможно скрипт устарел для этой версии?
 
Добрый день!

Все сделал по инструкции, ошибок нет, пустой лист. Новостей тоже нет.

Версия XenForo 1.5.14

Подскажите, пожалуйста, возможно скрипт устарел для этой версии?
Как в дискорде ответил уже, утром решим. Но для начала попробуй включить дебаг базы

Код:
 $r = $db->query($q);
замени на
Код:
 $r = $db->query($q, TRUE);
если конечно пользуешься этим классом.

Опять же, уточни -- куда положил файлы которые используются? в корень с файлом который выполняешь? если нет, то что с путями?
 
Спасибо!

Дата отображается везде одинаковая: "01.01.1970 03:00"
Как можно решить проблему, чтобы отображалась реальная, с форума.

Возможно как-то сделать, чтобы при вставке скрипта на сайт, была возможность листать страницы из новостей а не видеть все новости из раздела?
И еще, подскажите, можно ли уменьшать изображения которые берутся с форума, до заданного размера автоматически? Сейчас они не влезают и смотрится убого...
 
Последнее редактирование:
Дата отображается везде одинаковая: "01.01.1970 03:00"
Дата бралась и приводилась к человеческому виду:
Код:
$obj->posted_date = date("d.m.Y H:i", $obj->posted_date); //приводим дату к человекопонятному формату

, могу предложить только делать дампы и смотреть что там внутри , например
Код:
var_dump($obj);
скорее всего не перезаписывается объект и нужно заменить на:
Код:
$posted_date = '';
$posted_date = date("d.m.Y H:i", $obj->posted_date);
и далее в коде использовать $posted_date

Возможно как-то сделать, чтобы при вставке скрипта на сайт, была возможность листать страницы из новостей а не видеть все новости из раздела?
Ну, вариантов много, логика простая: получаешь кол-во записей, на странице с новостями ловишь $_GET запрос и подставляешь цифры в функцию вывода
Код:
news($cat_id, $from, $to);
, в любом случае почитай про pagination если проблемы с логикой, статей много, кода тоже, думаю найдешь то, что тебе понравится больше :)

И еще, подскажите, можно ли уменьшать изображения которые берутся с форума, до заданного размера автоматически? Сейчас они не влезают и смотрится убого...
Тут способов тоже достаточно много, например выводить новости в <div class="news"> //// новости </div>
и прописать код CSS для него, что-то вроде:
Код:
.news img { width: 100px; height: 100px; }
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу