VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Вот такая вот трабла:
Имеется свой движок, и комментарии хочется сделать на вобле. То есть при создании поста на моей страничке, параллельно создавалась тема и сообщение в самой вобле.
Поковырявшись в сорцах newthread.php я пришёл в ужас (без пол литры не разберёш )
Т.е мне нужно передать инфу со своей страницы а не по средствам кнопки "создать новую тему". Ребят помогите плиз, если это обсуждалось тогда дико извиняюсь, но пока не нашёл.
Ничего сложного... Итак перед нами стоит задача создать тему на форуме из скрипта вне пределов движка.
При решении данной задачи мы момжем пойти двумя путями:
1. С помощью скрипта вставить данные о новой теме непосредственно в базу
2. Использовать встроенные функции движка для создания темы.
тут собственно изобретать велосипед не строит правильный ответ пункт 1
Шаг первый, нам необходимо инициализировать в скрипте все необходимые нам переменные, объекты и функции форума.
для этого создаем такой код
PHP Code:
$cwd = getcwd(); //запоминаем нашу текущую директорию chdir('./forum'); //переходим в директорию форума (путь относительно исполняемого скрипта) require_once('./global.php'); require_once('./includes/class_dm.php'); require_once('./includes/class_dm_threadpost.php');
В vbulletin существует специальный объект "Новая тема форума" который создается при помощи vB_DataManager_Thread_FirstPost()
Шаг второй, создаем объект и необходимые нам данные
PHP Code:
$threaddm = new vB_DataManager_Thread_FirstPost($vbulletin, ERRTYPE_STANDARD);
$forumid = 2; // индификатор раздела в котором будет создана тема $postuserid = 1; //пользователь от которого будет создана тема $userid = 1; //пользователь от которого будет создано сообщение $username = 'Sequence'; //имя пользователя, которое будет отображатся в списке тем $pagetext = 'Сообщение тут'; $title = 'Заголовок тут'; $visible = '1';
прошу обратить внимание на переменные $postuserid и $userid. Можно записывать темы и сообщения на разных пользователей. Поэксперементируйте и сами решите надо это вам или нет.
chdir($cwd); //конец, возвращаем рабочую директорию скрипта обратно
PS Если для дальнейшей работы скрипта нам потребуется данные о только что созданной теме, то её индификатор treadid можно получить заменив
PHP Code:
$new_treadid = $threaddm->save();
@Fluder
Простоузер
Join Date: Sep 2005
Posts: 3
Reputation:
Novice 0
Репутация в разделе: 0
0
Спасибки , сейчас буду пробовать ..
require_once('./includes/class_dm.php');
require_once('./includes/class_dm_threadpost.php');
этих файлов в 3.09 нету. Этот вариант для 3.5? Если да подскажите вариант для 3.0*
Буду очень благодарен..
Last edited by Fluder : 11-28-2005 at 01:56 AM.
Reason: Добавлено сообщение
Как не странно но там не на много сложнее только делается не через методы объекта, а через массив и одну ф-ю насколько я помню. Проблема в том что у меня уже нет 3.0.х а по памяти врятли напишу.
Если даш ссылку могу написать чё к чему.
@DiNo
Простоузер
Join Date: Sep 2005
Posts: 1
Reputation:
Novice 0
Репутация в разделе: 0
0
Quote:
Originally Posted by sequence
PS Если для дальнейшей работы скрипта нам потребуется данные о только что созданной теме, то её индификатор treadid можно получить заменив
PHP Code:
$new_treadid = $threaddm->save();
Добавление работает. Спасибо.
Объясните по человечески как получить индификатор темы. ЧТо на что менять?
@sequence
На пенсии
Join Date: Aug 2005
Location: Сибирь
Posts: 269
Версия vB: 3.6.x
Reputation:
Гуру 430
Репутация в разделе: 376
0
$threaddm->save(); - возвращает индификатор темы
@KlyXa
Простоузер
Join Date: Apr 2006
Posts: 2
Reputation:
Lamer -3
Репутация в разделе: -3
0
Слых а почему когда я сделал все как ты писал выдает форум строку
Требуемое поле allowsmilie пропущено, или введено некорректное значение.
хотя я просто копировал $threaddm->do_set('allowsmilie', ''); че за?
@atomar
Продвинутый
Join Date: Mar 2006
Location: Уругвай
Posts: 285
Версия vB: 3.8.x
Reputation:
Опытный 59
Репутация в разделе: 51
0
sequence, большое спасибо за объяснения.
Я создал файл save.php, и написал в него следующее:
$threaddm = new vB_DataManager_Thread_FirstPost($vbulletin, ERRTYPE_STANDARD);
$forumid = 2; // индификатор раздела в котором будет создана тема
$postuserid = 1; //пользователь от которого будет создана тема
$userid = 1; //пользователь от которого будет создано сообщение
$username = 'atomar'; //имя пользователя, которое будет отображатся в списке тем
$pagetext = 'Сообщение тут';
$title = 'Заголовок тут';
$visible = '1';
$threaddm->do_set('forumid', $forumid);
$threaddm->do_set('postuserid', $postuserid);
$threaddm->do_set('userid', $userid);
$threaddm->do_set('username', $username);
$threaddm->do_set('pagetext', $pagetext);
$threaddm->do_set('title', $title);
$threaddm->do_set('visible', $visible);
$threaddm->save();
?>
Но выдавало ошибку: A required field called allowsmilie is missing or has an invalid value.
Тогда я перед
PHP Code:
$threaddm->save();
добавил строку:
PHP Code:
$threaddm->do_set('allowsmilie', 1);
И мне выдало такую ошибку: Notice: Undefined index: HTTP_REFERER in s:\home\152.123.83.42\www\forum2\includes\class_core.php on line 1574
Fatal error: Cannot pass parameter 2 by reference in s:\home\152.123.83.42\www\forum2\save.php on line 25
Кто-нибудь знает из-за чего это может быть и как решить?
@GTR
Простоузер
Join Date: Apr 2006
Posts: 4
Reputation:
Novice 0
Репутация в разделе: 0
0
Вообщем то я просто поставил параметр allowsmiles необязательным
PHP Code:
Фаил class_dm_threadpost.php
class vB_DataManager_Thread_FirstPost extends vB_DataManager_Thread ... 'allowsmilie' => array(TYPE_UINT, REQ_NO) ...
А вот еще получилось так, что тема то создается, а информация в форуме о состоянии не обновляется, т.е. ни последний пост, ни кол-во тем, ни кол-во сообщений не меняяется.
Покопался в классах - чето не понял где там что для обновления информации, решил просто переписывать базу.
//$forumid = 2; // индификатор раздела в котором будет создана тема //$postuserid = 1; //пользователь от которого будет создана тема //$userid = 1; //пользователь от которого будет создано сообщение //$username = 'Newser'; //имя пользователя, которое будет отображатся в списке тем //$title = 'Заголовок тут'; //$new_treadid = $threaddm->save(); // идентификатор созданой темы
// ----------------------------- Собственно начало ------------------------------- // Имеется в виду что вы подключили БД с форумом и находитесь в // базе форума
$np_vbb_pref = 'vbb_'; // устанавливаем, какие префиксы в БД используются форумом
$query = 'SELECT `replycount`,`threadcount` FROM `'.$np_vbb_pref.'forum` WHERE `forumid` = '.$forumid.' LIMIT 1';