VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Вопрос к гуру vBulletin - есть ли возможность "вытащить" содержимое определенного поста (или хотя бы первого поста в ветке), с сохранением форматирования (в html, конечно), удаленно, в PHP-скрипте.
Цель - "грабим" конкретные посты с централизованного форума и выводим их в виде "статей" на тематических подсайтах. Пример: редактор раздела на форуме собирает в первом посте одной ветки очень полезный список ссылок на что-то. По этому разделу есть тематический подсайт, на котором тоже было было очень полезно разместить этот пост. Чтобы не перепечатывать постоянно пост, лучше было бы вытаскивать его автоматически из форума.
У меня есть возможность делать запросы напрямую в БД форума, но как при этом сохранить форматирование и обработку BB-кодами (движком vBulletin)?
vbulletin сохраняет отпарсенные посты с html-разметкой в некой дополнительной таблице, к которой ты уже потом обращаешься в скриптах на сайтах;
сайт обращается не к базе напрямую, а скачивает страницу "shopost.php?p=POSTID", из которой удаляет "лишнее".
первый вариант предпочтительнее и вобщем-то vbulletin даже реализует его частично -- сохраняет отпарсенный текст в таблице postparsed, но время хранения ограничено (см. настройки) и не все bb-коды обработаны (картинки, например, или вложения, т.е. то, к чему настраивается индивидуальный доступ или формат отображения). можешь просто время от времени копировать из этой таблицы определенные посты в другую, а потом в скрипте на сайте выбирать из нее.
@marazmus
Простоузер
Join Date: Apr 2008
Posts: 6
Reputation:
Novice 1
Репутация в разделе: 1
0
Спасибо большое, как-то я забыл про showpost.php
Выход, наверное, такой - забирать пост через file_get_contents(), потом выдирать оттуда кусок с постом и печатать только его...
@Ghost
Гуру
Join Date: Feb 2008
Posts: 983
Версия vB: 3.8.1
Reputation:
Гуру 1011
Репутация в разделе: 893
1
Quote:
Originally Posted by marazmus
Выход, наверное, такой - забирать пост через file_get_contents(), потом выдирать оттуда кусок с постом и печатать только его...
если тебя этот вариант устраивает, то можно обойтись даже без обработки полученной страницы -- просто обращайся к скрипту с дополнительным параметром, например "showpost.php?p=POSTID&onlytext=1", а на хук "showpost_complete" повесь модуль типа такого
PHP Code:
if (isset($_REQUEST['onlytext']) AND $_REQUEST['onlytext'] == '1')
{
print_output($post['message']);
}
@RouR
Простоузер
Join Date: Oct 2006
Posts: 38
Версия vB: 4.1.10
Reputation:
Novice 3
Репутация в разделе: 1
1
Quote:
Originally Posted by marazmus
Здравствуйте.
У меня есть возможность делать запросы напрямую в БД форума, но как при этом сохранить форматирование и обработку BB-кодами (движком vBulletin)?
Копать тут:
Code:
require_once('./global.php');
require_once( './includes/class_bbcode.php');
$bbcode_parser =& new vB_BbCodeParser($vbulletin, fetch_tag_list());
require_once "config.php";
$link=mysql_connect($hostname,$username,$password) or die("Нету доступа к БД");
mysql_select_db($dbforum,$link) or die("Нету БД");
$/* sql_query = mysql_query(
"SELECT `threadid`, `title`, `firstpostid`, `replycount`, `postusername`, `dateline` FROM `".$dbprefix."thread` WHERE $wherenews ORDER BY `dateline` DESC LIMIT 0 , 30") or die("Sorry wrong SQL Query1");*/
$sql_query = mysql_query("SELECT `pagetext` FROM `".$dbprefix."post` WHERE `postid`=".$tmp1[2]) or die("Sorry wrong SQL Query2");
$tmp2 = mysql_fetch_row($sql_query);
echo $bbcode_parser->parse(unhtmlspecialchars(fetch_censored_text( $tmp2[0] )), 'nonforum', true);
@Ghost
Гуру
Join Date: Feb 2008
Posts: 983
Версия vB: 3.8.1
Reputation:
Гуру 1011
Репутация в разделе: 893
0
RouR, я так понимаю, проблема у автора темы заклбчается как раз в том, что сайты работают на других движках, не на вобле -- т.е. доступа к вобловским скриптам нету.
@marazmus
Простоузер
Join Date: Apr 2008
Posts: 6
Reputation:
Novice 1
Репутация в разделе: 1
0
Quote:
Originally Posted by Ghost
если тебя этот вариант устраивает, то можно обойтись даже без обработки полученной страницы -- просто обращайся к скрипту с дополнительным параметром, например "showpost.php?p=POSTID&onlytext=1", а на хук "showpost_complete" повесь модуль типа такого
PHP Code:
if (isset($_REQUEST['onlytext']) AND $_REQUEST['onlytext'] == '1')
{
print_output($post['message']);
}
Прикольный вариант
Тогда еще по пути вопрос - я знаю, что такое хук, но воблу купил совсем недавно, и не знаю пока структуру скриптов и хуков. Как обычно прописываются такие вещи? Я постараюсь сам разобраться, конечно, возьму какой-нибудь модуль, который работает через хуки, но совет, в какую сторону копать, не помешал бы. Спасибо
marazmus добавил 15.10.2009 в 14:41
Quote:
Originally Posted by Ghost
RouR, я так понимаю, проблема у автора темы заклбчается как раз в том, что сайты работают на других движках, не на вобле -- т.е. доступа к вобловским скриптам нету.
Да, движки другие, Drupal в основном.
Но проблемы доступа к вобловским скриптам не должно быть, так как все поддомены и центральный сайт работают из-под одного апачевского юзера.
Попробую покурить и этот вариант тоже, спасибо
marazmus добавил 15.10.2009 в 14:44
В принципе, можно попробовать "гибридный" вариант - в корень воблы положить php-файл (чтобы не было проблем с инклюдами вобловских скриптов), в нем прописать рецепт камрада RouR. Потом дергать этот скрипт из других скриптов через file_get_contents(), в качестве параметра в GET отдавать ID поста...
Last edited by marazmus : 10-15-2009 at 03:44 PM.
Reason: Добавлено сообщение
@Ghost
Гуру
Join Date: Feb 2008
Posts: 983
Версия vB: 3.8.1
Reputation:
Гуру 1011
Репутация в разделе: 893
2
Quote:
Originally Posted by marazmus
возьму какой-нибудь модуль, который работает через хуки, но совет, в какую сторону копать, не помешал бы
совет -- взять какой-нибудь модуль и разобраться в его действии. это самый оптимальный вариант. там все достаточно просто -- в скриптах разбросаны специальные команды для вызовов модулей. каждое такое место имеет свое имя. в админке ты можешь создать свой скрипт и привязать его к одной из таких точек, указав ее имя -- указанный тобой код будет всегда выполняться в этой точке скрипта функцией eval. можешь к одной точке привязать несколько модулей, тогда выполняться они в порядке их создания. или можешь указать жестко там же в админке порядок выполнения. имена у хуков достаточно прозрачные. например тот, что я тебе указал: showpost_complete -- точка успешного завершения (complete) скрипта showpost.php. где какой хук расположен можешь посмотреть в самих скриптах -- ищи команды вида
Понятно, спасибо за подробные ответы, видно настоящих спецов. Пойду попробую что-нибудь сделать, потом постараюсь отписать, что получилось
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1705
Репутация в разделе: 1190
2
У меня была похожая задача, вывести содержание первого поста темы в таб на первой странице в vba. пример
Покопавшись нашел файлик пхп, который выводит статью блога и переделал его для показа статьи из форума.
Посмотри может поможет как.