форум vBSupport.ru > vBulletin > Вопрос — Ответ
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Fluder
Простоузер
 
Fluder's Avatar
Default [FAQ] Создание темы прямым запросом..
0

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

Поковырявшись в сорцах newthread.php я пришёл в ужас (без пол литры не разберёш )
Т.е мне нужно передать инфу со своей страницы а не по средствам кнопки "создать новую тему". Ребят помогите плиз, если это обсуждалось тогда дико извиняюсь, но пока не нашёл.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
sequence
На пенсии
 
sequence's Avatar
Cool
23

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

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

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

Как не странно но там не на много сложнее только делается не через методы объекта, а через массив и одну ф-ю насколько я помню. Проблема в том что у меня уже нет 3.0.х а по памяти врятли напишу.
Если даш ссылку могу написать чё к чему.
 
 
DiNo
Простоузер
Question
0

Quote:
Originally Posted by sequence
PS Если для дальнейшей работы скрипта нам потребуется данные о только что созданной теме, то её индификатор treadid можно получить заменив
PHP Code:
$new_treadid $threaddm->save(); 
Добавление работает. Спасибо.
Объясните по человечески как получить индификатор темы. ЧТо на что менять?
 
 
sequence
На пенсии
 
sequence's Avatar
Default
0

$threaddm->save(); - возвращает индификатор темы
 
 
KlyXa
Простоузер
Default
0

Слых а почему когда я сделал все как ты писал выдает форум строку

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

хотя я просто копировал $threaddm->do_set('allowsmilie', ''); че за?
 
 
atomar
Продвинутый
 
atomar's Avatar
Default
0

sequence, большое спасибо за объяснения.

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

PHP Code:
<?
$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 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
Простоузер
 
GTR's Avatar
Default
0

Вообщем то я просто поставил параметр allowsmiles необязательным
PHP Code:
Фаил class_dm_threadpost.php
 
class vB_DataManager_Thread_FirstPost extends vB_DataManager_Thread
...
'allowsmilie'   => array(TYPE_UINTREQ_NO)
... 
А вот еще получилось так, что тема то создается, а информация в форуме о состоянии не обновляется, т.е. ни последний пост, ни кол-во тем, ни кол-во сообщений не меняяется.

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

PHP Code:
 
//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(); 
Но это что касается информации о форуме, но еще остается информация о юзере, которая делается подобным макаром.
 
 
GRIF666
Продвинутый
 
GRIF666's Avatar
Default
0

А как создать сообщение в уже существующей теме???
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 08:08 AM.


Powered by vBulletin® Version 3.6.6
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.