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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
crafter
phpBB 1.0.0
Сообщения: 2
Зарегистрирован: 23.05.2008 0:26

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

Сообщение crafter » 02.06.2008 15:16

Автоматическое создание темы / сообщения.
Как правильно программно создавать темы/сообщения под нужным юзером сторонним скриптом?

Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Зарегистрирован: 12.05.2005 17:25
Откуда: Оренбург (Южный Урал)
Благодарил (а): 24 раза
Поблагодарили: 54 раза
Контактная информация:

Сообщение Поручик » 02.06.2008 18:09

Воспользуйтесь штатными средствами phpBB3
Inserting Posts and Private Messages

Ответы на некоторые вопросы содержатся в темах
How to create new threads, posts and private messages?
API submit_post
Create a new post
submit_post function leaves slashes in db
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html

crafter
phpBB 1.0.0
Сообщения: 2
Зарегистрирован: 23.05.2008 0:26

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

Сообщение crafter » 04.06.2008 0:29

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

<?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();
?>

Koyot
phpBB 1.4.0
Сообщения: 32
Зарегистрирован: 05.02.2008 13:44

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

Сообщение Koyot » 30.08.2008 2:11

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

<?
define('IN_PHPBB', true);

// Set phpBB root folder properly. Change in according to the actual board folder
define('PHPBB_ROOT_PATH', './forum/');
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';

$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

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

// Initialize  login result array
$login = array();

// Handle logouot button if pressed
if(isset($_POST['logout']) && $user->data['user_id'] != ANONYMOUS)
{
	$user->session_kill();
}

// Check if user has submitted login and password and try to log in
if(isset($_POST['login']) && $user->data['user_id'] == ANONYMOUS)
{
	$username = request_var('username', '', true);
	$password = request_var('password', '', true);
	$autologin	= (!empty($_POST['autologin'])) ? true : false;

	$login = $auth->login($username, $password, $autologin);
}

// Send headers


header('Cache-Control: private, no-cache="set-cookie"');
header('Expires: 0');
header('Pragma: no-cache');

// Check if user has tried to log in and greet him if login is successful
if((!empty($login) && $login['status'] == LOGIN_SUCCESS) || $user->data['user_id'] != ANONYMOUS)
{
	// Reset permissions data if user has just logged in
	
}
?>
на сайте уже есть этот код, как создать тему не создавая сессию новую? а то создавать сессию новую не хочется

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

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

Сообщение rxu » 30.08.2008 5:45

Koyot
Естественно, в рамках одной сессии можно использовать код для создания тем/сообщений (начинается с $my_subject = и заканчивается вызовом submit_post).
Изображение

Аватара пользователя
RavenS
phpBB 1.0.0
Сообщения: 3
Зарегистрирован: 03.09.2008 17:28

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

Сообщение RavenS » 03.09.2008 18:44

Доброго времени суток.
У меня вопрос, более сложный, чем просто программное добавление тем...
Вобщем:

В конференции есть подфорум под названием Библиотека. Администратор периодически добавляет туда новые материалы, типа статей и учебников. Допустим, есть некоторая форма с полями "Название темы", "Комментарий к материалу", "Материал". Админ заполняет поля, нажимает Отправить, и на форуме создаётся тема с "Название темы", вложенным материалом "Материал", и описанием темы "Комментарий к материалу", а также с опросом "Оцените материал по n-бальной шкале". Допустим, по пятибальной. Варианты ответов на опрос: числа от 1 до 5 соответственно...

Возможно ли такое реализовать? В каком направлении копать?

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

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

Сообщение rxu » 03.09.2008 19:06

Изображение

dixon_che
phpBB 1.0.0
Сообщения: 5
Зарегистрирован: 09.03.2009 14:51

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

Сообщение dixon_che » 09.03.2009 14:54

С добавлением поста понятно, а как добавить новый топик?

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

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

Сообщение rxu » 09.03.2009 15:13

В режиме 'post' добавляется новая тема, в режиме 'reply' добавляется ответ в существующую тему.
Изображение

dixon_che
phpBB 1.0.0
Сообщения: 5
Зарегистрирован: 09.03.2009 14:51

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

Сообщение dixon_che » 10.03.2009 11:02

Спасибо! Разобрался.

А есть ли готовый рецепт добавления поста от имени другого пользователя?
http://www.phpbb.com/community/viewtopi ... 5#p4028115 - здесь сказано что это не так просто, но больше ничего по этому поводу на этом форуме не нашел.

Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Зарегистрирован: 12.05.2005 17:25
Откуда: Оренбург (Южный Урал)
Благодарил (а): 24 раза
Поблагодарили: 54 раза
Контактная информация:

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

Сообщение Поручик » 10.03.2009 11:24

Как-то так, и читаем далее.
http://www.phpbb.com/community/viewtopi ... 9#p3630225
Иными словами, надо вызвать $auth->acl() для определения прав доступа другого пользователя.

Добавлено спустя 4 минуты 44 секунды:
submit_post - spoof auth?
http://www.phpbb.com/community/viewtopi ... 5#p4624845

Короче, материалов на офе полно, как ты искал, не понимаю.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html

dixon_che
phpBB 1.0.0
Сообщения: 5
Зарегистрирован: 09.03.2009 14:51

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

Сообщение dixon_che » 10.03.2009 12:00

За линки спасибо - но там как-то муторно все описано...

Замечательное описание есть здесь:
http://phpbbmodders.net/articles/3.0/create_post/
И главное заработало из коробки.

dixon_che
phpBB 1.0.0
Сообщения: 5
Зарегистрирован: 09.03.2009 14:51

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

Сообщение dixon_che » 10.03.2009 16:04

Есть проблема.
Когда в скрипте нет ничего кроме кода добавления форума - все работает замечательно.

Но если перед вызовом функции submit_post я что-то вычитываю из базы - мне светит такую ошибку:

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

General Error
SQL ERROR [ mysql4 ]
[]

BACKTRACE

FILE: includes/db/dbal.php
LINE: 264
CALL: dbal_mysql->sql_error()

FILE: includes/functions_posting.php
LINE: 1617
CALL: dbal_mysql->sql_transaction()

FILE: post_new_forum.php
LINE: 82
CALL: submit_post()
Базу открываю, читаю, результат чищу, закрываю...

Не подскажите как лечить?

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

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

Сообщение rxu » 10.03.2009 18:05

dixon_che
А какой ваш скрипт вызывает ошибку - нам телепатировать?
Изображение

dixon_che
phpBB 1.0.0
Сообщения: 5
Зарегистрирован: 09.03.2009 14:51

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

Сообщение dixon_che » 10.03.2009 19:33

Это все что выводится на странице при ошибке.
В sql log ничего нету по поводу этой ошибки.

Но это уже не важно. Я кажется понял в чем проблема. Нельзя в рамках одного скрипта пользоваться phpbb подключением к БД и своим собственным.

Короче перестроил свои запросы через объект $db->...

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

	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$db->sql_freeresult($result);
Все заработало.

Спасибо за участие!

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

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

Ответить

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