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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11475
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2568 раз
Контактная информация:

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

Сообщение Sheer » 01.03.2015 12:58

Payalnik610 писал(а):нашел
Да, забыл сказать, что это тоже было абсолютно лишнее.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

bear9
phpBB 1.4.0
Сообщения: 39
Зарегистрирован: 14.03.2011 14:34
Благодарил (а): 1 раз

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

Сообщение bear9 » 15.06.2015 17:37

А если стоит задача удалить пост?


bear9
phpBB 1.4.0
Сообщения: 39
Зарегистрирован: 14.03.2011 14:34
Благодарил (а): 1 раз

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

Сообщение bear9 » 16.06.2015 11:43

Пчелкин писал(а):Post Expire 1.0.3
Спасибо!!!!
Кому лень лопатить код, подсказка

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

	$sql = 'SELECT post_id 
					FROM '. POSTS_TABLE . ' 
					WHERE post_expire_time < '. $current_time . ' AND post_expire_time <> 0';
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
	if ($row) 
	{
		if (!function_exists('delete_posts'))
		{
			include($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
		}
		delete_posts('post_id', $row);
	}

Аватара пользователя
saturn-z
phpBB 2.0.0
Сообщения: 241
Зарегистрирован: 10.11.2012 23:49
Откуда: РФ, Тюмень
Благодарил (а): 13 раз
Поблагодарили: 93 раза
Контактная информация:

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

Сообщение saturn-z » 18.12.2015 22:09

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

$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); 
Скажите, для 3.1 в этом коде ничего не нужно менять? Пробую сделать, вроде работает. Если для 3.1 ничего менять не нужно... Можно ли подружить этот код с расширением Ultimate SEO URL is an Extension ?
При добавлении поста дебаг выдаёт ошибку

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

[phpBB Debug] PHP Notice: in file [ROOT]/ext/phpbbseo/usu/event/listener.php on line 887: Undefined index: topic_type
кусок кода файла на который ругается:

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

        if ($data['post_visibility'] == ITEM_APPROVED)
        {
            $params .= '&t=' . $data['topic_id'];

            if ($mode != 'post')
            {
                $params .= '&p=' . $data['post_id'];
                $add_anchor = '#p' . $data['post_id'];
            }
        }
        else if ($mode != 'post' && $post_mode != 'edit_first_post' && $post_mode != 'edit_topic')
        {
            $params .= '&t=' . $data['topic_id'];
        }

        if ($params)
        {
            $data['topic_type'] = $post_data['topic_type'];

            $this->core->prepare_topic_url($data);
        }

        $url = (!$params) ? "{$this->phpbb_root_path}viewforum.{$this->php_ext}" : "{$this->phpbb_root_path}viewtopic.{$this->php_ext}";
        $url = $this->core->url_rewrite($url, 'f=' . $data['forum_id'] . $params, true, false, false, true) . $add_anchor;

        $event['url'] = $url;
        $event['data'] = $data; 
Немало нужно знания, чтобы уметь скрыть перед другими свое незнание.

Аватара пользователя
Anvar
Former team member
Сообщения: 1962
Зарегистрирован: 26.03.2010 9:09
Благодарил (а): 67 раз
Поблагодарили: 784 раза
Контактная информация:

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

Сообщение Anvar » 19.12.2015 19:51

saturn-z, Нужно добавить значение topic_type в массиве.

После

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

'topic_title'      => $my_subject,
Добавить

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

  'topic_type'      => POST_NORMAL,
POST_STICKY - Прикреплённая тема, POST_ANNOUNCE - объявление.
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!

поиск моих эксклюзивных решений

Аватара пользователя
saturn-z
phpBB 2.0.0
Сообщения: 241
Зарегистрирован: 10.11.2012 23:49
Откуда: РФ, Тюмень
Благодарил (а): 13 раз
Поблагодарили: 93 раза
Контактная информация:

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

