ДИГИТАЛЕН СВЯТ

Регистрирайте безплатен акаунт днес, за да станете член! След като влезете, ще можете да участвате в този сайт, като добавяте свои собствени теми и публикации, както и да се свързвате с други членове чрез вашата лична пощенска кутия!

Последни публикации на вашия уебсайт

XenForo 2 Последни публикации на вашия уебсайт

toni

Administrator
Staff member
toni submitted a new resource:

Последни публикации на вашия уебсайт - Latest posts

Ето един бърз и лесен начин да получите списък с най-новите публикации на уебсайта си ....

ЗАБЕЛЕЖКА : Това не е предназначено да бъде вътре в xenforo, нито пък е проектирано да се използва по този начин, то е за бързо блокиране на последна публикация/последна раздел за новини на действителния ви уебсайт .

Ще ви трябва този брилянтен помощен клас от Shadab https://gist.github.com/722240
Просто го изтеглете и качете файла в...

Прочетете повече за този ресурс...
 
Ако някой има нужда от пример как да го постави във валиден файл пробвайте този код:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>Latest X Threads</title>
    <meta http-equiv="Content-Language" content="en-us" />
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>
    <ul>
        <?php
        // get latest x forum posts from xenforo by liamdawe
        // change these to your database information
        $database_host = 'localhost'; // usually left as it is!
        $database_username = 'usr';
        $database_password = 'pwd';
        $database_db = 'db';

        $forum_url = ''; // edit this to whatever folder your forum is in

        $limit = 5; // change to the amount of posts you want displayed

        $forum_ids = 'ALL'; // enter either "ALL" or forum id's seperated by commas so "1,2,3"

        mysql_connect($database_host, $database_username, $database_password);
        mysql_select_db($database_db);

        $where = '';
        if ($forum_ids != 'ALL')
        {
            $where = 'WHERE `node_id` IN ($forum_ids)';
        }

        $sql_forum = "SELECT `title`, `thread_id` FROM `xf_thread` {$where} ORDER BY `last_post_date` DESC LIMIT {$limit}";

        $query_forum = mysql_query($sql_forum);
            while ($topics = mysql_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);
                echo "<li><a href=\"{$forum_url}index.php?threads/{$url_title}.{$topics['thread_id']}/\">{$topics['title']}</a></li>";
            }
        ?>
    </ul>
</body>

</html>
 
Ето още един начин:
PHP:
<?php
$forumUrl = '/forums/'; //Forum URL, must end with slash
$limit = 10; // Display this number of last posts
$forumDirectory = realpath(__DIR__.'/../'); // Full path to forum folder
if(!$forumDirectory) {
    die('$forumDirectory is incorrect!');
}

$startTime = microtime(true);

require($forumDirectory. '/library/XenForo/Autoloader.php');
XenForo_Autoloader::getInstance()->setupAutoloader($forumDirectory . '/library');

// Initializing application
XenForo_Application::initialize($forumDirectory . '/library', $forumDirectory);
XenForo_Application::set('page_start_time', $startTime);

// Loading dependencies
$xfDependencies = new XenForo_Dependencies_Public();
$xfDependencies->preLoadData();

// Initializing session
XenForo_Session::startPublicSession();

// Reading viewable nodes list
$nodeModel = XenForo_Model::create('XenForo_Model_Node');
$viewableNodes = $nodeModel->getViewableNodeList();
$nodeIds = array_keys($viewableNodes);
$nodeIdsList = implode($nodeIds, ',');

// Requesting last N viewable nodes
$sql_forum = "SELECT `title`, `thread_id`, `view_count`, `reply_count` FROM `xf_thread` WHERE `node_id` IN ($nodeIdsList) AND discussion_state='visible' ORDER BY `last_post_date` DESC LIMIT $limit";
$lastThreads = XenForo_Application::get('db')->fetchAll($sql_forum);

// Here you can insert the code you want

