Уважаемые пользователи!
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 | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
kontora
phpBB 1.0.0
Сообщения: 1
Стаж: 12 лет 11 месяцев

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

Сообщение kontora »

проблема с:
crafter писал(а):

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

<?php

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

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

$my_subject	= utf8_normalize_nfc(utf8_recode('subject test [xx 3] text', 'windows-1251'));
$my_text	= utf8_normalize_nfc(utf8_recode('this is [xxx 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'		=> 2,
	'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();
?>
при запуске этого кода - происходит редирект на install/index.php
Аватара пользователя
AlexSport
phpBB 1.4.0
Сообщения: 30
Стаж: 13 лет 11 месяцев
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение AlexSport »

при запуске этого кода - происходит редирект на install/index.php
Вообще-то на рабочем форуме эта папка должна отсутствовать или быть переименована. Попробуйте сделать что-то из этого...
hbdfyd
phpBB 1.2.0
Сообщения: 14
Стаж: 13 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 1 раз

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

Сообщение hbdfyd »

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

<?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(utf8_recode('Название темы', 'windows-1251'));
$my_text = utf8_normalize_nfc(utf8_recode('Текст', 'windows-1251'));

$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' 		=> 57,
	'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();
?>
А как сделать чтоб после исполнения этого скрипта попадать в созданную тему?
Аватара пользователя
AlexSport
phpBB 1.4.0
Сообщения: 30
Стаж: 13 лет 11 месяцев
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение AlexSport »

Все просто - функция submit_post() возвращает ссылку на созданную тему, самый простой вариант - заменяете

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

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

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

$url = submit_post('post', $my_subject, '', POST_NORMAL, $poll, $data);
echo "<a href={$url}>{$url}</a>";
Вместо второго {$url} во второй строке можно написать все, что захочется.

Добавлено спустя 10 минут 44 секунды:
Re: [FAQ] Как программно добавить тему / пост / личное сообщение
Уважаемый, rxu!
Вопрос не совсем в тему, но имеет отношение. Пробовал найти соответствующую тему на форуме, однако ничего не нашлось, поэтому задаю вопрос здесь. Скажите пожалуйста, есть ли что-то вроде этого скрипта, но который бы выводил (показывал) сообщения определенной темы на удаленной странице (т.е. нефорумной)? В первую очередь волнует обработка BBcode - без него можно конечно и по-простому вынимать тему из базы данных, однако там BBcode храниться в весьма непонятном (не исходном) виде, что и вызовет массу проблем при самостоятельной обработке.
hbdfyd
phpBB 1.2.0
Сообщения: 14
Стаж: 13 лет 1 месяц
Благодарил (а): 3 раза
Поблагодарили: 1 раз

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

Сообщение hbdfyd »

AlexSport Спасибо
Аватара пользователя
AlexSport
phpBB 1.4.0
Сообщения: 30
Стаж: 13 лет 11 месяцев
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение AlexSport »

Уважаемый, rxu!
Вопрос не совсем в тему, но имеет отношение. Пробовал найти соответствующую тему на форуме, однако ничего не нашлось, поэтому задаю вопрос здесь. Скажите пожалуйста, есть ли что-то вроде этого скрипта, но который бы выводил (показывал) сообщения определенной темы на удаленной странице (т.е. нефорумной)? В первую очередь волнует обработка BBcode - без него можно конечно и по-простому вынимать тему из базы данных, однако там BBcode храниться в весьма непонятном (не исходном) виде, что и вызовет массу проблем при самостоятельной обработке.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

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

Сообщение rxu »

AlexSport
Первое - по нашим Правилам, поднятие темы ранее, чем через 5 дней - нарушение.
Второе - дабл-поcтинг - нарушение.
Третье - вопрос не относится к теме, оффтоп - нарушение.
На 3 предупреждения уже наработали. Это на будущее.

Далее: попробуйте посмотреть вот этот пост (англ.), скорее всего, как раз нужный случай.
Изображение
Аватара пользователя
AlexSport
phpBB 1.4.0
Сообщения: 30
Стаж: 13 лет 11 месяцев
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение AlexSport »

rxu, спасибо это то, что нужно.
rxu писал(а):Первое - по нашим Правилам, поднятие темы ранее, чем через 5 дней - нарушение.
Второе - дабл-поcтинг - нарушение.
Спасибо за лояльность, однако не пойму, как за ОДНО действие можно получить ДВА предупреждения... (вопрос риторический, отвечать на него не надо... :) ).
filosof
phpBB 1.2.0
Сообщения: 12
Стаж: 13 лет 10 месяцев
Благодарил (а): 1 раз
Контактная информация:

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

Сообщение filosof »

Имеется CSV файлик(таблица) с содержанием раздела(категории),т.е в каждой строке по столбцам:
название топика,название раздела,содержание топика(html текст),название вложения и путь к нему,id топика,id раздела,id пользователя,id вложения.
Подскажите,можно ли создать топики при помощи запроса(импорта) к базе?
насколько я понимаю,нужно использовать таблицы phpbb_posts и phpbb_attachments
какие либо таблицы еще нужно учитывать и задействовать?
И еще:в таблице phpbb_posts в поле post_text содержание топика выглядит так;

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

[i:fd6azyhq][color=#008040:fd6azyhq][b:fd6azyhq]Жанр:[/b:fd6azyhq] фантастика
[b:fd6azyhq]Язык интерфейса:[/b:fd6azyhq] только русский
[b:fd6azyhq]Таблэтка[/b:fd6azyhq]: Не требуется
т.е оформлено ббкодами.
а можно ли записать текст в html коде?
Иными словами,суть моего вопроса такова;
если можно ли создать топики с вложениями при помощи запроса к базе,то какова должна быть структура запроса,какие таблицы и поля необходимо учитывать?
В частности непонятен способ формирования значения поля:
post_checksum в таблице phpbb_posts
и
physical_filename в таблице phpbb_attachments
В этой теме обсуждается создание одного топика,мне же нужно создать сразу несколько.
По ссылкам в теме
Using the phpBB3.0 Basic Functions: inserting-posts (нерабочая)
Using phpBB3's Basic Functions: UsingphpBB3'sBasicFunctions-1%4%7%InsertingPostsandPrivateMessages
не разобрался (не силен в английском и PHP).
В теме приведены php файлы и функции,а как и где их использовать - не понятно.Более близкой темы не нашел.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

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

Сообщение rxu »

filosof
Трудно понять, что именно надо. Создать несколько топиков с вложениями?
Изображение
Аватара пользователя
AlexSport
phpBB 1.4.0
Сообщения: 30
Стаж: 13 лет 11 месяцев
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 2 раза
Контактная информация:

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

Сообщение AlexSport »

Добрый день!

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

get_username_string('full', $posts_row['poster_id'], $posts_row['username'], $posts_row['user_colour']);
Подскажите пожалуйста, как изменить эту строку, чтобы имя пользователя было БЕЗ ссылки?
filosof
phpBB 1.2.0
Сообщения: 12
Стаж: 13 лет 10 месяцев
Благодарил (а): 1 раз
Контактная информация:

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

Сообщение filosof »

rxu писал(а):filosof
Трудно понять, что именно надо. Создать несколько топиков с вложениями?
Да,Вы правильно поняли,несколько топиков одним запросом к базе.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

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

Сообщение rxu »

filosof писал(а):несколько топиков одним запросом к базе.
Так не выйдет. Можно создать несоклько топиков несколькими вызовами функции submit_post.
Изображение
filosof
phpBB 1.2.0
Сообщения: 12
Стаж: 13 лет 10 месяцев
Благодарил (а): 1 раз
Контактная информация:

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

Сообщение filosof »

подскажите пожалуйста,как в таком случае должен выглядеть запрос.(вызов функции)
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

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

Сообщение rxu »

filosof
Вариантов масса. Например, создаете массив из массивов для каждой темы.
Для этого вместо $data = используете $data[] =, затем делаете цикл

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

foreach ($data as $new_topic)
{
    submit_post('post', $my_subject, '', POST_NORMAL, $poll, $new_topic);
}
Как-то так.
Изображение
Перенесено из форума FAQ (phpBB 3.0.x) в форум FAQ 28.09.2016 15:02 модератором rxu

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

Ответить

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