Задача для меня, ещё совсем не опытного Bitrix программиста, не тривиальна … но предположив, что я далеко не первый кодер, реализующий такую задачу я решил плотно погуглить …. и конечно-же нашел отличный материал, на основе которого и конвертировал таки форум.
Итак, статья – Переезжаем с phpBB на форум Битрикс
Материал в целом достаточный, причём неплохо прокомментирован, но всё же хочу акцентировать на некоторых моментах, с которыми пришлось столкнуться:
- Во первых, в файле forum.php в начале на базе форума phpbb идёт проверка на существование таблиц TBL_WITH_FORUM_IDS и TBL_WITH_POSTS_IDS – логично предположить, что эти таблицы нужно создавать в базе форума phpbb – но это не так ! Вторая проверка – лишняя, в базе форума делаем только одну табличку b_gp_old_bb, две других b_gp_old_bb_topics и b_gp_old_bb_posts – в базе битрикса.
Может кому поднадобится – вот скриптик добавления:
12345678910111213141516171819202122232425262728// PHPBBCREATE TABLE `b_gp_old_bb` (`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`OLD_ID` INT NOT NULL ,`NEW_ID` INT NOT NULL) ENGINE = MYISAM ;// Начальное заполнение соответствий форумовINSERT INTO `b_gp_old_bb` VALUES (1, 2, 28);INSERT INTO `b_gp_old_bb` VALUES (2, 3, 29);INSERT INTO `b_gp_old_bb` VALUES (3, 4, 31);INSERT INTO `b_gp_old_bb` VALUES (4, 5, 30);INSERT INTO `b_gp_old_bb` VALUES (5, 6, 32);// BitrixCREATE TABLE `b_gp_old_bb_topics` (`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`OLD_ID` INT NOT NULL ,`NEW_ID` INT NOT NULL) ENGINE = MYISAM ;CREATE TABLE `b_gp_old_bb_posts` (`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`OLD_ID` INT NOT NULL ,`NEW_ID` INT NOT NULL) ENGINE = MYISAM ; - Поле post_username в табличке _posts в моей версии phpbb было заполнено какой-то хернёй, поэтому для привязки юзера, пришлось клеить табличу _users по полю poster_id
Второй запрос у меня выглядел так:
123456789101112$strSql = “SELECT *FROM “.PHPBB_PREFIX.“posts as postsRIGHT JOIN “.PHPBB_PREFIX.“posts_text as posts_textON posts_text.post_id = posts.post_idRIGHT JOIN “.PHPBB_PREFIX.“users as posts_usersON posts_users.user_id= posts.poster_idWHERE posts.topic_id=”.$arTopics[“topic_id”].”ORDER BY posts.post_id ASC”; - в users.php define(‘TBL_BANLIST’, ‘null’); – это было в комментах
- ещё прикол – после того как форумы будут добавлены в админке, нужно будет зайти в свойства компонента (режим сайта режим правки – модуль форума) и тупо нажать сохранить – таким образом добавленные форумы пропишутся в видимые. Иначе пусто.
- Правим /bitrix/modules/forum/classes/general/topic.php в методе ADD $arFields[“VIEWS”] = 0; – это тоже было
- define(‘PATH_TO_AVATAR’, $_SERVER[‘DOCUMENT_ROOT’]….. – сюда нужно копирнуть аватарки старого форума
- С define(‘LIMIT_FOR_ONE_STEP’, …. я заморачиваться не стал, поставил set_time_limit(0); и всего делов – все юзеры перетащились за раз
- Так как пришлось скриптик отлаживать и запускать по несколько раз, я дописал удаление всех юзеров созданных ранее (кроме себя)
123456789$rsUser = CUser::GetList($by=“ID”, $order=“DESC”, array());while ($arU = $rsUser->GetNext()) {if($arU[“ID”]>1) {CUser::Delete($arU[“ID”]);}}$DB->Query(‘ALTER TABLE `b_forum_user` AUTO_INCREMENT = 2’);$DB->Query(‘ALTER TABLE `b_user` AUTO_INCREMENT = 2’); - В моём phpbb использовалось поле RANK которого нет в битриксе, для него я сделал ещё одно пользовательское свойство UF_PHPBB_RANK и добавил его заполнение
“UF_PHPBB_RANK” => $arUser[“user_rank”] - На счёт паролей – решил проэксперементировать – скопировал хэш из phpbb в битрикс – и о чудо – пасс подошел, НО при добавлении пароля через API сам хэш считался паролем и ещё раз хэшировался – мне же нужно было перетащить хэш “как есть”, для этого ещё один допил:
в начале скрипта дёргаем пароли старого форума
12345678$strSql = “SELECT user_id, user_password FROM “.PHPBB_PREFIX.“users;”;$rsPosts = mysql_query($strSql);if ($e = mysql_error($link)) {die($e);}while ($asPosts = mysql_fetch_assoc($rsPosts)) {$gtUsers[$asPosts[“user_id”]][‘pass’] = $asPosts[“user_password”];}В конце скрипта (когда юзера уже на месте)
1234567891011$arParams[“SELECT”] = array(“UF_*”);$rsUser = CUser::GetList($by=“ID”, $order=“ASC”, array(), $arParams);while ($arUser = $rsUser->GetNext()) {$phpbb_id = (int)$arUser[“UF_PHPBB_ID”];if(!$phpbb_id>0) continue;$pass = $gtUsers[$phpbb_id][‘pass’];$DB->Query(“UPDATE b_user SET PASSWORD=’$pass’ WHERE ID=”.$arUser[“ID”]);} - Совсем не понял зачем чистить special chars – это дело в __ConvertPosts я закоментил
- в forums.php трюк с $lastID у меня не прошел – т.к. не хватило оперативки для переноса всего форума, но каждый раз в ручную его править – не реально, поэтому в начале скриптика
$lastID = file_get_contents(‘last.id’);
define(‘LIMIT_FOR_ONE_STEP’, ‘500’);
и в цикле
$lastID = $arItem[“topic_id”];
file_put_contents(“last.id”,$lastID);
вроде всё
8 комментариев на «“Bitrix API: конвертация форума с PHPBB”»
Я немного не понял, как добавленные форумы сделать видимыми? А то у меня пусто.
Зайти будучи авторизированным с правами админа в режиме сайт, в режиме правки в настройки компонента форума – форумы должны автоматически встать в поле “показывать только выбранные форумы”
Тут глянь скриншотик
http://clip2net.com/clip/m77265/1305438514-clip-49kb.png
Пост, безусловно, полезный. Но раз намучившись с этим долбаным пхпбб на одном своем сайте (фантастическим образом исчезала учетная запись главного админа – постоянно перенастраивал все в БД), плюнул и твердо решил – проще заказывать эту работу. Так и действую. А вот битриксовый – впервые слышу. Надо будет посмотреть.
Спасибо, это действительно нужная информация. Давно уже думал уехать с phpbb – что-то он перестал мне нравится в последнее время
не раз уже слыхал слово Битрикс но что то никогда внимания не обращал
Спасибо за статью, в интернете много интересного, ваш сайт не исключение! Учусь кодировать, хоть примеры посмотрю!
Вы не могли бы выложить ваши измененные файлы скриптов?
[…] пару постов, где я подробно описал процесс миграции: Bitrix API: конвертация форума с PHPBB PHPBB 2 Битрикс — личные сообщения Но в данном случае […]