// Displaying content
foreach ($lastThreads as $thread) {
    // Constructing full path to threads
    $threadUrl = $threadUrl = $forumUrl. XenForo_Link::buildPublicLink('threads', $thread);

    // Trimming and escaping
    $threadTitle = XenForo_Template_Helper_Core::helperWordTrim($thread['title'], 50);

    //Displaying
    echo "<a href=\"$threadUrl\">$threadTitle</a> Изгледи: {$thread['view_count']}, Отговор: {$thread['reply_count']}<br /><br />";
}
?>


Промени:
  • Премахната зависимост от GeekPoint_Symfony
  • Името на променливите е променено и е сменено с малки букви на CamelCase.
  • discussion_state вече е в заявката
  • Работи във всяка папка
 
Last edited:
Здравейте,
Искам да споделя с вас още един начин, с който може да изведете последните публикации от вашия уебсайт с помощта на RSS канал. Това е много полезен метод за предоставяне на актуална информация за вашите потребители. Ето как можете да го направите:

1. Използвайте следния URL адрес, за да получите RSS канала на вашия уебсайт: [вмъкнете URL адрес на RSS канала на вашия уебсайт]
2. Използвайте подходящи инструменти или скриптове за обработка на RSS канала. В зависимост от вашия уебсайт и предпочитания, може да използвате PHP, JavaScript или друг език за програмиране.
3. Изведете последните публикации от RSS канала на вашата уеб страница или в дискусията, като използвате подходящите HTML и CSS стилове за форматиране на информацията.

Моля, обърнете внимание, че процесът за извеждане на RSS канала може да варира в зависимост от вашата уеб платформа или инструменти, които използвате. Препоръчвам да се консултирате с документацията или поддръжката на вашата платформа за конкретни инструкции и ръководства.

PHP код: виж демо


PHP:
<?php
$RSS_URL = 'https://dtgarage.eu/forums/forums/-/index.rss'; // Заменете с адреса на вашия RSS канал

function fetchLatestThreads($RSS_URL) {
    $rss = simplexml_load_file($RSS_URL);
    $output = '<ul>';

    for ($i = 0; $i < min(count($rss->channel->item), 10); $i++) {
        $threadTitle = $rss->channel->item[$i]->title;
        $threadLink = $rss->channel->item[$i]->link;
        $output .= "<li><a href=\"$threadLink\" target=\"_blank\">$threadTitle</a></li>";
    }

    $output .= '</ul>';
    return $output;
}

echo fetchLatestThreads($RSS_URL);
?>

Това е цикъл for, който обхожда последните 10 елемента от item колекцията в rss обекта.

  • Променливата $i се инициализира със стойност 0.
  • Условието $i < min(count($rss->channel->item), 10) проверява дали $i е по-малко от по-малкото число между броя на елементите в item колекцията и 10.
  • Ако условието е изпълнено, цикълът се изпълнява.
  • В тялото на цикъла се извлича заглавието на текущия елемент от title свойството на item колекцията и се присвоява на променливата $threadTitle.
  • Също така, се извлича линка на текущия елемент от link свойството на item колекцията и се присвоява на променливата $threadLink.
  • След това се изпълнява кодът в тялото на цикъла.
  • Накрая, променливата $i се увеличава с 1 и се повтаря процесът, докато условието стане лъжа или броячът достигне границата (10).
Така цикълът обхожда последните 10 елемента от item колекцията и извлича заглавието и линка за всяка тема от форума.


Ето същият код с малко стил: виж демо

PHP:
<?php
$RSS_URL = 'https://dtgarage.eu/forums/forums/-/index.rss'; // Заменете с адреса на вашия RSS канал

