импорт сообщений
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение

-
- phpBB 1.0.0
- Сообщения: 3
- Стаж: 4 года 11 месяцев
импорт сообщений
Подскажите как можно импортировать из другого источника сообщения и темы в форум? Есть ли какие то расширения или плагины? В каком формате им скармливать данные?
-
- phpBB Guru
- Сообщения: 16947
- Стаж: 18 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 549 раз
- Поблагодарили: 1700 раз
Re: импорт сообщений
alexv145, само по себе добавление сообщений сложности не представляет, можно полистать здесь [FAQ] Как программно добавить тему / пост / личное сообщение (немного устарело, но принцип тот же).
Но могут быть нюансы. Смотря что, откуда, куда, от имени какого пользователя и т.п.
Но могут быть нюансы. Смотря что, откуда, куда, от имени какого пользователя и т.п.
-
- phpBB 1.2.0
- Сообщения: 13
- Стаж: 4 года 11 месяцев
- Благодарил (а): 6 раз
Re: импорт сообщений
Я парсил с помощью content downloader и готовил csv файл, потом заливал на форум через PMA
-
- phpBB Guru
- Сообщения: 16947
- Стаж: 18 лет 11 месяцев
- Откуда: Красноярск
- Благодарил (а): 549 раз
- Поблагодарили: 1700 раз
Re: импорт сообщений
Способ неправильный, ибо кроме таблицы постов в процессе задействован еще целый набор таблиц, плюс синхронизация статистики и апдейт поискового индекса.
-
- phpBB 1.2.0
- Сообщения: 13
- Стаж: 4 года 11 месяцев
- Благодарил (а): 6 раз
Re: импорт сообщений
Ну потом, через stk делал синхронизацию постов и запускал индексирование поисковых индексовrxu писал(а): 29.05.2020 14:27 Способ неправильный, ибо кроме таблицы постов в процессе задействован еще целый набор таблиц, плюс синхронизация статистики и апдейт поискового индекса.
-
- phpBB 1.2.0
- Сообщения: 13
- Стаж: 4 года 11 месяцев
- Благодарил (а): 6 раз
-
- Former team member
- Сообщения: 933
- Стаж: 18 лет 2 месяца
- Откуда: BeBoss.ru
- Благодарил (а): 2 раза
- Поблагодарили: 10 раз
Re: импорт сообщений
Я делал как.
Сначала спарсенный контент залил в 2 таблицы - "авторы" и "посты". Посты запарсенные у меня были от зарегистрированных авторов и от гостей.
Отдельно была таблица с темами (threads). В каждой таблице в поле phpbb_id фиксировался новый id этого автора, поста и темы - чтобы определять, что уже было перенесено, а также чтобы после переноса сделать редиректы со старых url на новые.
Потом их добавлял в базу вот таким кодом:
Всё добавилось идеально, ничего пересинхронизировать и тд не пришлось.
Сначала спарсенный контент залил в 2 таблицы - "авторы" и "посты". Посты запарсенные у меня были от зарегистрированных авторов и от гостей.
Отдельно была таблица с темами (threads). В каждой таблице в поле phpbb_id фиксировался новый id этого автора, поста и темы - чтобы определять, что уже было перенесено, а также чтобы после переноса сделать редиректы со старых url на новые.
Потом их добавлял в базу вот таким кодом:
Код: Выделить всё
private function insertAuthors() {
$res = $this->db->sql_query("SELECT * FROM " . $this->table_prefix . "parsed_authors WHERE phpbb_id = 0");
$authors = $this->db->sql_fetchrowset($res);
include($this->root_path . 'includes/functions_user.php');
$this->user->session_begin();
$this->auth->acl($this->user->data);
$this->user->setup();
foreach($authors as $author) {
$username = $author['name'];
$password = 'MyCoMpLeX_PaSsWoRd';
$email_address = md5($author['name'] . time()) . '@parsed.ru';
$group_name = 'REGISTERED';
$sql = 'SELECT group_id
FROM ' . GROUPS_TABLE . "
WHERE group_name = '" . $this->db->sql_escape($group_name) . "'
AND group_type = " . GROUP_SPECIAL;
$result = $this->db->sql_query($sql);
$row = $this->db->sql_fetchrow($result);
$group_id = $row['group_id'];
$timezone = '+3';
$language = 'en';
$user_type = USER_NORMAL;
$user_actkey = md5(rand(0, 100) . time());
$user_actkey = substr($user_actkey, 0, rand(8, 12));
$registration_time = time();
$user_row = array(
'username' => $username,
'user_password' => phpbb_hash($password),
'user_email' => $email_address,
'group_id' => (int) $group_id,
'user_timezone' => (float) $timezone,
'user_lang' => $language,
'user_type' => $user_type,
'user_actkey' => $user_actkey,
'user_regdate' => $registration_time,
);
$user_id = user_add($user_row);
$this->db->sql_query("UPDATE " . $this->table_prefix . "parsed_authors
SET phpbb_id = " . $this->db->sql_escape($user_id) . "
WHERE id = " . $this->db->sql_escape($author['id']));
echo $author['id'] . " : " . $user_id . PHP_EOL;
}
}
private function insertPosts() {
include($this->root_path . 'includes/functions_posting.php');
$res = $this->db->sql_query("SELECT * FROM " . $this->table_prefix . "parsed_posts WHERE phpbb_id = 0 ORDER BY post_time ASC LIMIT 10");
$posts = $this->db->sql_fetchrowset($res);
while($posts) {
foreach ($posts as $post) {
echo $post['id']. PHP_EOL;
$thread_data_res = $this->db->sql_query("SELECT * FROM " . $this->table_prefix . "parsed_threads WHERE id = " . $this->db->sql_escape($post['id_thread']));
$thread_data = $this->db->sql_fetchrow($thread_data_res);
if($post['id_author'] > 0) {
$user_data_res = $this->db->sql_query("SELECT * FROM " . $this->table_prefix . "parsed_authors WHERE id = " . $this->db->sql_escape($post['id_author']));
$user_data = $this->db->sql_fetchrow($user_data_res);
}
$topic_id = 0;
if(!empty($thread_data['phpbb_id'])) {
$topic_id = intval($thread_data['phpbb_id']);
}
var_dump($thread_data, $topic_id);
$sql = "SELECT forum_id
FROM " . FORUMS_TABLE . "
WHERE forum_name = '" . $this->db->sql_escape($thread_data['forum_name']) . "'";
$result = $this->db->sql_query($sql);
$row = $this->db->sql_fetchrow($result);
$forum_id = $row['forum_id'];
$this->user->data['user_id'] = ($post['id_author'] > 0) ? $user_data['phpbb_id'] : ANONYMOUS;
$this->user->data['is_registered'] = ($post['id_author'] > 0) ? 1 : 0;
$this->user->data['user_colour'] = '';
$this->user->ip = '127.0.0.0';
$this->user->data['username'] = $post['author_name'];
$message_text = $post['post_text'];
$poll = $uid = $bitfield = $options = '';
generate_text_for_storage($message_text, $uid, $bitfield, $options, true, true, true);
$post_data = [
// General Posting Settings
'forum_id' => $forum_id, // The forum ID in which the post will be placed. (int)
'topic_id' => $topic_id, // 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_text, // Your text you wish to have submitted. It should pass through generate_text_for_storage() before this. (string)
'message_md5' => md5($message_text),// The md5 hash of your message
'bbcode_bitfield' => $bitfield,
'bbcode_uid' => $uid,
// Other Options
'topic_title' => $thread_data['thread_name'], // Subject/Title of the topic. (string)
'post_time' => $post['post_time'], // Set a specific time, use 0 to let submit_post() take care of getting the proper time (int)
'enable_indexing' => true, // Allow indexing the post? (bool)
'force_approved_state' => true, // Allow the post to be submitted without going into unapproved queue
'force_visibility' => true, // Allow the post to be submitted without going into unapproved queue, or make it be deleted
'post_edit_locked' => 0
];
$poll_data = [];
$post_url = submit_post(($topic_id > 0) ? 'reply' : 'post', $post['post_title'], $post['author_name'], POST_NORMAL, $poll_data, $post_data);
$post_id = $this->db->sql_query("SELECT MAX(post_id) as id FROM " . POSTS_TABLE);
$post_id = $this->db->sql_fetchrow($post_id);
$post_id = $post_id['id'];
$this->db->sql_query("UPDATE " . $this->table_prefix . "parsed_posts SET phpbb_id = " . intval($post_id) . " WHERE id = " . $post['id']);
if($topic_id == 0) {
$post_data = parse_url($post_url);
$post_data['query'] = html_entity_decode($post_data['query']);
parse_str($post_data['query'], $get_array);
$topic_id = $get_array['t'];
$this->db->sql_query("UPDATE " . $this->table_prefix . "parsed_threads SET phpbb_id = " . intval($topic_id) . " WHERE id = " . $post['id_thread']);
}
}
$res = $this->db->sql_query("SELECT * FROM " . $this->table_prefix . "parsed_posts WHERE phpbb_id = 0 LIMIT 10");
$posts = $this->db->sql_fetchrowset($res);
}
}