Сообщение saturn-z » 19.12.2015 20:27

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

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11475
Зарегистрирован: 18.02.2007 19:01
Откуда: Калининград не Кенигсберг
Благодарил (а): 53 раза
Поблагодарили: 2568 раз
Контактная информация:

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

Сообщение Sheer » 19.12.2015 21:03

Можно дурацкий вопрос? А при чем тут FAQ (phpBB 3.0.x)
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Shoorik
phpBB 1.0.0
Сообщения: 9
Зарегистрирован: 11.08.2009 9:59
Поблагодарили: 1 раз

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

Сообщение Shoorik » 04.03.2016 13:46

Скрипты работают, все хорошо.

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

Хочется, чтобы после добавления скриптом, количество сообщений юзера (от лица которого постим), изменялось.
В какую сторону копать? (v 3.1)

Спасибо.

Аватара пользователя
Shoorik
phpBB 1.0.0
Сообщения: 9
Зарегистрирован: 11.08.2009 9:59
Поблагодарили: 1 раз

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

Сообщение Shoorik » 09.03.2016 11:55

Решено, вопрос не актуален, все оказалось проще чем я думал.

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

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

usernick
phpBB 1.0.0
Сообщения: 3
Зарегистрирован: 16.01.2018 16:29
Благодарил (а): 1 раз
Поблагодарили: 1 раз

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

Сообщение usernick » 16.01.2018 16:36

Подскажите - добавляю новый пост, а добавляется тема (3.2.1):

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

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

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$poll='';
$bitfield='';
$uid='';

        // more phpBB setup...need to replace the session data setup above
        // with a hack, i mean sql query, then array_merge it into $user->data
        // below. couldn't just setup a session for the user/bot we want to
        // post as? Credit to RMcGirr83 on phpbb community support forum
        $sql = 'SELECT * FROM ' . USERS_TABLE . ' WHERE user_id = 1481';
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        $db->sql_freeresult($result);

        // reset the current users info to that of the bot
        $user->data = array_merge($user->data, $row);
		
$message="message[b]message[/b]message";
$subject="subject2";

generate_text_for_storage($message, $uid, $bitfield, $options, true, true, true);

$data = array( 
    // General Posting Settings
    'forum_id'            => 2,    // The forum ID in which the post will be placed. (int)
    'topic_id'            => 1,    // Post a new topic or in an existing one? Set to 0 to create a new one, if not, specify your topic ID here instead.
    'icon_id'            => false,    // The Icon ID in which the post will be displayed with on the viewforum, set to false for icon_id. (int)

    // Defining Post Options
    'enable_bbcode'    => true,    // Enable BBcode in this post. (bool)
    'enable_smilies'    => true,    // Enabe smilies in this post. (bool)
    'enable_urls'        => true,    // Enable self-parsing URL links in this post. (bool)
    'enable_sig'        => true,    // Enable the signature of the poster to be displayed in the post. (bool)

    // Message Body
    'message'            => $message,        // Your text you wish to have submitted. It should pass through generate_text_for_storage() before this. (string)
    'message_md5'    => md5($message),// The md5 hash of your message

    // Values from generate_text_for_storage()
    'bbcode_bitfield'    => $bitfield,    // Value created from the generate_text_for_storage() function.
    'bbcode_uid'        => $uid,        // Value created from the generate_text_for_storage() function.

    // Other Options
    'post_edit_locked'    => 0,        // Disallow post editing? 1 = Yes, 0 = No
    'topic_title'        => $subject,    // Subject/Title of the topic. (string)
	
    // Email Notification Settings
    'notify_set'        => false,        // (bool)
    'notify'            => false,        // (bool)
    'post_time'         => 0,        // Set a specific time, use 0 to let submit_post() take care of getting the proper time (int)
    'forum_name'        => '',        // For identifying the name of the forum in a notification email. (string)

    // Indexing
    'enable_indexing'    => true,        // Allow indexing the post? (bool)

    // 3.0.6
    'force_approved_state'    => true, // Allow the post to be submitted without going into unapproved queue

    // 3.1-dev, overwrites force_approve_state
    'force_visibility'            => true, // Allow the post to be submitted without going into unapproved queue, or make it be deleted
);

