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

Вывод последних постов с форума в любом скрипте на сайте

Тема в разделе "Статьи по XenForo Framework", создана пользователем FractalizeR, 06.10.2011.

Загрузка
  1. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    PHP:
    php
    $forumUrl 
    '/forum/'//URL форума, должен оканчиваться слэшем.
    $limit 10// Количество последних постов для отображения
    $forumDirectory realpath(__DIR__.'/../'); // Полный путь к папке форума
    if(!$forumDirectory) {
        die(
    '$forumDirectory is incorrect!');
    }

    $startTime microtime(true);

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

    // Инициализация приложения
    XenForo_Application::initialize($forumDirectory '/library'$forumDirectory);
    XenForo_Application::set('page_start_time'$startTime);

    // Предварительная загрузка зависимостей
    $xfDependencies = new XenForo_Dependencies_Public();
    $xfDependencies->preLoadData();

    // Инициализация сессии
    XenForo_Session::startPublicSession();

    //Получение списка видимых узлов
    $nodeModel XenForo_Model::create('XenForo_Model_Node');
    $viewableNodes $nodeModel->getViewableNodeList();
    $nodeIds array_keys($viewableNodes);
    $nodeIdsList implode($nodeIds',');

    //Запрос последних N видимых узлов.
    $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);

    //Здесь может быть любой код, если нужно

    // Отображение контента.
    foreach ($lastThreads as $thread) {
        
    // Конструирование полного пути к темам
        
    $threadUrl $threadUrl $forumUrlXenForo_Link::buildPublicLink('threads'$thread);

        
    // Обрезаем до 50 символов и превращаем в корректный HTML
        
    $threadTitle XenForo_Template_Helper_Core::helperWordTrim($thread['title'], 50);

        
    //Выводим
        
    echo "$threadUrl\">$threadTitle Просмотров: {$thread['view_count']}, Ответов: {$thread['reply_count']}

    "
    ;
    }
    Оригинал.

    Изменения по сравнению с оригиналом:
    • Убрана зависимость от класса GeekPoint_Symfony
    • Имена переменных изменены и приведены к lowerCamelCase.
    • Код прокомментирован на русском
    • В запросе учтен discussion_state
    • Код корректно работает в любой папке (а не только в корне форума)
     
    FractalizeR, 06.10.2011
    #1
    CyberAP, Romchik® и Pepelac нравится это.
  2. infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 547
    Версия XF:
    1.5.9
    Как-то странно выглядит:
    PHP:
    $startTime microtime(true);
    ...
    XenForo_Application::set('page_start_time'$startTime);
    Это для режима отладки сделано, чтобы корректно выводилось время генерации страницы?
     
    infis, 06.10.2011
    #2
  3. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Видимо, так. Это не мой код, так что я не могу ничего сказать определенно.
     
    FractalizeR, 06.10.2011
    #3
  4. Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    Когда-то пробовал оригинал, не пошел он у меня.
    И автор-буржуй судя по всему не шарит толком, не смог даже вопрос понять
     
    Romchik®, 06.10.2011
    #4
  5. infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 547
    Версия XF:
    1.5.9
    Ну мой английский я и сам часто не понимаю. А, если учесть, что английский и американский слегка отличаются, то может быть не тот диалект выбрал?

    P.S. Отличия в английском и американском английском часто можно наблюдать в том же видео от Кира, когда он набирает по-английски слово "цвет": в английском - это colour, а в американском английском - это color.
     
    infis, 06.10.2011
    #5
  6. Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    Мой разговорный английский никакой. Но вроде понятно ему писал. В первом сообщении ссылка на тему. Там на второй странице можно глянуть.
     
    Romchik®, 06.10.2011
    #6
  7. infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 547
    Версия XF:
    1.5.9
    Да вроде как он понял вопрос. Вот только вы с ним так и не смогли найти, где проблема.
    Судя по коду, проблема могла быть в переменной $forumUrl или в переменной $forumDirectory, а может и сразу в двух. Хотя он попутно еще обратил внимание на возможное неправильное расположение самого файла конфига. В принципе, проблему можно было решить, но видимо Вам было это не так и важно

    Блин, ну почему разрабы не хотят сделать SSI для движка, чтобы можно было делать практически любые аналогичные вещи, включая сторонние офф-лайн редакторы?
     
    infis, 06.10.2011
    #7
  8. Desperado Местный

    Регистрация:
    23.10.10
    Сообщения:
    270
    Симпатии:
    98
    Версия XF:
    1.1.3
    Глупый вопрос, но всё же:

    зачем изобретать велосипед с квадратными колёсами, если вывод последних постов делается с помощью 1 несчастного селекта (довольно простого) и самым обычным циклом?
    зачем подключать столько всего? Что бы блестнуть знаниями?) Сложнее - не значит лучше)
     
    Desperado, 06.10.2011
    #8
  9. theaqua

    theaqua Местный

    Регистрация:
    11.10.10
    Сообщения:
    113
    Симпатии:
    45
    Версия XF:
    1.1.1
    Затем, что не надо вводить данные. И да, почитайте про MVC, пожалуйста.
     
    theaqua, 06.10.2011
    #9
  10. Desperado Местный

    Регистрация:
    23.10.10
    Сообщения:
    270
    Симпатии:
    98
    Версия XF:
    1.1.3
    Данные? Какие данные? Заинклюдить конфиг не камильфо?
    Ну раз уж вы заикнулись про мвц, то пример из первого сообщения тоже не подходит.
    И раз уж вы заикнулись про мвц, то зачем делать вывод на сайте, ориентируясь и подключая форум?

    в чём соль? просто флудануть?
     
    Desperado, 06.10.2011
    #10
  11. theaqua

    theaqua Местный

    Регистрация:
    11.10.10
    Сообщения:
    113
    Симпатии:
    45
    Версия XF:
    1.1.1
    Хотел ответить, но подумал, что с нищими духом мне не найти общих точек соприкосновения. Се ля ви.
     
    theaqua, 07.10.2011
    #11
  12. Desperado Местный

    Регистрация:
    23.10.10
    Сообщения:
    270
    Симпатии:
    98
    Версия XF:
    1.1.3
    Значит всё же флудануть.
    Ах да, скатываться до оскорблений - это самое лучшее в ваших сообщениях. Отлично показывает сущность.

    Вы предложили мне прочесть про MVC, но в первом сообщении, скажем так, "ООП ради ООП" и никаким MVC не пахнет.
    Вы поняли, что профейлились и решили оскорблять?) Вроде четверг только...
     
    Desperado, 07.10.2011
    #12
  13. theaqua

    theaqua Местный

    Регистрация:
    11.10.10
    Сообщения:
    113
    Симпатии:
    45
    Версия XF:
    1.1.1
    Нет, я понял, что не стоит кормить столь толстого тролля. Я правда начал отвечать, но потом подумал, что вы прицепитесь к любой мелочи, так что решил закончить на этом свои изречения.
     
    theaqua, 07.10.2011
    #13
  14. Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    реально флуд пошел...

    А если по теме:
    Праведник прав - MVC действительно в статье и не пахнет.
    Но и Вы не совсем правы. Конечно никто не мешает сделать все простым запросом. Только после этого запроса придется городить еще очень много дополнительного кода. Как-то проверка прав на раздел/разделы (к примеру домен один и сразу идет проверка зареганного пользователя по кукам и следовательно выводить новости из тех разделов где есть доступ), потом генерировать правильный урл, в зависимости от SEO настроек форума, потом правильно обрезать на 50 utf символов и преобразовать в нормальный html код. Т.е. конечно это все можно сделать своим кодом, но зачем? Если для всего этого есть готовые классы ксена. Например, не во всех сторонних движках есть нормальная обработка utf строк и т.д.
    Но конечно же есть ситуации когда простой прямой запрос более предпочтителен (метод прямо противоположный описанному в статье) - когда добавление движка ксена в интегрируемый движок или не возможно по каким-то причинам (к примеру двиг не работает на php 5.2.х и выше) или сильно утяжеляет двиг. Тогда конечно более правильно использовать либы основного двига для работы с базой, а потом руками делать все проверкми прав доступа и вручную парсить полученный из базы контент.

    P.S. Хотя если честно, надо и продолжать было писать код в ООП стиле - ведь у ксена есть готовый метод для извлечения тем по заданным условиям.
     
    Yoskaldyr, 07.10.2011
    #14
    Loner1978, Romchik® и Desperado нравится это.
  15. theaqua

    theaqua Местный

    Регистрация:
    11.10.10
    Сообщения:
    113
    Симпатии:
    45
    Версия XF:
    1.1.1
    Признаю, ошибся, имел в виду ООП, а не MVC, весь код не смотрел, думал, что тут только обработка. В любом случае, я имел в виду, что так действительно проще и Yoskaldyr объяснил, почему так.
     
    theaqua, 07.10.2011
    #15
  16. Sly32 Новичок

    Регистрация:
    17.10.13
    Сообщения:
    1
    Симпатии:
    0
    Версия XF:
    1.2.2
    Может тут бродит кто? у меня код прекрасно работает но не могу исправить кодировку - нужен вывод в utf-8 - как полечить?
     
    Sly32, 19.06.2014
    #16
  17. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Оно и так должно в UTF-8 выводить. XenForo работает именно в этой кодировке. Но если действительно нужны преобразования, можно сделать так:

    Код:
    $threadTitle = iconv('utf-8', 'windows-1251', XenForo_Template_Helper_Core::helperWordTrim($thread['title'], 50));
     
    FractalizeR, 20.06.2014
    #17
    Mirovinger и Romchik® нравится это.

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

Tweet