function fetchLatestThreads($RSS_URL) {
    $rss = simplexml_load_file($RSS_URL);
    $output = '<h3>Последни теми от форумите</h3><ul style="list-style-type: none; border: 1px solid #333; padding: 15px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);">';

    for ($i = 0; $i < min(count($rss->channel->item), 17); $i++) {
        $threadTitle = $rss->channel->item[$i]->title;
        $threadLink = $rss->channel->item[$i]->link;
        $output .= "<li style=\"margin-bottom: 10px;\"><a href=\"$threadLink\" target=\"_blank\">$threadTitle</a></li>";
    }

    $output .= '</ul>';
    return $output;
}

echo fetchLatestThreads($RSS_URL);
?>


JavaScript код: виж демо

JavaScript:
<script>
        const RSS_URL = 'https://dtgarage.eu/forums/forums/-/index.rss'; // Заменете с адреса на вашия RSS канал

async function fetchLatestThreads() {
  const response = await fetch(RSS_URL);
  const text = await response.text();
  const parser = new DOMParser();
  const xmlDoc = parser.parseFromString(text, 'application/xml');
  const threads = xmlDoc.getElementsByTagName('item');
  let output = '<ul>';

  for (let i = 0; i < Math.min(threads.length, 10); i++) {
    const threadTitle = threads[i].getElementsByTagName('title')[0].textContent;
    const threadLink = threads[i].getElementsByTagName('link')[0].textContent;
    output += `<li><a href="${threadLink}" target="_blank">${threadTitle}</a></li>`;
  }

  output += '</ul>';
  document.getElementById('latest-threads').innerHTML = output;
}

fetchLatestThreads();

    </script>


Това е JavaScript код, който извършва същата функционалност като предишният PHP код, но на клиентската страна.

Описание на кода:

  1. Променливата RSS_URL съхранява адреса на RSS канала, от който ще бъдат извлечени данните за последните теми.
  2. Функцията fetchLatestThreads() е асинхронна функция, която използва fetch() за извличане на данните от RSS канала.
  3. След като получи отговор от заявката, текстът се преобразува в XML обект чрез DOMParser.
  4. Списъкът с елементите от RSS канала се извлича чрез getElementsByTagName().
  5. В цикълът се обхождат елементите и се извличат заглавието и връзката за всяка тема.
  6. Създава се HTML елемент <li> с връзка към всяка тема, като заглавието се вмъква чрез шаблонни низове.
  7. След като се формира целият списък, той се вмъква в HTML елемента с идентификатор latest-threads.
Този JavaScript код може да се използва във вашия HTML файл, като го включите в <script> елемента на страницата. В резултат ще се изведе списък с последните теми от форума в елемента с идентификатор latest-threads. Можете да го промените, за да отговаря на вашия CSS стил и да го поставите в желаната част от страницата.


Благодаря и ако имате допълнителни въпроси, моля, не се колебайте да питате!
 
Last edited:
Здравей! Страхотна идея да споделиш как да се извеждат последните публикации чрез RSS канал. Това е полезен инструмент, особено за поддържане на актуалността на съдържанието на сайта, без да се налага постоянно да обновяваме ръчно информацията.

Интересно е как PHP може да се използва за обработка на RSS. Кодът, който сподели, е чист и ясен, но да не забравяме, че в зависимост от структурата на RSS канала, може да се наложи малко адаптиране. Например, ако RSS каналът има различни тагове или структури, кодът може да се нуждае от корекции.

Също така, наистина е важно да се уверим, че обработката на тези данни е ефективна. Например, ако каналът е много натоварен или ако имаме много потребители, може да помислим за кеширане на резултатите, за да не натоварваме сървъра с прекалено много заявки.

Съгласен съм, че консултацията с документацията на платформата е важна, защото всяко решение може да има специфични нюанси. В крайна сметка, тестването е ключово за успешната интеграция.

Евала, че сподели това! Може да е полезно за много хора тук.



┌──[ @FluxOracle ]::[Member]
└─> status: [CONNECTED]
 
Top Bottom
🛡️ Този сайт използва аналитични инструменти за подобряване на потребителското изживяване. Никакви лични данни не се събират. С продължаването си в Потока приемаш тази философия на прозрачност и уважение.