Конвертация Битрикс -> phpBB3
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
Kanana
- phpBB 1.0.0
- Сообщения: 4
- Стаж: 17 лет 6 месяцев
Конвертация Битрикс -> phpBB3
Существует форум на битриксе(встроенный пакет), хочу перенести на phpbb 3.04.Каким образом можно сделать?Варианы типо перепечатывай и создавай пользователей-просьба в треш сразу)
-
crash
- Former team member
- Сообщения: 6517
- Стаж: 22 года 2 месяца
- Откуда: Бердск
- Поблагодарили: 15 раз
Re: Перенос базы данных
тогда написать конвертерKanana писал(а):Варианы типо перепечатывай и создавай пользователей-просьба в треш сразу)
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
-
NaTty
- phpBB 1.0.0
- Сообщения: 5
- Стаж: 17 лет 4 месяца
Re: Перенос базы данных
Kanana, скажите, пожалуйста, у вас что-нибудь получилось? У меня тот же вопрос. Пользователей перенести получается, а сообщения пока что нет =(. Может кто-то еще уже сделал?
-
NaTty
- phpBB 1.0.0
- Сообщения: 5
- Стаж: 17 лет 4 месяца
Re: Конвертация Битрикс -> phpBB3
В общем, не ругайте за кривой код, но пока получается кое-как перенести пользователей и темы с сообщениями.
При этом все складывается в один форум, всплывают все когда-то перенесенные дубликаты тем битрикса, теряются прикрепления и аватарки и много всего прочего. Плюс имена пользователей в phpbb будут логинами битрикса, и часто они содержат символы, которые в phpbb вам придется отфильтровать =( .
Из всего самое неприятное - это 2 вещи:
1) При отображении списка тем вместо имени последнего написавшего сообщение показывается его id - и, само собой, при нажатии говорит что такого пользователя нет.
2) ББ-коды отображаются текстом - выглядит ужасно.
Как это исправить не знаю. Кто знает, подскажите, пожалуйста!
Для переноса надо поставить на один хост с базой битрикса чистый phpbb3, и запустить то что ниже.
Код:
Перенос пользователей:
Перенос тем и сообщений:
При этом все складывается в один форум, всплывают все когда-то перенесенные дубликаты тем битрикса, теряются прикрепления и аватарки и много всего прочего. Плюс имена пользователей в phpbb будут логинами битрикса, и часто они содержат символы, которые в phpbb вам придется отфильтровать =( .
Из всего самое неприятное - это 2 вещи:
1) При отображении списка тем вместо имени последнего написавшего сообщение показывается его id - и, само собой, при нажатии говорит что такого пользователя нет.
2) ББ-коды отображаются текстом - выглядит ужасно.
Как это исправить не знаю. Кто знает, подскажите, пожалуйста!
Для переноса надо поставить на один хост с базой битрикса чистый phpbb3, и запустить то что ниже.
Код:
Перенос пользователей:
Код: Выделить всё
<?
//настройка базы
$bitrix_db="ваша база битрикс";
$phpbb_db="ваша база phpb";
//в зависимости от префиксов правите имена таблиц
$table_users_phpbb="phpbb_users";
$table_users_bitrix="b_user";
$table_users_group_phpbb="phpbb_user_group";
mysql_connect("хост", "пользователь", "пароль")or die("Не подключено");
//подключение функций phpbb3
define('IN_PHPBB', true);
$phpbb_root_path="./convert/";
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
mysql_select_db("$bitrix_db")or die("Не подключено");
mysql_query("SET NAMES 'utf8'");
$b=mysql_query("SELECT
ID,
LOGIN,
PASSWORD,
EMAIL,
LAST_LOGIN,
DATE_REGISTER,
PERSONAL_WWW,
PERSONAL_ICQ,
PERSONAL_COUNTRY,
PERSONAL_BIRTHDAY
FROM $table_users_bitrix");
if($b!=false)
while ($row=mysql_fetch_assoc($b)) $arr_row[]=$row;
$select_db = mysql_select_db("$phpbb_db");
foreach($arr_row as $b_str)
{
$id=$b_str['ID']+52;
//utf8_clean_string - функция phpbb3
$username_clean=utf8_clean_string($b_str['LOGIN']);
$user_regdate=$b_str['DATE_REGISTER'];
$username=$b_str['LOGIN'];
$user_password=$b_str['PASSWORD'];
$user_email=$b_str['EMAIL'];
$user_birthday=$b_str['PERSONAL_BIRTHDAY'];
$user_lastvisit=$b_str['LAST_LOGIN'];
$user_from=$b_str['PERSONAL_COUNTRY'];
$user_icq=$b_str['PERSONAL_ICQ'];
$user_website=$b_str['PERSONAL_WWW'];
$user_type=3;
//все пользователи в группу Зарегистрированные пользователи
$group_id=2;
$q=mysql_query("
INSERT INTO
$table_users_phpbb
(
user_id,
user_regdate,
username,
username_clean,
user_password,
user_email,
user_birthday,
user_lastvisit,
user_from,
user_icq,
user_website,
user_type,
group_id
)
VALUES
(
'$id',
'$user_regdate',
'$username',
'$username_clean',
'$user_password',
'$user_email',
'$user_birthday',
'$user_lastvisit',
'$user_from',
'$user_icq',
'$user_website',
'$user_type',
'$group_id'
)");
//привязка пользователей к группам
mysql_query("
INSERT INTO
$table_users_group_phpbb
(
group_id,
user_id,
group_leader,
user_pending
)
VALUES
(
'$group_id',
'$id',
'0',
'0'
)");
}
?>
Код: Выделить всё
<?
//настройка базы
$bitrix_db="ваша база bitrix";
$phpbb_db="ваша база phphbb";
//в зависимости от префиксов правите имена таблиц
$table_topics_phpbb="phpbb_topics";
$table_topics_bitrix="b_forum_topic";
$table_posts_phpbb="phpbb_posts";
$table_posts_bitrix="b_forum_message";
$table_topics_users_phpbb="phpbb_topics_posted";
mysql_connect("хост", "пользователь", "пароль")or die("Не подключено");
//подключение функций phpbb3
define('IN_PHPBB', true);
$phpbb_root_path="./convert/";
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
mysql_select_db("$bitrix_db")or die("Не подключено");
mysql_query("SET NAMES 'utf8'");
$topics=mysql_query("SELECT
ID,
TITLE,
USER_START_ID,
USER_START_NAME,
POSTS,
VIEWS,
FORUM_ID,
LAST_POSTER_ID,
LAST_POSTER_NAME,
LAST_POST_DATE,
LAST_MESSAGE_ID
FROM $table_topics_bitrix");
if($topics!=false)
while ($row_topics=mysql_fetch_assoc($topics)) $arr_topics[]=$row_topics;
mysql_select_db("$phpbb_db")or die("Не подключено");
mysql_query("TRUNCATE $table_topics_phpbb");
mysql_query("TRUNCATE $table_posts_phpbb");
mysql_query("TRUNCATE $table_topics_users_phpbb");
foreach($arr_topics as $topic)
{
?><pre><? //print_r($topic);?></pre><?
$topic_id=$topic['ID'];
$forum_id=2;
$topic_title=$topic['TITLE'];
$topic_poster=$topic['USER_START_ID']+52;
$topic_views=$topic['VIEWS'];
$topic_first_poster_name=$topic['USER_START_NAME'];
$topic_last_post_id=$topic['LAST_MESSAGE_ID'];
$topic_last_poster_id=$topic['LAST_POSTER_ID']+52;
$topic_last_poster_name=$topic['LAST_POSTER_NAME'];
$topic_last_post_subject=$topic['TITLE'];
$topic_last_post_time=$topic['LAST_POST_DATE'];
$topic_last_view_time=$topic_last_post_time;
$topic_replies=$topic['POSTS'];
$topic_replies_real=$topic_replies;
mysql_query("
INSERT INTO
$table_topics_phpbb
(
topic_id,
forum_id,
topic_title,
topic_poster,
topic_first_poster_name,
topic_last_post_id,
topic_last_poster_id,
topic_last_poster_name,
topic_last_post_subject,
topic_last_post_time ,
topic_last_view_time,
topic_views,
topic_replies,
topic_replies_real
)
VALUES
(
'$topic_id',
'$forum_id',
'$topic_title',
'$topic_poster',
'$topic_first_poster_name',
'$topic_last_post_id',
'$topic_last_poster_id',
'$topic_last_poster_name',
'$topic_last_post_subject',
'$topic_last_post_time',
'$topic_last_view_time',
'$topic_views',
'$topic_replies',
'$topic_replies_real'
)");
// //привязка тем к пользователям
$topic_posted=1;
mysql_query("
INSERT INTO
$table_topics_users_phpbb
(
user_id,
topic_id,
topic_posted
)
VALUES
(
'$topic_poster',
'$topic_id',
'$topic_posted'
)");
//выбрать из таблицы все посты этой темы и заполнить таблицу постов
mysql_select_db("$bitrix_db")or die("Не подключено");
$posts=mysql_query("SELECT
ID,
AUTHOR_ID,
AUTHOR_NAME,
AUTHOR_IP,
POST_DATE,
POST_MESSAGE,
EDITOR_ID,
EDIT_REASON,
EDIT_DATE,
FORUM_ID,
TOPIC_ID,
APPROVED
FROM
$table_posts_bitrix
WHERE
TOPIC_ID='$topic_id'
");
if($posts!==false)
{
while ($row_posts=mysql_fetch_assoc($posts)) $arr_posts[]=$row_posts;
//print_r($arr_posts);
foreach($arr_posts as $post)
{
//print_r($post);
$post_id=$post['ID'];
$forum_id=$post['FORUM_ID'];
$poster_id=$post['AUTHOR_ID']+52;
$poster_ip=$post['AUTHOR_IP'];
$post_time=$post['POST_DATE'];
$post_approved=1;
$post_username=$post['AUTHOR_NAME'];
$post_subject=$topic_title;
$post_text=$post['POST_MESSAGE'];
$poll = $uid = $bitfield = $options = '';
generate_text_for_storage($post_text, $uid, $bitfield, $options, true, true, true);
$post_checksum=md5($post_text);
$bbcode_uid=$uid;
$bbcode_bitfield=$bitfield;
$post_edit_time=$post['EDIT_DATE'];
$post_edit_reason=$post['EDIT_REASON'];
$post_edit_user=$post['EDITOR_ID']+52;
mysql_select_db("$phpbb_db")or die("Не подключено");
mysql_query("
INSERT INTO
$table_posts_phpbb
(
post_id,
topic_id,
forum_id,
poster_id,
poster_ip,
post_time,
post_approved,
post_subject,
post_text,
post_checksum,
post_edit_time,
post_edit_reason,
bbcode_uid,
bbcode_bitfield
)
VALUES
(
'$post_id',
'$topic_id',
'$forum_id',
'$poster_id',
'$poster_ip',
'$post_time',
'$post_approved',
'$post_subject',
'$post_text',
'$post_checksum',
'$post_edit_time',
'$post_edit_reason',
'$bbcode_uid',
'$bbcode_bitfield'
)");
}}
}
?>
Последний раз редактировалось NaTty 02.06.2009 10:20, всего редактировалось 6 раз.
-
Alek$
- Former team member
- Сообщения: 2616
- Стаж: 21 год 1 месяц
- Откуда: Новосибирск
- Поблагодарили: 37 раз
Re: Конвертация Битрикс -> phpBB3
При добавлении темы в таблицу к $topic_poster надо записывать id юзера, а не имя. Это если навскидку.NaTty писал(а):) При отображении списка тем вместо имени последнего написавшего сообщение показывается его id - и, само собой, при нажатии говорит что такого пользователя нет.
Вам нужны эти функции: http://area51.phpbb.com/docs/code/phpBB ... tpass.htmlNaTty писал(а):2) ББ-коды отображаются текстом - выглядит ужасно.
Примеры использования есть в posting.php
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
-
rxu
- phpBB Guru

- Сообщения: 17272
- Стаж: 20 лет 4 месяца
- Откуда: Красноярск
- Благодарил (а): 632 раза
- Поблагодарили: 2412 раз
Re: Конвертация Битрикс -> phpBB3
Неверная генерация значения поля username_clean, надо использовать встроенную функцию phpBB3.NaTty писал(а):$username_clean=strtolower(htmlspecialchars($b_str['LOGIN']));
-
NaTty
- phpBB 1.0.0
- Сообщения: 5
- Стаж: 17 лет 4 месяца
Re: Конвертация Битрикс -> phpBB3
Я так понимаю это utf8_clean_string из includes/utf/utf_tools.php ? А вы не подскажете как ее правильно использовать? У меня сильно ругается когда я пытаюсь просто подключить файл utf_tools.php .надо использовать встроенную функцию phpBB3
За что отвечает вот эта проверка в начале файла?
Код: Выделить всё
if (!defined('IN_PHPBB'))
{
exit;
}Спасибо, поправила. Что-то изменилось, но все равно id вместо имени, может конечно руки кривые.При добавлении темы в таблицу к $topic_poster надо записывать id юзера, а не имя
-
Alek$
- Former team member
- Сообщения: 2616
- Стаж: 21 год 1 месяц
- Откуда: Новосибирск
- Поблагодарили: 37 раз
Re: Конвертация Битрикс -> phpBB3
За то, чтобы файл не вызывался напрямую в обход основных скриптов.NaTty писал(а):За что отвечает вот эта проверка в начале файла?
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
-
rxu
- phpBB Guru

- Сообщения: 17272
- Стаж: 20 лет 4 месяца
- Откуда: Красноярск
- Благодарил (а): 632 раза
- Поблагодарили: 2412 раз
Re: Конвертация Битрикс -> phpBB3
В большинстве случаев достаточно подключить common.php из корня phpBB, в который уже подключено почти всё необходимое.
А так, в начале своего скрипта используйте
Для примера, смотрите шапку скрипта index.php.
А так, в начале своего скрипта используйте
Код: Выделить всё
define('IN_PHPBB', true);-
NaTty
- phpBB 1.0.0
- Сообщения: 5
- Стаж: 17 лет 4 месяца
Re: Конвертация Битрикс -> phpBB3
Остался последний вопрос по bb кодам - как получить bbcode_uid? Не могу найти нужную функцию.
Текст для записи в базу преобразую так:
как тут написано http://www.phpbb.com/mods/documentation ... ting-posts
Текст для записи в базу преобразую так:
Код: Выделить всё
generate_text_for_storage($post_text, $uid, $bitfield, $options, true, true, true);-
rxu
- phpBB Guru

- Сообщения: 17272
- Стаж: 20 лет 4 месяца
- Откуда: Красноярск
- Благодарил (а): 632 раза
- Поблагодарили: 2412 раз
Re: Конвертация Битрикс -> phpBB3
NaTty
Для чего получить? Если заметили, там выше есть код
Для функции generate_text_for_storage не надо задавать $uid, это возвращаемое значение.
Для чего получить? Если заметили, там выше есть код
Код: Выделить всё
// variables to hold the parameters for submit_post
$uid = $bitfield = $options = ''; -
NaTty
- phpBB 1.0.0
- Сообщения: 5
- Стаж: 17 лет 4 месяца
Re: Конвертация Битрикс -> phpBB3
Спасибо! Теперь все нормально. Прикрепления и аватарки, к сожалению, не осилила, но имена нормално отображаются. Редактировать старые сообщения не получается.
Код вверху поправила на актуальный.
Код вверху поправила на актуальный.

