1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - новый и перспективный форумный движок от бывших создателей vBulletin.

1.2.x Вывод тем из раздела на сайт

Тема в разделе "Плагины для XenForo", создана пользователем XaX, 10 апр 2014.

Загрузка
  1. XaX

    XaX Активный пользователь

    Регистрация:
    21.10.13
    Сообщения:
    8
    Симпатии:
    4
    Версия XF:
    1.2.4
    Я хочу получить ленты новостей для сайта которая бралась бы с форума.
    то-есть перетащить на сайт название темы + текст из самой темы.

    нашёл таблицу где хранятся темы(не посты как я понял) называется она xf_search_index
    сджоинить
    её не знаю как, так как там не к чему подцепится.
    есть только столбец metedata с записью в виде "_md_user_4 _md_content_post _md_node_12 _md_thread_27"
    по идее это все что нужно но как это связать с таблицей xf_thread я не представляю.

    похожие темы:
    тык1
    тык2 - вот на этом коде буду писать модуль.
     
  2. XaX

    XaX Активный пользователь

    Регистрация:
    21.10.13
    Сообщения:
    8
    Симпатии:
    4
    Версия XF:
    1.2.4
    321.jpg
    новостная лента с раздела форума.

    Код:
         <?php
                    // Ниже укажите имя, пароль и имя бд для подключения.
                        $config['db']['host'] = '192.168.1.3';
                        $config['db']['username'] = 'root';
                        $config['db']['password'] = 'pass';
                        $config['db']['dbname'] = 'forumdb';
                        $forum_url = '/forum/';
                    // отредактируйте путь к аватаркам.
                    $dir = 'forum/data/avatars/s/0/';
                    // длина названия темы.
                    $num = 40;
                    // длина темы.
                    $numpost = 700;
                    // Укажите сколько тем выводить в "блоке".
                    $limit = 16;
    
                    // введите id категорий из каких следует брать последние сообщения. Или выберете "ALL" что бы бралось со всего форума.
                    $forum_ids = '5,6,8,9,10,12';
                    //func
                    function replaceBBCode($text_post) {
                                                                    $str_search = array(
                                                                     "#\[list\](.+?)\[\*\]#is",
                                                                    "#\\\n#is",
                                                                    "#\[code\](.+?)\[\/code\]#is",
                                                                    "#\[quote\](.+?)\[\/quote\]#is",
                                                                    "#\[url=(.+?)\](.+?)\[\/url\]#is",
                                                                    "#\[url\](.+?)\[\/url\]#is",
                                                                     "#\[color=(.+?)\](.+?)\[\/color\]#is",
                                                                    );
                                                                    $str_replace = array(
                                                                    "<li>",
                                                                    "<br>",
                                                                    "<code class='code'>\\1</code>",
                                                                    "<table width = '95%'><tr><td>Цитата</td></tr><tr><td class='quote'>\\1</td></tr></table>",
                                                                    "<a href='\\1'>\\2</a>",
                                                                    "<a href='\\1'>\\1</a>",
                                                           
                                                                    "<span style='color:\\1'>\\2</span>",
                                                                    );
                                                                    return preg_replace($str_search, $str_replace, $text_post);
                                                                }
           
                    mysql_connect($config['db']['host'], $config['db']['username'], $config['db']['password']);
                    mysql_select_db($config['db']['dbname']);
                    mysql_query ("set character_set_results='utf8'");
                    mysql_query("SET CHARACTER SET CP1251");
                    mysql_query("SET NAMES CP1251");
        
                    $where = 'WHERE `node_id` IN (' . $forum_ids . ')';
                    $sql_forum = "SELECT
                                    t.title, t.thread_id, t.reply_count, t.user_id, t.username, FROM_UNIXTIME(t.last_post_date) AS date,
                                    t.view_count, t.reply_count, t.node_id,
                                    a.avatar_date
                                    FROM xf_thread as t
                                    LEFT JOIN xf_user as a ON (a.user_id=t.user_id)
                                   {$where} ORDER BY last_post_date DESC LIMIT {$limit}";
               
                    $query_forum = mysql_query($sql_forum);
                           while ($topics = mysql_fetch_assoc($query_forum))
                        {
                                $cnum = mb_strlen($topics['title']);
                                    if($cnum>$num)
                                        {
                               
                                        $topics['title'] = mb_substr($topics['title'], 0, $num);
                                        $topics['title'] = $topics['title'] . '...';
                                        }
     
    //end post                           
                                    $post="_md_user_{$topics['user_id']} _md_content_post _md_node_{$topics['node_id']} _md_thread_{$topics['thread_id']}";
                                    $query = mysql_query("SELECT metadata, message
                                                            FROM xf_search_index
                                                            WHERE metadata='$post'");
                                        while ($topics_post = mysql_fetch_assoc($query))
                                        {
                                        $topics_post['message'] = replaceBBCode($topics_post['message']);
                               
                                            $url_message = str_replace('?', '', $topics_post['message']);
                                            $url_message = str_replace('[/LIST]', '</li>', $url_message);
                                            $url_message = str_replace('[*]', '', $url_message);
                                            $url_message = str_replace('[ATTACH=full]', '<img', $url_message);
                                            $url_message = str_replace('[/ATTACH]', '>', $url_message);
                                            $url_message = str_replace('[SIZE=', '<i', $url_message);
                                            $url_message = str_replace('[', '<', $url_message);
                                            $url_message = str_replace(']', '>', $url_message);
                                            $topics_post['message'] = $url_message;
    
                                            $cnum = mb_strlen($topics_post['message']);
                                                if($cnum>$numpost)
                                                    {
                                                    //$topics['title'] = mb_strtolower($topics['title']);
                                                    $topics_post['message'] = mb_substr($topics_post['message'], 0, $numpost);
                                                    $topics_post['message'] = $topics_post['message'] . '...';
                                                    }   
    
                                                       
                           
    //end post                   
    
                                    if ($topics['avatar_date'] == 0){
                                        $topics['user_id'] = 0;
                                        $avatar = "No Avatar";
                                        }else{
                                        $avatar = "Avatar";
                                        }
           
           
                         echo "
    
                                <table cellspacing='0' cellpadding='0' border='0' class='tabNews'>
                                    <tr>
                                        <td class='entry-title'><h3 style='color: #feac1f'><img width='30'  src='{$dir}{$topics['user_id']}.jpg' title='{$avatar} {$topics['username']}'>&nbsp{$topics['title']}</h3></font></td>
                                        <td style='color: #a1967c; font-size: 14px; text-align: right;'>{$topics['date']}</td>
                                    </tr>
                                    <tr>
                                        <td colspan='2' class='entry-text'>
                                        <spawn style='color: #a1967c'>
                                        <br>
                                        {$topics_post['message']}
                                        </spawn>
    
                                        </td>
                                    </tr>
                           
                                    <tr>
                                        <td style='color: #a1967c'><br><img  src='template/images/forum/nik.png' title='Автор'><font size='3'><font size='1' style='padding-left: 3px;'>{$topics['username']}&nbsp; &nbsp; <img  src='template/images/forum/prosmotr.png' title='Просмотры'> {$topics['view_count']}&nbsp;&nbsp;&nbsp;<img  src='template/images/forum/otvet.png' title='Сообщений в теме'> {$topics['reply_count']}</font></td>
                                        <td style='text-align: right;'><br><a style='color: #feac1f; font-size: 12px;' href=\"{$forum_url}index.php?threads/{$topics['thread_id']}\">Читать далее...</a></td>
                                    </tr>
                                </table>
    <br>
                            ";
                    }}
                    ?>
    код далек от идеала.

    я знаю что нынче программисты и в носу не поковыряют за бесплатно, но может найдется человек который потратит свое время и добавит что то в этот код и прикрепит к теме.
     
    Последнее редактирование: 11 апр 2014

Поделиться этой страницей