$ret=submit_post('post','subject',$user->data['username'],POST_NORMAL,$poll,$data);
echo $ret;
?>
Тема с topic_id = 1 присутствует. Замена на другой topic_id не помогает.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14480
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 346 раз
Поблагодарили: 1546 раз
Контактная информация:

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

Сообщение rxu » 16.01.2018 18:23

usernick писал(а):
16.01.2018 16:36
добавляется тема
usernick писал(а):
16.01.2018 16:36
submit_post('post'
Режим добавления темы. Режим ответа - 'reply'.
Изображение

Payalnik610
phpBB 1.2.1
Сообщения: 20
Зарегистрирован: 24.02.2015 6:26
Благодарил (а): 1 раз

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

Сообщение Payalnik610 » 21.04.2018 20:21

Здравствуйте товарищи, снова Я), по проблеме выше, создал я тогда скрипт записи инфо в тему, да вот проблема, пришло время перенести этот скрипт на другой проект. вроде все моменты помню, переношу, а теперь ошибка:

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

Fatal error: Call to a member function sql_query() on a non-object in C:\web-server\htdocs\forum\includes\cache.php on line 51

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

function forum_write() {
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . '/includes/functions_posting.' . $phpEx); 


// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$topic_title = $name_post ;
$topic_text = $text_post;

$user_id = 48;
$username = "prosistem";
$user->data['user_id'] = $user_id;
$user->data['is_registered'] = 1;
$user->data['user_colour'] = 'DD0000';
$user->ip = '127.0.0.0';
$user->data['username'] = $username;

$poll = $uid = $bitfield = $options = ''; 

generate_text_for_storage($topic_text, $uid, $bitfield, $options, true, true, true);

	
	$data = array(
			'topic_title'			=> $topic_title, // Subject
			'forum_id'				=> $fid, // тут ID форума
			'forum_name'			=> '',
			'icon_id'				=> 0,
			'poster_id'				=> $user_id, // Тут ID юзера, от имени которого размещается пост
			'enable_bbcode'			=> (bool) true,
			'enable_smilies'		=> (bool) true,
			'enable_urls'			=> (bool) true,
			'enable_sig' 			=> (bool) true,
			'notify'				=> 0,
			'notify_set'			=> '',
			'enable_indexing'		=> (bool) false,
			'message'				=> $topic_text,
			'message_md5'			=> (string) '',
			'bbcode_bitfield'		=> $bitfield,
			'bbcode_uid'			=> $uid,
			'post_edit_locked'		=> 0,
		);
submit_post('post', $topic_title, $username, 0, $poll, $data, false); //  $username -  ник юзера, от имени которого размещается пост	_title, $username, 0, $poll, $data, false); //  $username -  ник юзера, от имени которого размещается пост
		

echo "</br></br></br>Создана новая тема на форуме";

}
Отправлено спустя 17 минут 45 секунд:
А понял походу, не нравиться что в функцию все загоняю. ну и ладно...

Payalnik610
phpBB 1.2.1
Сообщения: 20
Зарегистрирован: 24.02.2015 6:26
Благодарил (а): 1 раз

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

Сообщение Payalnik610 » 21.12.2018 7:04

Доброе утро, а можете подсказать пару вопросов,
1. как правильно по практике описанной выше добавить пост в определенный форум, тему с вложением(файлами..)..
2. как после создания темы узнать id темы?

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9709
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 175 раз
Поблагодарили: 2698 раз
Контактная информация:

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

Сообщение Татьяна5 » 21.12.2018 7:23

Форум - указать id форума
Вложения - разбирайте файл posting.php, по словам attach и attachments
id сообщения возвращает submit_post, а по этому id можно запросом получить id темы

Ответить

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