Есть несколько здоровых файлов с письмами со старого форума которые хочется закачать на phpbb форум.
Структура файла примерно такая:
#|2|Тема второго треда
13-07-2005 08:54:23|-1|Сообщение 1\r\n\r\n(Добавление)\r\n\r\nЕще одна строка
13-07-2005 08:55:12|1|Сообщение 2
13-07-2005 09:25:10|-1|Сообщение 3
#|1|Тема первого треда
13-07-2005 08:54:14|1|Первый пост
13-07-2005 08:55:22|-1|Второй пост
Где строка с решеткой это разделитель тредов, номер темы и название темы.
Далее идут время сообщения, номер юзера в формате phpbb и текст сообщения. Ну и т.д. до новой темы.
Я так понимаю что вся работа сводится к перебору файла и добавлению записей в таблицы phpbb_topics,phpbb_posts и phpbb_posts_text
Помогите написать хотя бы костяк для правильного добавления одного письма в любой из форумов (по номеру) а дальше я уже попробую разобраться сам.
Заранее благодарю!
Закачка текстового файла как сообщений
-
- phpBB 1.4.0
- Сообщения: 38
- Стаж: 19 лет 9 месяцев
- Откуда: Хабаровск
-
- phpBB 2.0.2
- Сообщения: 306
- Стаж: 20 лет 1 месяц
1. читать файл и парсить его
2. создаь sql-"скрипт" для передачи данных в БД
3. коннектиться к базе и сохранять топики и посты
привожу только первый пункт алгоритма
на выходе получится ассоциативный массив. который легко обработать
2. создаь sql-"скрипт" для передачи данных в БД
3. коннектиться к базе и сохранять топики и посты
привожу только первый пункт алгоритма
Код: Выделить всё
$lines = @file($filename);
$forum = array();
foreach ($lines as $line) {
if (!$line) {
continue;
}
$line = explode('|', $line, 3);
if ($line[0] == '#') {
$forum[] = array(
'topic_id' => $line[1],
'topic_title' => $line[2],
'posts' => array(),
);
continue;
}
$forum[sizeof($forum) - 1]['posts'][] = array(
'post_time' => $line[0],
'poster_id' => $line[1],
'post_text' => $line[2]
);
}
-
- phpBB 1.4.0
- Сообщения: 38
- Стаж: 19 лет 9 месяцев
- Откуда: Хабаровск
quazi
Я бы это все и сам написал. Нужен пример скрипта с корректным добавлением новых постов. Что бы там не было проблем с автонумерацией и т.д.
Для одного треда нужно создать одну запись в phpbb_topics и соответствующее количеству писем количество записей в phpbb_posts и phpbb_posts_text. А потом опять нужно в phpbb_topics лезть и менять как минимум topic_first_post_id и topic_last_post_id ...
Как это в скрипте описать?
Кто поможет?
SQL совсем немного знаю, но как такое написать не в курсе...
Я бы это все и сам написал. Нужен пример скрипта с корректным добавлением новых постов. Что бы там не было проблем с автонумерацией и т.д.
Для одного треда нужно создать одну запись в phpbb_topics и соответствующее количеству писем количество записей в phpbb_posts и phpbb_posts_text. А потом опять нужно в phpbb_topics лезть и менять как минимум topic_first_post_id и topic_last_post_id ...
Как это в скрипте описать?
Кто поможет?
SQL совсем немного знаю, но как такое написать не в курсе...
-
- phpBB 1.4.0
- Сообщения: 38
- Стаж: 19 лет 9 месяцев
- Откуда: Хабаровск
-
- phpBB 1.4.1
- Сообщения: 41
- Стаж: 19 лет 9 месяцев
Вот рабочий пример, так я вставляю сообщения о персанальном флуд контроле ( PFC ).
Код: Выделить всё
$sql = "SELECT * FROM " . USERS_TABLE . " WHERE user_id = $puser_id";
if ( !($result = $db->sql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Could not obtain vote data for this topic', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) ) {
$puser_name = $row['username'];
$sql = "INSERT INTO " . TOPICS_TABLE . " (topic_title, topic_poster, topic_time, forum_id, topic_status, topic_type, topic_vote, topic_dis) VALUES ('PFC $pfc $puser_name', " . $userdata['user_id'] . ", ". time() .", 26, " . TOPIC_UNLOCKED . ", 0, 0, 0)";
if( !$db->sql_query($sql) )
{
$message = mysql_errno() . " " . mysql_error() . "<br> ". $sql;
message_die(GENERAL_MESSAGE, $message);
}
$topic_id = $db->sql_nextid();
$sql = "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, 26, " . $userdata['user_id'] . ", '', ". time() .", '$user_ip', 0, 0, 0, 0)";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
$post_id = $db->sql_nextid();
$sql = "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id, 'PFC $pfc $puser_name', 0, 'Пользователю $puser_name назначен Персональный Флуд Контроль, в размере $pfc секунд.')";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . TOPICS_TABLE . " SET topic_last_post_id = $post_id, topic_first_post_id = $post_id WHERE topic_id = $topic_id";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
$sql = "UPDATE " . FORUMS_TABLE . " SET
forum_last_post_id = $post_id,
forum_posts = forum_posts + 1,
forum_topics = forum_topics + 1
WHERE forum_id = 26";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
http://forum.uo.net.ua
Наши пользователи оставили сообщений: 1363788
Всего зарегистрированных пользователей: 9344
Наши пользователи оставили сообщений: 1363788
Всего зарегистрированных пользователей: 9344