XF 2.1 Вывод последних тем xenforo 2 на другом сайте, html, php

Версия XenForo
2.1

eavy

Проверенные
Сообщения
86
Решения
1
Реакции
18
Баллы
305
Вопрос в заголовке.
Как вывести последние темы с форума, на другом сайте?

Для xf 1.x были варианты, может у кого-то есть код для второй линейки?
Вот пример для 1x:


Код:
<?php
// отредактируйте путь к форуму.
$forum_url = 'http://forum.ru/';
$forum_ur = 'http://forum.ru/';
// длина названия темы.
$num = 20;
// укажите путь до конфигурационного файла.
include($forum_url . 'library/config.php');
// Укажите сколько последних сообщений выводить в "блоке".
$limit = 10;
// введите id категорий из каких следует брать последние сообщения. Или выберете "ALL" что бы бралось со всего форума.
$forum_ids = 'ALL';
// id форумов с которых не стоит выводить.
$forum_forbidden_ids = '1';
$db = mysqli_connect($config['db']['hiftopradartdost'], $config['db']['username'], $config['db']['password'], $config['db']['dbname']);
mysqli_query($db, 'SET NAMES cp1251');
mysqli_query($db, 'SET CHARSET cp1251');

$where = '';
if ($forum_ids != 'ALL')
    $where = 'WHERE `node_id` NOT IN (' . $forum_forbidden_ids . ') IN (' . $forum_ids . ')';
else
    $where = 'WHERE `node_id` NOT IN (' . $forum_forbidden_ids . ')';

$sql_forum = "SELECT
                `title`, `thread_id`, `reply_count`, `username`, `last_post_date`, `view_count`, `reply_count`
            FROM
                `xf_thread`
            " . $where . "
            ORDER BY `last_post_date`
            DESC LIMIT " . $limit;

$query_forum = mysqli_query($db, $sql_forum);
while ($topics = mysqli_fetch_assoc($query_forum))
{
    $url_title = str_replace(' ', '-', $topics['title']);
    $url_title = str_replace('.', '', $url_title);
    $url_title = str_replace('?', '', $url_title);
    $url_title = str_replace('/', '-', $url_title);
    $url_title = str_replace('\\', '-', $url_title);
    $url_title = str_replace('"', '', $url_title);

    $cnum = mb_strlen($topics['title']);
    if($cnum>$num)
    {
        $topics['title'] = mb_substr($topics['title'], 0, $num);
        $topics['title'] = $topics['title'] . '...';
    }

    echo "Название темы: <a style=\"padding:0px 0px 3px 0px;font-size:12px;\" href=\"{$forum_ur}index.php?threads/{$url_title}.{$topics['thread_id']}/\"><b>{$topics['title']}</b></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;<font color='#c92838'>Статистика:</font> (Просмотров: {$topics['view_count']}, Ответов: {$topics['reply_count']})</br/>";
}

?>
 
Вопрос в заголовке.
Как вывести последние темы с форума, на другом сайте?

Для xf 1.x были варианты, может у кого-то есть код для второй линейки?
Вот пример для 1x:


Код:
<?php
// отредактируйте путь к форуму.
$forum_url = 'http://forum.ru/';
$forum_ur = 'http://forum.ru/';
// длина названия темы.
$num = 20;
// укажите путь до конфигурационного файла.
include($forum_url . 'library/config.php');
// Укажите сколько последних сообщений выводить в "блоке".
$limit = 10;
// введите id категорий из каких следует брать последние сообщения. Или выберете "ALL" что бы бралось со всего форума.
$forum_ids = 'ALL';
// id форумов с которых не стоит выводить.
$forum_forbidden_ids = '1';
$db = mysqli_connect($config['db']['hiftopradartdost'], $config['db']['username'], $config['db']['password'], $config['db']['dbname']);
mysqli_query($db, 'SET NAMES cp1251');
mysqli_query($db, 'SET CHARSET cp1251');

$where = '';
if ($forum_ids != 'ALL')
    $where = 'WHERE `node_id` NOT IN (' . $forum_forbidden_ids . ') IN (' . $forum_ids . ')';
else
    $where = 'WHERE `node_id` NOT IN (' . $forum_forbidden_ids . ')';

$sql_forum = "SELECT
                `title`, `thread_id`, `reply_count`, `username`, `last_post_date`, `view_count`, `reply_count`
            FROM
                `xf_thread`
            " . $where . "
            ORDER BY `last_post_date`
            DESC LIMIT " . $limit;

$query_forum = mysqli_query($db, $sql_forum);
while ($topics = mysqli_fetch_assoc($query_forum))
{
    $url_title = str_replace(' ', '-', $topics['title']);
    $url_title = str_replace('.', '', $url_title);
    $url_title = str_replace('?', '', $url_title);
    $url_title = str_replace('/', '-', $url_title);
    $url_title = str_replace('\\', '-', $url_title);
    $url_title = str_replace('"', '', $url_title);

    $cnum = mb_strlen($topics['title']);
    if($cnum>$num)
    {
        $topics['title'] = mb_substr($topics['title'], 0, $num);
        $topics['title'] = $topics['title'] . '...';
    }

    echo "Название темы: <a style=\"padding:0px 0px 3px 0px;font-size:12px;\" href=\"{$forum_ur}index.php?threads/{$url_title}.{$topics['thread_id']}/\"><b>{$topics['title']}</b></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;<font color='#c92838'>Статистика:</font> (Просмотров: {$topics['view_count']}, Ответов: {$topics['reply_count']})</br/>";
}

?>
этот код рабочий, совместим с линейкой 2.х.х, фиксы только посмотреть надо на хф-раша, так как не поменялась структура бд,
// укажите путь до конфигурационного файла.
include($forum_url . 'library/config.php');

конфиг лежит в теперь по другому адресу:
include($forum_url . 'src/config.php');
 
  • Мне нравится
Реакции: Hope
demiant, далеко не лучший способ.
Просто и изящно - это использовать REST API.

Документация по методам - есть.
Ключ можно создать в админке.
не стоит забывать, что юзер задавший вопрос может и не знать технологию реализации (грубо говоря вообще ничего из php + mysql) и задал вопрос про код и возможность его работы под 2-ую линейку.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу