[FAQ] Как программно добавить тему / пост / личное сообщение

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
AlexSport
phpBB 1.4.0
Сообщения: 30
Зарегистрирован: 30.03.2010 8:37
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 2 раза
Контактная информация:

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение AlexSport » 13.05.2011 23:54

Добрый день! Подскажите пожалуйста, как сделать так, чтобы автор темы или авторы последующих сообщений были подписан на создаваемую или продолжаемую тему? Есть подозрение, что нужно добавить некую строчку в массив $data...

Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 2700
Зарегистрирован: 19.03.2009 17:43
Благодарил (а): 17 раз
Поблагодарили: 938 раз

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение Nekstati » 14.05.2011 4:02

Подписка на новые темы

Я знаю волшебную кнопку, я знаю тайную кнопку, она наверху, она всегда тут, она всем видна, но её никто не замечает…

Аватара пользователя
HAMMER663
Former team member
Сообщения: 2028
Зарегистрирован: 17.04.2010 12:59
Откуда: Зеленоград
Благодарил (а): 71 раз
Поблагодарили: 245 раз
Контактная информация:

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение HAMMER663 » 13.07.2011 21:26

вот создал я тему программно, теперь нужно сделать редирект на созданное сообщение, покопался в постинг.пхп и нашел такое (немного подправил для себя)

Код: Выделить всё

		$meta_info = ($mode == 'post') ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) : append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id");

		$my_text = $user->lang['POST_SENT'] . '<br /><br />' . sprintf($user->lang['RETURN_SEND_POST'], '<a href="' . $meta_info . '">', '</a>');
        meta_refresh(3, $meta_info);
        trigger_error($my_text);
но возвращает на такую страницу
/viewtopic.php?f&t
что еще нужно добавить?
нужно взять forum_id и topic_id
но не пойму.. подскажите

TomAlex
phpBB 1.4.4
Сообщения: 117
Зарегистрирован: 21.02.2011 15:23
Благодарил (а): 2 раза
Поблагодарили: 20 раз

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение TomAlex » 14.07.2011 10:49

Если верить: http://phpbbmodders.net/articles/3.0/create_post/
So after submitting the post, you can access the post id using $data['post_id'].
Когда такая задача стояла передо мной, я тупо читал таблицу posts.

Аватара пользователя
HAMMER663
Former team member
Сообщения: 2028
Зарегистрирован: 17.04.2010 12:59
Откуда: Зеленоград
Благодарил (а): 71 раз
Поблагодарили: 245 раз
Контактная информация:

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение HAMMER663 » 14.07.2011 18:46

TomAlex можно немного поподробнее, пожалуйста))

TomAlex
phpBB 1.4.4
Сообщения: 117
Зарегистрирован: 21.02.2011 15:23
Благодарил (а): 2 раза
Поблагодарили: 20 раз

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение TomAlex » 14.07.2011 19:10

Перед тем, как вызвать submit_post(), вы заполняете несколько структур, в том числе и массив, который в примерах чаще всего обозначается $data.
В цитируемой статье утверждается, что после вызова submit_post в поле 'post_id' содержится идентификатор сообщения.

Упс! Прошу прощения! Я не обратил внимания, что ван нужен идентификатор темы, а не сообщения!
Все равно, в таком случае стоит попытаться прочитать $data['topic_id']
А forum_id Вы задавали явно, когда готовили данные для вызова submit_post

Или я не понял вопроса?

Аватара пользователя
HAMMER663
Former team member
Сообщения: 2028
Зарегистрирован: 17.04.2010 12:59
Откуда: Зеленоград
Благодарил (а): 71 раз
Поблагодарили: 245 раз
Контактная информация:

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение HAMMER663 » 14.07.2011 20:01

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

Код: Выделить всё

        submit_post('post', $my_subject, '', POST_NORMAL, $poll, $data);
		
		$meta_info = ($mode == 'post') ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) : append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id");

		$my_text = $user->lang['POST_SENT'] . '<br /><br />' . sprintf($user->lang['RETURN_SEND_POST'], '<a href="' . $meta_info . '">', '</a>');
		
        meta_refresh(3, $meta_info);
        trigger_error($my_text);
вот куда тут вставить $data['topic_id'] ?
Вот это почему-то не работает

Код: Выделить всё

$meta_info = ($mode == 'post') ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id) : append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id");

TomAlex
phpBB 1.4.4
Сообщения: 117
Зарегистрирован: 21.02.2011 15:23
Благодарил (а): 2 раза
Поблагодарили: 20 раз

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение TomAlex » 14.07.2011 23:27

HAMMER663 писал(а):куда тут вставить $data['topic_id']
вместо $topic_id
и $data['forum_id'] вместо $forum_id

Аватара пользователя
HAMMER663
Former team member
Сообщения: 2028
Зарегистрирован: 17.04.2010 12:59
Откуда: Зеленоград
Благодарил (а): 71 раз
Поблагодарили: 245 раз
Контактная информация:

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение HAMMER663 » 15.07.2011 15:25

Код: Выделить всё

[error] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /forum/link.php on line 95
при замене получа вот такую ошибку в эррор логе

Добавлено спустя 3 минуты 31 секунду:
Re: [FAQ] Как программно добавить тему / пост / личное сообщение
а вот так работает

Код: Выделить всё

$meta_info = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f={$data['forum_id']}&t={$data['topic_id']}");

Exn
phpBB 1.0.0
Сообщения: 3
Зарегистрирован: 24.06.2010 18:59

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение Exn » 23.07.2011 2:44

Будьте добры, подскажите, каким образом можно отправить пользователю ЛС, при это не используя и не подключая стандартные функции phpBB?
Вот тему, например, можно создать примерно так:

Код: Выделить всё

...
$sql = mysql_query("SELECT * FROM `phpbb_users` WHERE user_id = $author");
$dp = mysql_fetch_object($sql);
$topicfirstpostername = $dp -> username;
$topicfirstpostercolour = $dp -> user_colour;
$userip = $dp -> user_ip;
$timenow = time();
$pheadline = 'Заголовок';
$ptext = 'Текст';

mysql_query("INSERT INTO `phpbb_topics` (forum_id, topic_title, topic_poster, topic_time, topic_first_poster_name, topic_first_poster_colour, topic_last_poster_id, topic_last_poster_name, topic_last_poster_colour, topic_last_post_time, topic_last_view_time, topic_last_post_subject, topic_type) VALUES (51, '$pheadline', $author, $timenow, '$topicfirstpostername', '$topicfirstpostercolour', $author, '$topicfirstpostername', '$topicfirstpostercolour', $timenow, $timenow, '$pheadline', 1)");

$topic_id = mysql_insert_id(); 

mysql_query("INSERT INTO `phpbb_posts` (topic_id, forum_id, poster_id, post_time, poster_ip, enable_sig, post_text, post_subject) VALUES ($topic_id, 51, $author, $timenow, '$userip', 1, '$ptext', '$pheadline')"); 

$post_id = mysql_insert_id(); 

mysql_query("UPDATE `phpbb_topics` SET topic_first_post_id = $post_id, topic_last_post_id = $post_id WHERE topic_id = $topic_id"); 

mysql_query("UPDATE `phpbb_users` SET user_lastvisit = $timenow, user_posts = (user_posts + 1) WHERE user_id = $author"); 

mysql_query("UPDATE `phpbb_forums` SET forum_posts = (forum_posts + 1), forum_topics = (forum_topics + 1), forum_topics_real = (forum_topics_real +1), forum_last_post_subject = '$pheadline', forum_last_post_id = $post_id, forum_last_post_time = $timenow, forum_last_poster_id = $author, forum_last_poster_name = '$topicfirstpostername', forum_last_poster_colour = '$topicfirstpostercolour' WHERE forum_id = 51");
Однако с ЛС всё сложнее. В особенности неясно с таблице 'phpbb_privmsgs_to' (поле 'folder_id'). Буду рад, если кто-нибудь направит в верном направлении.

P.S. Использовать вариант с подключением стандартных функций не хочется, потому что придётся начинать новую сессию; плюс ко всему, ИМХО, незачем такое количество лишнего кода в стороннем скрипте...

farad
phpBB 1.0.0
Сообщения: 3
Зарегистрирован: 13.11.2011 0:00

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение farad » 13.11.2011 0:16

Код: Выделить всё

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
	
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require_once($phpbb_root_path . 'common.' . $phpEx);
require_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx);

// Start session management
$user->session_create( 54, true, false, false);
$auth->acl($user->data);
$user->setup();


$my_subject = utf8_normalize_nfc('Название темы');
$my_text = utf8_normalize_nfc('Текст');

$submit = (isset($_POST['submit'])) ? true : false;

// variables to hold the parameters for submit_post
$poll = $uid = $bitfield = $options = ''; 

//generate_text_for_storage($my_subject, $uid, $bitfield, $options, false, false, false);
//generate_text_for_storage($post_text, $uid, $bitfield, $options, true, true, true);
		
$data = array( 
	'forum_id' 		=> 2,
	'topic_id' 		=> '',
	'icon_id' 		=> false,
	'enable_bbcode' 	=> true,
	'enable_smilies' 		=> true,
	'enable_urls' 		=> true,
	'enable_sig' 		=> true,
	'from_user_id' 		=> $user->data['user_id'],
	'from_username' 	=> $user->data['username'],
	'from_user_ip' 		=> $user->data['user_ip'],
	'message' 		=> $my_text,
	'message_md5' 		=> md5($my_text),
	'bbcode_bitfield' 	=> $bitfield,
	'bbcode_uid' 		=> $uid,
	'post_edit_locked' 	=> 0,
	'topic_title' 		=> $my_subject,
	'notify_set' 		=> false,
	'notify' 			=> false,
	'post_time' 		=> 0,
	'forum_name' 		=> '',
	'enable_indexing' 	=> true,
	);
submit_post('post', $my_subject, '', POST_NORMAL, $poll, $data);
$user->session_kill();
?>
При таком коде создается 2 темы. Подскажите где моя ошибка (phpbb3.0.9).

NVK
phpBB 1.0.0
Сообщения: 1
Зарегистрирован: 03.05.2012 9:19

Re: Программно добавить тему/пост под нужным юзером

Сообщение NVK » 05.05.2012 19:26

crafter писал(а):

Код: Выделить всё

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx); 

// Start session management
$user->session_begin(false); // no update_session_page
// session_create($user_id = false, $set_admin = false, $persist_login = false, $viewonline = true)
$user->session_create( [USER_ID_HERE], false, false, false);
$auth->acl($user->data);
$user->setup();

$my_subject	= utf8_normalize_nfc(utf8_recode('subject test [русский сабж 3] text', 'windows-1251'));
$my_text	= utf8_normalize_nfc(utf8_recode('this is [русский текст 3] a text', 'windows-1251'));

// variables to hold the parameters for submit_post
$poll = $uid = $bitfield = $options = ''; 

generate_text_for_storage($my_subject, $uid, $bitfield, $options, false, false, false);
generate_text_for_storage($my_text, $uid, $bitfield, $options, true, true, true);

$data = array( 
	'forum_id'		=> [FORUM_ID_HERE],
	'icon_id'		=> false,

	'enable_bbcode'		=> true,
	'enable_smilies'	=> true,
	'enable_urls'		=> true,
	'enable_sig'		=> true,

	'message'		=> $my_text,
	'message_md5'	=> md5($my_text),
				
	'bbcode_bitfield'	=> $bitfield,
	'bbcode_uid'		=> $uid,

	'post_edit_locked'	=> 0,
	'topic_title'		=> $my_subject,
	'notify_set'		=> false,
	'notify'			=> false,
	'post_time' 		=> 0,
	'forum_name'		=> '',
	'enable_indexing'	=> true,
);

submit_post('post', $my_subject, '', POST_NORMAL, $poll, $data);

$user->session_kill();
?>

Подскажите пожалуйста какие конкретно параметры и куда нужно подставлять (Например: логин, пароль, ссылка на форум, текст заголовка, текст сообщения и т.д.)? Для успешно создания темы.

