Студия креативных разработок DevArt.PRO.
Разработка сайтов и форумов под ключ!
Сильнейшая команда в России по vBulletin - читать подробнее...
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > Вопрос — Ответ > Вопрос — Ответ

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 26.11.2005, 23:09   #1
Простоузер
 
Аватар для Fluder
[FAQ] Создание темы прямым запросом..

Вот такая вот трабла:
Имеется свой движок, и комментарии хочется сделать на вобле. То есть при создании поста на моей страничке, параллельно создавалась тема и сообщение в самой вобле.

Поковырявшись в сорцах newthread.php я пришёл в ужас (без пол литры не разберёш )
Т.е мне нужно передать инфу со своей страницы а не по средствам кнопки "создать новую тему". Ребят помогите плиз, если это обсуждалось тогда дико извиняюсь, но пока не нашёл.
  Ответить с цитированием
Рекламка
Реклама на форуме

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 27.11.2005, 00:36   #2
sequence
Гуру
 
Аватар для sequence
Cool

Ничего сложного...
Итак перед нами стоит задача создать тему на форуме из скрипта вне пределов движка.

При решении данной задачи мы момжем пойти двумя путями:
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($vbulletinERRTYPE_STANDARD);
 
$forumid 2// индификатор раздела в котором будет создана тема
$postuserid 1//пользователь от которого будет создана тема
$userid 1//пользователь от которого будет создано сообщение
$username 'Sequence'//имя пользователя, которое будет отображатся в списке тем
$pagetext 'Сообщение тут';
$title 'Заголовок тут';
$visible '1'
прошу обратить внимание на переменные $postuserid и $userid. Можно записывать темы и сообщения на разных пользователей. Поэксперементируйте и сами решите надо это вам или нет.

Шаг три. Создаем объект и сохраняем изменения:
PHP код:
$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(); 
дополнительными параметрами при создании могут быть
PHP код:
$threaddm->do_set('allowsmilie'''); //включить смайлики, значения 1/0
$threaddm->do_set('dateline'''); //время создания темы, переменная типа timestamp
$threaddm->do_set('views'''); //количество просмотров темы
$threaddm->do_set('open'''); //закрытая тема 0, открытая 1 
Собственно всё... тема созданна!
Единственное что осталось сделать - это обновить счетчик новых тем.
PHP код:
require_once('./includes/functions_databuild.php'); 
build_forum_counters($forumid);
 
chdir($cwd); //конец, возвращаем рабочую директорию скрипта обратно 
PS Если для дальнейшей работы скрипта нам потребуется данные о только что созданной теме, то её индификатор treadid можно получить заменив
PHP код:
$new_treadid $threaddm->save(); 
  Ответить с цитированием
Сказали Спасибо:
Скрыть список поблагодаривших

5oro5 (16.04.2008), atomar (16.04.2006), a_aqua (12.08.2009), coldair (24.01.2010), Cyxapeff (04.12.2005), deex (27.01.2008), DokToP (01.06.2010), eugenek (23.12.2006), Fluder (28.11.2005), intolerance (01.03.2006), IvanDraga (11.04.2011), jcuken (11.04.2006), KapriZz (01.06.2010), Nemo7 (27.04.2006), SAS1024 (11.07.2006), SMak044 (02.11.2009), snoopi (13.09.2010), Yurets (05.06.2008), Zeves (28.11.2005), ZTX18 (29.01.2010), андэд (01.03.2006)
Старый 27.11.2005, 12:31   #3
Fluder
Простоузер
 
Аватар для Fluder
Спасибки , сейчас буду пробовать ..



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.. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 04.12.2005, 18:02   #4
vGhost
Продвинутый
Как не странно но там не на много сложнее только делается не через методы объекта, а через массив и одну ф-ю насколько я помню. Проблема в том что у меня уже нет 3.0.х а по памяти врятли напишу.
Если даш ссылку могу написать чё к чему.
  Ответить с цитированием
Старый 01.03.2006, 01:24   #5
DiNo
Простоузер
Question

Цитата:
Сообщение от sequence
PS Если для дальнейшей работы скрипта нам потребуется данные о только что созданной теме, то её индификатор treadid можно получить заменив
PHP код:
$new_treadid $threaddm->save(); 
Добавление работает. Спасибо.
Объясните по человечески как получить индификатор темы. ЧТо на что менять?
  Ответить с цитированием
Старый 01.03.2006, 09:41   #6
sequence
Гуру
 
Аватар для sequence
$threaddm->save(); - возвращает индификатор темы
  Ответить с цитированием
Старый 15.04.2006, 18:44   #7
KlyXa
Простоузер
Слых а почему когда я сделал все как ты писал выдает форум строку

Требуемое поле allowsmilie пропущено, или введено некорректное значение.

хотя я просто копировал $threaddm->do_set('allowsmilie', ''); че за?
  Ответить с цитированием
Старый 16.04.2006, 23:18   #8
atomar
Продвинутый
 
Аватар для atomar
sequence, большое спасибо за объяснения.

Я создал файл save.php, и написал в него следующее:

PHP код:
<?
$cwd 
getcwd(); //запоминаем нашу текущую директорию

chdir('../forum2'); //переходим в директорию форума (путь относительно 

исполняемого скрипта)
require_once(
'./global.php');
require_once(
'./includes/class_dm.php');
require_once(
'./includes/class_dm_threadpost.php'); 

$threaddm = new vB_DataManager_Thread_FirstPost($vbulletinERRTYPE_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


Кто-нибудь знает из-за чего это может быть и как решить?
  Ответить с цитированием
Старый 26.04.2006, 13:25   #9
GTR
Простоузер
 
Аватар для GTR
Вообщем то я просто поставил параметр allowsmiles необязательным
PHP код:
Фаил class_dm_threadpost.php
 
class vB_DataManager_Thread_FirstPost extends vB_DataManager_Thread
...
'allowsmilie'   => array(TYPE_UINTREQ_NO)
... 
А вот еще получилось так, что тема то создается, а информация в форуме о состоянии не обновляется, т.е. ни последний пост, ни кол-во тем, ни кол-во сообщений не меняяется.

Покопался в классах - чето не понял где там что для обновления информации, решил просто переписывать базу.

PHP код:
 
//after -------------- $new_treadid = $threaddm->save(); --------------------
 
//$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';

$R mysql_query($query$L);

$row mysql_fetch_array($R);
$row["replycount"]++;
$row["threadcount"]++;
 
// Получили последние данные у форума
 
$query 'UPDATE `'.$np_vbb_pref.'forum` SET 
  `replycount`='
.$row["replycount"].', 
  `threadcount`='
.$row["threadcount"].', 
  `lastpost`='
.time().',
  `lastposter`=\''
.$username.'\',
  `lastthread`=\''
.$title.'\',
  `lastthreadid`='
.$new_treadid.'
  WHERE `forumid` = '
.$forumid.'
  ;'
;
$R mysql_query($query$L); // сообтвенно обновили информацию о состоянии форума.
 
mysql_close(); 
Но это что касается информации о форуме, но еще остается информация о юзере, которая делается подобным макаром.
  Ответить с цитированием
Старый 10.05.2006, 06:04   #10
GRIF666
Продвинутый
 
Аватар для GRIF666
А как создать сообщение в уже существующей теме???
  Ответить с цитированием
Ответ

Закладки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 11:35 24.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 4.0.fuck
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot