koris
Проверенные
- Сообщения
- 113
- Реакции
- 82
- Баллы
- 5,525
Вывод последних тем и сообщений с форума на ДЛЕ
Решил запостить отдельную тему поскольку информации много.
За основу вывода на сайте DLE последних тем с форума который можно найти на форуме...
Основные вопросы по данному модулю касались:
- кеширования вывода информации
- отсутствия возможности указания форумов/тем которые не надо выводить в этом блоке
- нарушение кодировки в блоке вывода
Скачав архив вы найдете в нем измененный файл run.php
Остальные файлы я не трогал.
Копирайты не менял.
Установка
1
Поместить папку xf_topics по адресу: /engine/modules/xf_topics/
2
В шаблон main.tpl в нужное место вставьте следующий код:
{include file="/engine/modules/xf_topics/run.php"}.
Внесенные в файл модификации:
- Добавлены параметры для указания форумов и тем, которые должны быть исключены из показа на сайте в блоке последних тем.
Эти строки находятся в файле run.php:
Модификации
#########
### 1 ####
#########
Модификация для предотвращения кеширования вывода последних тем и сообщений с форума на сайте.
#######################################################################################################################
Проблема:
Когда пользователь вносит изменения на форуме: создает темы, пишет посты... эта информация не сразу появляется на сайте.
Может пройти довольно много времени, прежде чем она появится в блоке.
Решение:
В одном из сообщений предлагалось просто закоментировать строку:
Лично мне это не помогло.
А вот ниже приведенный вариант помог решить проблему:
###### 1 #####
В файле /library/XenForo/ControllerPublic/Thread.php ищем:
476 строка
После фигурной скобки вставляем:
###### 2 #####
В файле /library/XenForo/ControllerPublic/Forum.php ищем:
583 строка
После фигурной скобки вставляем:
После этого надо обязательно удалить файл кеша из папки /engine/cache/xf_topics_******.tmp
#####################################
ЕСЛИ НЕ ЗАРАБОТАЛО
#####################################
Если ваш форум установлен в отдельной папке, на поддомене или выше приведенный вариант вдруг не сработал, то надо прописать абсолютный путь от корня сайта самостоятельно.
Т.е. вид строки:
Должен быть такой:
Как узнать ваш абсолютный путь на сайте?
1
Спросить у хостера.
2
Узнать самому, а именно:
- надо создать файл php например с именем 1.php (или любым другим) с таким содержимым:
и сохранить его на своем сервере в корневой папке где установлен ваш форум и запускаем в строке браузера:
или (если форум в папке)
Получаем искомый абсолютный путь от корня например такого вида:
/home/kurup/bobyor/moy_sait/public_html
и эту строку вставляем в наш код.
И получится что то типа такого:
В этом случае проблема с кешированием будет решена.
Однако жестко прописанный путь не всегда есть хорошо.
Сегодня вы на одном хостинге - завтра на другом... что то забудется и в результате файл будет работать некорректно.
Так что можно подобрать "автоматический вариант" подстановки абсолютного пути...
Это правда займет больше времени и каждый раз надо будет удалять файл кеша пока идет настройка... но оно того стоит.
Ниже будет представлено несколько таких вариантов... можете поэксперементировать...
#########
### 2 ####
#########
Предотвращение кеширования вывода информации о количестве ответов в теме
Проблема:
если пользователи добавляют/удаляют сообщения в теме, то они не отображаются сразу в таблице последних сообщений с форума на сайте.
Решение:
###########################################################
Открыть файл /librari/XenForo/ModeratorLogHandler/Post.php
Найти:
После поставить:
#########
### 3 ####
#########
Предотвращение кеширования вывода информации об удаленной теме
То же самое что и выше... только в отношении тем.
####################################################
Открыть файл /librari/XenForo/ModeratorLogHandler/Thread.php
Найти:
После поставить такой же код, что и в примере выше:
В случае если не обновление модуля на сайте не заработало, то необходимо прописать абсолютный путь вручную, о чем было сказано выше.
После внесения всех необходимых изменений в файлы идем на сервере в папку кеша где установлен ваш DLE: /engine/cache/ и удаляем нафиг файл начинающийся с xf_topics_****куча букв***.tmp
После этого обновляем главную страницу сайта, где установлен блок вывода последних тем с форума и проверяем все еще раз.
После внесения изменений на форуме и обновлении страницы сайта информация в блоке должна меняться сразу.
#################################################################
#################################################################
Возможная замена кода от корня сайта прописанного вручную на автоматический вариант.
Их может быть несколько и некоторые из них могут не работать лично у вас.
Поскольку многое зависит от конкретных настроек у вашего хостера.
Лично у меня заработал только самый последний "универсальный " вариант кода.
Ну и жестко прописанный вручную - тоже.
Итак... жестко прописанный путь от корня сайта:
1
можно поменять на:
2
или на
3
или на
4
или на:
5
Если форум не в корне сайта или на поддомене, то это универсальный вариант.
Совет:
Если при создании ответа на вы получаете ошибку типа:
То попробуйте подобрать вариант кода из выше перечисленных.
В крайнем случае всегда можно жестко прописать код от корня вручную.
#################################################################
У кого проблема с кодировкой UTF и вывод производится в виде ?????????
#################################################################
Единственный вариант, который помог лично мне:
В файле run.php после строки:
вставить:
Решил запостить отдельную тему поскольку информации много.
За основу вывода на сайте DLE последних тем с форума который можно найти на форуме...
Основные вопросы по данному модулю касались:
- кеширования вывода информации
- отсутствия возможности указания форумов/тем которые не надо выводить в этом блоке
- нарушение кодировки в блоке вывода
Скачав архив вы найдете в нем измененный файл run.php
Остальные файлы я не трогал.
Копирайты не менял.
Установка
1
Поместить папку xf_topics по адресу: /engine/modules/xf_topics/
2
В шаблон main.tpl в нужное место вставьте следующий код:
{include file="/engine/modules/xf_topics/run.php"}.
Внесенные в файл модификации:
- Добавлены параметры для указания форумов и тем, которые должны быть исключены из показа на сайте в блоке последних тем.
Эти строки находятся в файле run.php:
PHP:
$config['blacklist']['categories'] = array(1,2); // id конкретного ФОРУМА который вы не хотите показывать в блоке на сайте. Дочерняя категория не выводятся также. (Дочерняя дочерней - выводится). Скобки могут быть пустыми
$config['blacklist']['threads'] = array(5,7); // id конкретной ТЕМЫ форума. Скобки могут быть пустыми
Модификации
#########
### 1 ####
#########
Модификация для предотвращения кеширования вывода последних тем и сообщений с форума на сайте.
#######################################################################################################################
Проблема:
Когда пользователь вносит изменения на форуме: создает темы, пишет посты... эта информация не сразу появляется на сайте.
Может пройти довольно много времени, прежде чем она появится в блоке.
Решение:
В одном из сообщений предлагалось просто закоментировать строку:
PHP:
if ($config['allow_cache'] != "yes") {$config['allow_cache'] = "yes";$is_change = true;}
А вот ниже приведенный вариант помог решить проблему:
###### 1 #####
В файле /library/XenForo/ControllerPublic/Thread.php ищем:
476 строка
PHP:
public function actionAddReply()
{
После фигурной скобки вставляем:
PHP:
//## Обновление последних постов.
$target = glob(__DIR__.'/engine/cache/xf_topics_*.tmp');
@unlink((string)$target[0]);
//## Конец
В файле /library/XenForo/ControllerPublic/Forum.php ищем:
583 строка
PHP:
public function actionAddThread()
{
PHP:
//## Обновление последних постов.
$target = glob(__DIR__.'/engine/cache/xf_topics_*.tmp');
@unlink((string)$target[0]);
//## Конец
#####################################
ЕСЛИ НЕ ЗАРАБОТАЛО
#####################################
Если ваш форум установлен в отдельной папке, на поддомене или выше приведенный вариант вдруг не сработал, то надо прописать абсолютный путь от корня сайта самостоятельно.
Т.е. вид строки:
PHP:
$target = glob(__DIR__.'/engine/cache/xf_topics_*.tmp');
PHP:
$target = glob('/ПУТЬ_ОТ_КОРНЯ_САЙТА/engine/cache/xf_topics_*.tmp');
Как узнать ваш абсолютный путь на сайте?
1
Спросить у хостера.
2
Узнать самому, а именно:
- надо создать файл php например с именем 1.php (или любым другим) с таким содержимым:
PHP:
<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>
У Вас недостаточно прав для просмотра ссылок.
Вход или Регистрация
или (если форум в папке)
У Вас недостаточно прав для просмотра ссылок.
Вход или Регистрация
Получаем искомый абсолютный путь от корня например такого вида:
/home/kurup/bobyor/moy_sait/public_html
и эту строку вставляем в наш код.
И получится что то типа такого:
PHP:
$target = glob('/home/kurup/bobyor/moy_sait/public_html/engine/cache/xf_topics_*.tmp');
Однако жестко прописанный путь не всегда есть хорошо.
Сегодня вы на одном хостинге - завтра на другом... что то забудется и в результате файл будет работать некорректно.
Так что можно подобрать "автоматический вариант" подстановки абсолютного пути...
Это правда займет больше времени и каждый раз надо будет удалять файл кеша пока идет настройка... но оно того стоит.
Ниже будет представлено несколько таких вариантов... можете поэксперементировать...
#########
### 2 ####
#########
Предотвращение кеширования вывода информации о количестве ответов в теме
Проблема:
если пользователи добавляют/удаляют сообщения в теме, то они не отображаются сразу в таблице последних сообщений с форума на сайте.
Решение:
###########################################################
Открыть файл /librari/XenForo/ModeratorLogHandler/Post.php
Найти:
PHP:
protected function _log(array $logUser, array $content, $action, array $actionParams = array(), $parentContent = null)
{
PHP:
//## Обновление последних постов.
$target = glob(__DIR__.'/engine/cache/xf_topics_*.tmp');
@unlink((string)$target[0]);
//## Конец
#########
### 3 ####
#########
Предотвращение кеширования вывода информации об удаленной теме
То же самое что и выше... только в отношении тем.
####################################################
Открыть файл /librari/XenForo/ModeratorLogHandler/Thread.php
Найти:
PHP:
protected function _log(array $logUser, array $content, $action, array $actionParams = array(), $parentContent = null)
{
PHP:
//## Обновление последних постов.
$target = glob(__DIR__.'/engine/cache/xf_topics_*.tmp');
@unlink((string)$target[0]);
//## Конец
После внесения всех необходимых изменений в файлы идем на сервере в папку кеша где установлен ваш DLE: /engine/cache/ и удаляем нафиг файл начинающийся с xf_topics_****куча букв***.tmp
После этого обновляем главную страницу сайта, где установлен блок вывода последних тем с форума и проверяем все еще раз.
После внесения изменений на форуме и обновлении страницы сайта информация в блоке должна меняться сразу.
#################################################################
#################################################################
Возможная замена кода от корня сайта прописанного вручную на автоматический вариант.
Их может быть несколько и некоторые из них могут не работать лично у вас.
Поскольку многое зависит от конкретных настроек у вашего хостера.
Лично у меня заработал только самый последний "универсальный " вариант кода.
Ну и жестко прописанный вручную - тоже.
Итак... жестко прописанный путь от корня сайта:
1
PHP:
//##Обновление последних постов.
$target = glob('/home/kurup/bobyor/moy_sait/public_html/engine/cache/xf_topics_*.tmp');
@unlink((string)$target[0]);
//##Конец
2
PHP:
//## Обновление последних постов.
$target = glob(__DIR__.'/engine/cache/xf_topics_*.tmp');
@unlink((string)$target[0]);
//## Конец
3
PHP:
//##Обновление последних постов.
$target = glob('../engine/xf_topics_*.tmp');
if(sizeof($target)==0) $target = glob('../WWW/engine/xf_topics_*.tmp');
if(sizeof($target)!=0)
@unlink((string)$target[0]);
//##Конец
4
PHP:
//##Обновление последних постов.
$target = glob($_SERVER['DOCUMENT_ROOT'].'/engine/xf_topics_*.tmp');
if(sizeof($target)==0) $target = glob(substr($_SERVER['DOCUMENT_ROOT'], 0, strlen(end(explode("/", $_SERVER['DOCUMENT_ROOT'])))*-1).'/WWW/engine/xf_topics_*.tmp');
if(sizeof($target)!=0)
@unlink((string)$target[0]);
//##Конец
или на универсальный вариант
5
PHP:
//##Обновление последних постов.
$target = glob($_SERVER['DOCUMENT_ROOT'].'/engine/xf_topics_*.tmp');
if(sizeof($target)==0)
{
$clearDom = explode("/", $_SERVER['DOCUMENT_ROOT']);
$target = glob(substr($_SERVER['DOCUMENT_ROOT'], 0, strlen(end($clearDom))*-1).'/WWW/engine/xf_topics_*.tmp');
}
if(sizeof($target)!=0)
@unlink((string)$target[0]);
//##Конец
Если форум не в корне сайта или на поддомене, то это универсальный вариант.
Совет:
Если при создании ответа на вы получаете ошибку типа:
PHP:
XenForo_Application::handlePhpError() in XenForo/ControllerPublic/Thread.php at line 484
XenForo_ControllerPublic_Thread->actionAddReply() in XenForo/FrontController.php at line 347
XenForo_FrontController->dispatch() in XenForo/FrontController.php at line 134
XenForo_FrontController->run() in /home/kurup/bobyor/moy_sait/public_html/forum/index.php at line 13
В крайнем случае всегда можно жестко прописать код от корня вручную.
#################################################################
У кого проблема с кодировкой UTF и вывод производится в виде ?????????
#################################################################
Единственный вариант, который помог лично мне:
В файле run.php после строки:
PHP:
mysql_select_db($config['db']['dbname']);
PHP:
mysql_query("SET NAMES 'utf8'");