Конвертация Битрикс -> phpBB3

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

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

Конвертация Битрикс -> phpBB3

Сообщение Kanana »

Существует форум на битриксе(встроенный пакет), хочу перенести на phpbb 3.04.Каким образом можно сделать?Варианы типо перепечатывай и создавай пользователей-просьба в треш сразу)
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 22 года 2 месяца
Откуда: Бердск
Поблагодарили: 15 раз

Re: Перенос базы данных

Сообщение crash »

Kanana писал(а):Варианы типо перепечатывай и создавай пользователей-просьба в треш сразу)
тогда написать конвертер
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
NaTty
phpBB 1.0.0
Сообщения: 5
Стаж: 17 лет 4 месяца

Re: Перенос базы данных

Сообщение NaTty »

Kanana, скажите, пожалуйста, у вас что-нибудь получилось? У меня тот же вопрос. Пользователей перенести получается, а сообщения пока что нет =(. Может кто-то еще уже сделал?
NaTty
phpBB 1.0.0
Сообщения: 5
Стаж: 17 лет 4 месяца

Re: Конвертация Битрикс -> phpBB3

Сообщение NaTty »

В общем, не ругайте за кривой код, но пока получается кое-как перенести пользователей и темы с сообщениями.
При этом все складывается в один форум, всплывают все когда-то перенесенные дубликаты тем битрикса, теряются прикрепления и аватарки и много всего прочего. Плюс имена пользователей в 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

Сообщение Alek$ »

NaTty писал(а):) При отображении списка тем вместо имени последнего написавшего сообщение показывается его id - и, само собой, при нажатии говорит что такого пользователя нет.
При добавлении темы в таблицу к $topic_poster надо записывать id юзера, а не имя. Это если навскидку.
NaTty писал(а):2) ББ-коды отображаются текстом - выглядит ужасно.
Вам нужны эти функции: http://area51.phpbb.com/docs/code/phpBB ... tpass.html
Примеры использования есть в posting.php
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Конвертация Битрикс -> phpBB3

Сообщение rxu »

NaTty писал(а):$username_clean=strtolower(htmlspecialchars($b_str['LOGIN']));
Неверная генерация значения поля username_clean, надо использовать встроенную функцию phpBB3.
Изображение
NaTty
phpBB 1.0.0
Сообщения: 5
Стаж: 17 лет 4 месяца

Re: Конвертация Битрикс -> phpBB3

Сообщение NaTty »

надо использовать встроенную функцию phpBB3
Я так понимаю это utf8_clean_string из includes/utf/utf_tools.php ? А вы не подскажете как ее правильно использовать? У меня сильно ругается когда я пытаюсь просто подключить файл utf_tools.php .
За что отвечает вот эта проверка в начале файла?

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

if (!defined('IN_PHPBB'))
{
	exit;
}
При добавлении темы в таблицу к $topic_poster надо записывать id юзера, а не имя
Спасибо, поправила. Что-то изменилось, но все равно id вместо имени, может конечно руки кривые.
Аватара пользователя
Alek$
Former team member
Сообщения: 2616
Стаж: 21 год 1 месяц
Откуда: Новосибирск
Поблагодарили: 37 раз

Re: Конвертация Битрикс -> phpBB3

Сообщение Alek$ »

NaTty писал(а):За что отвечает вот эта проверка в начале файла?
За то, чтобы файл не вызывался напрямую в обход основных скриптов.
Самая страшная ошибка, это ошибка без видимых причин и конкретных последствий.
phpBB3 [db_update.php generator]
Первая помощь по всем phpBB-вопросам: phpBB2 и phpBB3 FAQ; Правила общения;
Все консультации в icq или личке - на платной основе.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Конвертация Битрикс -> phpBB3

Сообщение rxu »

В большинстве случаев достаточно подключить common.php из корня phpBB, в который уже подключено почти всё необходимое.
А так, в начале своего скрипта используйте

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

define('IN_PHPBB', true);
Для примера, смотрите шапку скрипта index.php.
Изображение
NaTty
phpBB 1.0.0
Сообщения: 5
Стаж: 17 лет 4 месяца

Re: Конвертация Битрикс -> phpBB3

Сообщение NaTty »

Остался последний вопрос по bb кодам - как получить bbcode_uid? Не могу найти нужную функцию.
Текст для записи в базу преобразую так:

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

 generate_text_for_storage($post_text, $uid, $bitfield, $options, true, true, true);
как тут написано http://www.phpbb.com/mods/documentation ... ting-posts
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Re: Конвертация Битрикс -> phpBB3

Сообщение rxu »

NaTty
Для чего получить? Если заметили, там выше есть код

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

// variables to hold the parameters for submit_post
$uid = $bitfield = $options = ''; 
Для функции generate_text_for_storage не надо задавать $uid, это возвращаемое значение.
Изображение
NaTty
phpBB 1.0.0
Сообщения: 5
Стаж: 17 лет 4 месяца

Re: Конвертация Битрикс -> phpBB3

Сообщение NaTty »

Спасибо! Теперь все нормально. Прикрепления и аватарки, к сожалению, не осилила, но имена нормално отображаются. Редактировать старые сообщения не получается.

Код вверху поправила на актуальный.

Вернуться в «Поддержка phpBB 3.0.х»