Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Создание топиков - Тем на форуме с "сайта".

Сообщение Payalnik610 »

Довел до такого состояния:

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

<?php		

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

generate_text_for_storage($topic_text, $uid, $bitfield, $options, true, true, true);
	
	$topic_title = "Шашал" ;
	$topic_text = "Как строить шалаши";
	$fid = 3;
	$user_id = 2;	
	
	$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 -  ник юзера, от имени которого размещается пост	
?>
Теперь ошибка:

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

SQL ERROR [ mysqli ]

Column 'topic_first_poster_name' cannot be null [1048]

An sql error occurred while fetching this page. Please contact an administrator if this problem persists.
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: Создание топиков - Тем на форуме с "сайта".

Сообщение Татьяна5 »

1.

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

generate_text_for_storage($topic_text, $uid, $bitfield, $options, true, true, true);
	
	$topic_title = "Шашал" ;
	$topic_text = "Как строить шалаши";
Сначала $topic_text обрабатывается, а потом задаётся. Надо наоборот.

2. Где задана переменная $username?
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Создание топиков - Тем на форуме с "сайта".

Сообщение Payalnik610 »

так ввел принудительно $username, теперь следующее предупреждение : Column 'topic_first_poster_colour' cannot be null. Как цвет указать в этом скрипте?
Скрытый текст

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

<?php		

$topic_title = "Шашал" ;
$topic_text = "Как строить шалаши";
$fid = 3;
$user_id = 2;	
$username = "vnovikov";
	
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require_once($phpbb_root_path . '/includes/functions_posting.' . $phpEx); 
	
$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 -  ник юзера, от имени которого размещается пост	
?>
Добавлено спустя 3 минуты 14 секунд:
Татьяна5 писал(а):1.

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

generate_text_for_storage($topic_text, $uid, $bitfield, $options, true, true, true);
	
	$topic_title = "Шашал" ;
	$topic_text = "Как строить шалаши";
Сначала $topic_text обрабатывается, а потом задаётся. Надо наоборот.
Исправил, согласен был изначально...
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: Создание топиков - Тем на форуме с "сайта".

Сообщение Татьяна5 »

Попробуйте так:
После

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

$username = "vnovikov";
Добавить

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

$user->data['user_id'] = $user_id;
$user->data['is_registered'] = 1;
$user->data['user_colour'] = (цвет ника, в шестнадцатеричном виде, без значка #);
$user->ip = (ip пользователя);
$user->data['username'] = $username;
И в массив $data ещё надо добавить

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

'force_approved_state' => 1,
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: Создание топиков - Тем на форуме с "сайта".

Сообщение Payalnik610 »

Payalnik610 писал(а):Column 'topic_first_poster_colour' cannot be null. Как цвет указать в этом скрипте?
Так как найти выход...

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

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

$topic_title = "Шашал" ;
$topic_text = "Как строить шалаши";
$fid = 3;
$user_id = 2;	
$username = "vnovikov";
$user->data['user_id'] = $user_id;
$user->data['is_registered'] = 1;
$user->data['user_colour'] = 'AAAAAA';
$user->ip = '127.0.0.0';
$user->data['username'] = $username;

	
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require($phpbb_root_path . 'common.' . $phpEx);
require_once($phpbb_root_path . '/includes/functions_posting.' . $phpEx); 
	
$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,
			'force_approved_state'  => 1,
		);
submit_post('post', $topic_title, $username, 0, $poll, $data, false); //  $username -  ник юзера, от имени которого размещается пост	
?>
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

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

Сообщение Татьяна5 »

Тогда без авторизации всё-таки не обойтись
Либо можно создать свою функцию на основе submit_post и там прописать всё недостающее
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

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

Сообщение Sheer »

Да не надо про авторизацию, правильно писать надо

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

<?php
/**
*
*
*/

/**
* @ignore
*/

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? 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();

$topic_title = "Шашал" ;
$topic_text = "Как строить шалаши";
$fid = 3;
$user_id = 2;
$username = "vnovikov";
$user->data['user_id'] = $user_id;
$user->data['is_registered'] = 1;
$user->data['user_colour'] = 'AAAAAA';
$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,
			'force_approved_state'  => 1,
		);
submit_post('post', $topic_title, $username, 0, $poll, $data, false); //  $username -  ник юзера, от имени которого размещается пост	
?>
Добавлено спустя 1 минуту 39 секунд:
Re: [FAQ] Как программно добавить тему / пост / личное сообщение
Payalnik610 писал(а):$user->data['is_registered'] = 1;
и остальное должно объявляться ПОСЛЕ $user->setup();
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Сообщение Payalnik610 »

Sheer Еху, заработало, спасибо большое. Щас буду до ума доводить, а как сделать чтобы эта тема в объявления попала?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

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

Сообщение Sheer »

После

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

			'topic_title'			=> $topic_title, // Subject
добавить

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

			'topic_time_limit'		=> 0,
В submit_post('post', $topic_title, $username, 0, $poll, $data, false);
0 заменить наPOST_ANNOUNCE
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Сообщение Payalnik610 »

Работает!!!, так и последнее как добавить подпись.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

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

Сообщение Sheer »

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

			'enable_sig'			=> (bool) true, 
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Сообщение Payalnik610 »

о все спасибо.
И так подведу итог.

Цель была такая:
есть сайт с таблицой базы данных (таблица отказов изделий) и прочей информацией и статистикой, (корень ./)
к сайту установлен форум, где описывается вся история по всему, есть форум где описаны все отказы по таблице. (./forum/)
Идея была такая: при добавлении отказа на сайт таблицы - требуется добавить тему на форум с краткой информацией.

Сгенерировать тему и текст не проблема.

завершение моего скрипта следующее:

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

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)

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;
$fid = 3;
$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,
			'force_approved_state'  => 1,
		);
submit_post('post', $topic_title, $username, 0, $poll, $data, false); //  $username -  ник юзера, от имени которого размещается пост	

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

$user->session_kill();
echo "<meta http-equiv=\"Refresh\" content=\"2;url=./failures.php\">";
mysql_close($link);
в результате получаем сообщение на нужном форуме в нужном оформлении. (кто хочет доводит под себя всю красоту и дизайн.)

Спасибо всем за помощь.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

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

Сообщение Sheer »

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

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)
Совершенно лишнее, ибо потом следует

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

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();
и это тоже

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

mysql_close($link);
хотя бы даже потому, что ресурс $link нигде не определен.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Сообщение Payalnik610 »

1. согласен, как то совсем не правильно скопипастил.
2. этот запрос от предыдущего скрипта, который делает запись в БД.
Payalnik610
phpBB 1.4.1
Сообщения: 40
Стаж: 9 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 2 раза

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

Сообщение Payalnik610 »

Написал скрипт который более-менее похож на задумку, теперь при выполнении записи отлетает авторизация на форуме. Запись на форум делаю под одним пользователем, а на форуме сижу под другим.

Добавлено спустя 1 минуту 19 секунд:
Re: [FAQ] Как программно добавить тему / пост / личное сообщение
Хотя при использовании тестового скрипта - тупо записи темы все нормально...

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

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

$user->session_kill();
нашел
Перенесено из форума FAQ (phpBB 3.0.x) в форум FAQ 28.09.2016 15:02 модератором rxu

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

Ответить

Вернуться в «Для разработчиков»