Аватара пользователя
sweetah
phpBB 2.0.6
Сообщения: 501
Зарегистрирован: 26.01.2010 14:43
Благодарил (а): 106 раз
Поблагодарили: 26 раз

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение sweetah » 11.05.2012 14:26

Кто-нибудь, поделитесь, пожалуйста, скриптом для добавления поста с произвольным post_time.

Mupok
phpBB 1.0.0
Сообщения: 1
Зарегистрирован: 15.06.2012 23:38

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение Mupok » 15.06.2012 23:49

Добавляю программно тему,а после пробую её программно редактировать. Всё получается, тема сообщение в теме обновляется, только из таблицы phpbb_topics стирается данные из topic_first_poster_name. И получается при просмотре тем Автор - Гость, т.к. ек указан ник пользователя. Всё остальное правильно и ссылка на пользователя, и его цвет. В самой теме имя отображается корректно.

Помогите, пожалуйста, разобраться. Вот код, при помощи которого редактирую:

Код: Выделить всё

require_once($phpbb_root_path . 'includes/functions_posting.' . $phpEx); 

$my_subject	= utf8_normalize_nfc($title);
$my_text	= utf8_normalize_nfc($newstext);
                
 // variables to hold the parameters for submit_post
$poll = $uid = $bitfield = $options = '';
                
 generate_text_for_storage($my_subject, $uid, $bitfield, $options, false, false, false);
                         
$data = array(             
 'forum_id'      => $forum_id,
'topic_id'      => $topic_id,
 'post_id'      => $post_id,
'poster_id'        => $poster_id,
'icon_id'       => false,
                
'enable_bbcode'     => true,
'enable_smilies'    => true,
'enable_urls'       => true,
'enable_sig'        => true,
                    
'message'		=> $my_text,
'message_md5'	=> md5($my_text),
					
'bbcode_bitfield'   => $bitfield,
'bbcode_uid'        => $uid,

'post_edit_locked'  => 0,
'topic_title'       => $my_subject,
'notify_set'        => false,
'notify'            => false,
 'post_time'         => 0,
'enable_indexing'   => true,           
 );
                
submit_post('edit', $my_subject, '', POST_NORMAL, $poll, $data);

lesha20
phpBB 1.4.0
Сообщения: 31
Зарегистрирован: 09.09.2012 0:42
Благодарил (а): 7 раз
Поблагодарили: 2 раза

Re: [FAQ] Как программно добавить тему / пост / личное сообщ

Сообщение lesha20 » 11.10.2012 20:42

Подскажите пожалуйста почему цитата с атрибутом [quote=atr][quote] не преобразуется для сохранения в базе данных

Код: Выделить всё

$text = '[quote]yuli,Quote (yuli)Inspiration, Мейн Кун? Похож...[/quote]
Нее, это сибирский кот с сиамским уклоном))) В подъезде кошка родила, мы приютили котенка, вот такой вырос.
[quote="Nochka"]Inspiration, классный такой!!![/quote]
[b]Спасибо![/b]';
utf8_normalize_nfc($text);
$poll = $bbcode_uid = $bbcode_bitfield = $options = ''; 
generate_text_for_storage($text, $bbcode_uid, $bbcode_bitfield, $options, true, true, true);
echo $text;
Получаю на экране:

Код: Выделить всё

[quote:1s3t4z7w]yuli, Quote (yuli) Inspiration, Мейн Кун? Похож...[/quote:1s3t4z7w] 
Нее, это сибирский кот с сиамским уклоном))) В подъезде кошка родила, мы приютили котенка, вот такой вырос. 
[quote="Nochka"]Inspiration, классный такой!!![/quote]
[b:1s3t4z7w]Спасибо![/b:1s3t4z7w]
Добавлено спустя 44 минуты 21 секунду:
Re: [FAQ] Как программно добавить тему / пост / личное сообщение
Всё врубился,
кавычки " надо поменять на "
тогда функция generate_text_for_storage() сработает.

Перенесено из форума FAQ (phpBB 3.0.x) в форум FAQ 28.09.2016 15:02 модератором rxu

Перенесено из форума FAQ в форум Для авторов 13.09.2017 18:31 модератором rxu

Ответить

Вернуться в «Для авторов»