Вот такая вот трабла:
Имеется свой движок, и комментарии хочется сделать на вобле. То есть при создании поста на моей страничке, параллельно создавалась тема и сообщение в самой вобле.
Поковырявшись в сорцах newthread.php я пришёл в ужас (без пол литры не разберёш )
Т.е мне нужно передать инфу со своей страницы а не по средствам кнопки "создать новую тему". Ребят помогите плиз, если это обсуждалось тогда дико извиняюсь, но пока не нашёл.
Ничего сложного... Итак перед нами стоит задача создать тему на форуме из скрипта вне пределов движка.
При решении данной задачи мы момжем пойти двумя путями:
1. С помощью скрипта вставить данные о новой теме непосредственно в базу
2. Использовать встроенные функции движка для создания темы.
тут собственно изобретать велосипед не строит правильный ответ пункт 1
Шаг первый, нам необходимо инициализировать в скрипте все необходимые нам переменные, объекты и функции форума.
для этого создаем такой код
PHP код:
$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 код:
$threaddm = new vB_DataManager_Thread_FirstPost($vbulletin, ERRTYPE_STANDARD);
$forumid = 2; // индификатор раздела в котором будет создана тема $postuserid = 1; //пользователь от которого будет создана тема $userid = 1; //пользователь от которого будет создано сообщение $username = 'Sequence'; //имя пользователя, которое будет отображатся в списке тем $pagetext = 'Сообщение тут'; $title = 'Заголовок тут'; $visible = '1';
прошу обратить внимание на переменные $postuserid и $userid. Можно записывать темы и сообщения на разных пользователей. Поэксперементируйте и сами решите надо это вам или нет.
require_once('./includes/class_dm.php');
require_once('./includes/class_dm_threadpost.php');
этих файлов в 3.09 нету. Этот вариант для 3.5? Если да подскажите вариант для 3.0*
Буду очень благодарен..
Последний раз редактировалось Fluder; 28.11.2005 в 00:56..
Причина: Добавлено сообщение
Как не странно но там не на много сложнее только делается не через методы объекта, а через массив и одну ф-ю насколько я помню. Проблема в том что у меня уже нет 3.0.х а по памяти врятли напишу.
Если даш ссылку могу написать чё к чему.
$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 код:
$threaddm->save();
добавил строку:
PHP код:
$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
Кто-нибудь знает из-за чего это может быть и как решить?
Вообщем то я просто поставил параметр allowsmiles необязательным
PHP код:
Фаил 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';