Сразу предупреждаю - по поводу где то или иное посмотреть в phpBB не спрашивайте - я его админку открывал последний раз лет пять назад
И еще одно предупреждение - скрипт не просто для запуска, вы должны внимательно с ним ознакомиться, может быть внести правки.
Скрипт переноса написан под последние версии форума (в частности когда он переоделся). Можно легко заточить и под ранние версии. В частности придется поломать голову над атачем файлов - в phpBB можно цеплять несколько файлов к посту, а у Битрикса это появилось недавно. Это единственное ограничение, которое не позволяет скрипт с легкостью применять на ранних версиях форума Битрикс.
Да, еще важное замечание - перенесено максимально возможное, что может быть перенесено на Битрикс. То есть моды форума я не трогал понятно. Также не переносил вещи, которых нет в Битриксе. Но это только одна - опросы. Сами топики опросов перенесутся, но перестанут быть опросами. И да, я не трогал персональные сообщения, но там ничего сложного нет. Если потребуется - подскажу как лучше сделать.
Ну, теперь собственно перейдем к файлам переноса (я устал от здешнего отображения кодов, поэтому скинул на сервер с раскраской, ниже есть архив, содержащий все эти файлы):
Теперь подробнее о файлах и предварительных настройках.
Несколько слов о структуре файлов. Селект из БД вынесен за пределы Битрикса, потому что часто бывает что БД форума находится в другой базе нежели Битрикс. Может быть даже и друга кодировка. Если другая кодировка, то можно либо конвертить все текстовые поля, либо (что проще) сначала базу форума перекодировать.
Пару слов о пользователях. Они конечно все переносятся тоже. Их логином становиться имя на форуме. Имя/фамилия остаются пустыми. E-Mail тоже переносится. А вот с паролями туго. В одной версии phpBB они хранятся так, в другой иначе. Копаться и разбираться я не стал. Если вашим пользователям будет не лень после апдейта единственный раз напомнить пароль себе, то ни с чем и не надо заморачиваться. Если не хотите доставлять неудобств пользователям, можете писать обработчик для логирования старых пользователей. Тут уже каждый случай индивидуален. Также кое что о пользователях ниже еще.
А теперь порядок ваших действий:
1. Нудное занятие, которое я не стал автоматизировать и даже не написал никаких вспомогательных скриптов. Нужно создать форумы в Битриксе
2. Создаем две дополнительных таблицы, у меня они называются b_gp_old_bb_topics и b_gp_old_bb_posts для соответствия старых и новых ID-шников топиков и постов соответственно. Структура аналогичная: ID | OLD_ID | NEW_ID. ID - автоинкремент. Если другие названия, то измените в константах.
3. Добавляем иконки тем через админку Битрикса. Можем сразу и смайлы, но смайлы нам не потребуется. Подразумевается, что перед переносом вы вручную внесли смайлики в Битрикс с теми же кодами что и в phpBB. В файле vars.php в секции "ICONS" перечисляем соответствия старых ID иконок новым.
4. Идем в файл форума phpBB /include/constants.php, там находим константу POST_STICKY. Скорее всего она равна единице, но мало ли. Переносим ее в наш основной файл (она уже есть в секции "define_sections").
5. Очень внимательно заполняем defin'ы в секции "define_sections" обоих файлов. Кое какие пояснения по константам будут и ниже.
6. В файле vars.php в секции "TRUNCATE BB" перечисляем BB-коды, которые есть на старом phpBB форуме, но их нет в Битриксе. Там увидете примеры и поймете о чем речь. В стандартной поставке phpBB коды не отличаются, но, повторюсь, есть еще куча модов.
7. В скриптах обратите внимание на секцию "afterconnect section", в ней прописано действия с БД после соединения, может быть что-то еще. Исправьте или удалите.
8. Теперь уберем баг в модуле форума Битрикса (на время, потом можете вернуть). Идем в /bitrix/modules/forum/classes/general/topic.php и ищем там метод добавления топика Add, коментим там
Код
Я не знаю зачем это сделал разработчик форума. Если это не сделать, то все топики создадутся с просмотром равным единице.
$arFields["VIEWS"] = 1; |
9. А теперь придется немного покодить
10. На момент написания статьи при использовании стандартного метода добавления топика CForumTopic::Add, у форума не увеличивалось количество топиков. Это приходилось делать вручную. Убедитесь, умеет ли на вашей версии Битрикс сам апдейтить. Если нет, то оставьте в секции констант UPDATE_TOPIC_COUNT в положении Y, иначе переведите в N.
11. Переходим к пользователям. Необходимо добавить пользовательское свойство: тип число, код UF_PHPBB_ID, название "ID на форуме phpBB". Оно вам может понадобиться на случай авторизации старых пользователей. И еще, пользователи будут проверяться на предмет наличия их e-mail в базе. Если такой e-mail есть, то пользователь не будет создаваться, а браться существующей. Советую до переноса в Битриксе удалить дубли e-mail. Но в любом случае будет браться последний внесенный в базу логин. Если e-mail'a в базе найдено не будет, то будет проверяться есть ли в базе логин phpBB'шный. Если такой логин есть, то все равно создастся новый пользователь, но уже с логином равным e-mail'у.
12. Еще кое что о пользователях. В файле users.php определяется константа TBL_BANLIST. Это таблица, где хранятся забаненные пользователи. Если указано ее имя, то такие пользователи в Битриксе будут создаваться неактивными (другого способа запретить им писать не нашел). Если вы хотите даровать амнистию, то просто определите эту константу как "null".
13. Необходимо в настройках форума выставить максимально возможные размеры и вес аватар, потом можно вернуть на прежние позиции. Дело в том, что скрипт не будет проверять, соответствует ли загружаемый аватар требованиям, проверять будет система. И если он хоть на байт больше, то профайл форума для пользователя не создастся.
14. Уже под конец вспомнил. Те настройки соединения с БД, которые пишутся в начале исполняемых файлов могут НЕ ИМЕТЬ никакого отношения к Битриксу, так как форум может лежать вообще в отдельной базе. Такое часто бывает. Если они совпадают с Битриксом - нет проблем, пишите те же доступы.
UPD by Данил Грудзинский
Цитата
| Если форум и сайт используют разные БД то таблица соответствия форумов должна быть создана в БД форума, а таблицы соответствия постов и топиков - в БД сайта. |
Вот собственно и все, теперь как пользоваться.
Скачиваем , выкладываем их на сервер, где стоит Битрикс и так же есть возможность достучаться до форума phpBB. Я бросил их в корень сайта. Настраиваем все как описано выше и можно запускать.
Сначала переносим пользователей (файл users.php), потом топики и посты форума (forum.php).
Самое интересное (и глупое) - как их запускать. Скорее всего за один запуск скрипта все не перенесется и придется несколько подходов делать. Я не стал делать никакой автоматизации, так как форумы, которые переносил, не такие уже супер-большие.
В общем, схема такая:
1. В самом верху файла ($lastID), которые запускаем, прописываем последний перенесенный ID. На первом шаге он будет равен нулю.
2. Запускаем скрипт через браузер.
3. В самом концу списка выведется последний добавленный ID (см. скрин), заносим его в ) $lastID. Повторяем п.1-3 пока не будет все перенесено.
А теперь немного о том, зачем мы создавали дополнительные таблицы и запоминали соответствие старых ID'шников новым. Это нужно чтобы сохранились переходы по старым ссылкам.
Для начала создадим три правила обработки адресов:
1. Для пользователей. У меня выглядит так:
Условие: #^/memberlist.php\?mode=viewprofile&u=(.*)#
Правило: /redirect/forum_user.php?id=$1
2. Для форумов:
Условие: #^/viewforum.php\?f=(.*)#
Правило: /redirect/forum.php?id=$1
3. Для топиков:
Условие: #^/viewtopic.php\?f=(.*)&t=(.*)#
Правило: /redirect/forum_topic.php?f=$1&t=$2
Вы конечно можете создать и другие правила (например, для конкретного сообщения, данных хватает), но мне хватило и этих. И конечно адреса могут отличаться.
Вот как у меня опять же выглядят скрипты обработки правил выше:
1.
2.
3.
Вот собственно и все. Повторюсь, статья для разработчиков, а не для клиентов. Скрипты не есть мастер, их надо будет подтачивать напильником. Я просто хотел донести основные моменты переноса, думаю мне это удалось.
Ну и напоследок, если кто-то решит эти вкусности оформить в виде мастера - бога ради, буду только рад, мое имя упомянуть не забудьте при распространении
PS: Перед полным переносом форума протестируйте на нескольких топиках, мало ли. Только после тестовых запуском не забудьте очищать таблицы соответствий айдишников.










Слушай, а давай сделаешь мастер переноса? Мы даже немного профинансируем разработку. В скором времени мы откроем маркетплейс и будет хорошо, если там появится мастер переноса форума с phpBB на Битрикс.
Но я думаю можно будет как-нибудь выкрутиться и учесть все по возможности.
К открытию маркетплейс я тогда постараюсь мастер сделать, может к тому времени появится и помощник в виде знатока phpBB
Я надеюсь, к концу недели ребята смогут открыть бету системы обновлений для модулей партнеров.
Надеюсь будет спам по партнерам и клиентам об открытии такого местечка, но после наполнения его партнерами
То есть хотелось бы два анонса - один просто в форуме или блоге и второй уже через некоторое время - анонс по всей сети партнеров и клиентов.
Надеюсь не сильно наглое пожелание
В разных случаях были разные проблемы... Я об этом ничего не расскажу, так как это вотчина наших программеров.
Если что интересует, опытом поделиться или поболтать на тему - обращайтесь, дам контакт человека, который это делал...
Единственное что для лёгкости восприятия можно было бы дописать в пункте 14 что если форум и сайт используют разные БД то таблица соответствия форумов должна быть создана в БД форума, а таблицы соответствия постов и топиков - в БД сайта. Оно то очевидно, но свои минут 20 тыканья носом забирает.
Уже толком не помню нюансы скрипта, дописал вашим авторством просто.
Но, если не ошибаюсь, архитектура форумов IPB и phpBB похожи.
Так что, по-любому придётся что-то выдумывать, чтобы корректно перенести информацию, которая не поддерживается форумом битрикса
Вот и думаю теперь, что делать с прикреплёнными файлами, голосовалками (чекбоксы и радиокнопки), прикреплёнными темами и пр.
Ну да, от "штук" придется отказываться, которых нет в Битриксе.
А тут-то какие проблемы? Файлы в форуме Битрикса можно несколько к посту прицеплять, опросы тоже появились.
Про несколько файлов в посте не знал. Спасибо.
А несколько опросов в посте?
В целом Вы меня порадовали. Хоть ИПБ и хорошая штука, но хочется иметь сайт на одном движке
Есть понятие вопроса и варианта ответов (через модули опросов).
ИПБ разбаловал народ, все-таки это узкоспециализированная команда, поэтому и напихали туда всяких вкусняшек. Но форум Битрикса уже вполне рабочий.
А если будет реализовано вот это: то Битрикс будет составлять ооочень сильную конкуренцию на рынке форумов.
Ну и да, слабое место Битрикса - это нет шаблонов, я не знаю почему их никто не рисует. За те же 50-70 баксов разлетались бы только так, ну и бесплатные в виде саморекламы тоже.
Да, Вы правы. Я неправильтно выразился
У вас не достаточно прав на просмотр форума.
А, это в группу надо вступить
Довольно полезная группа, некая обратная связь Битрикса с нашим миром
Пока поизучаю.
Теперь вот, через 3 года "успешного" фунциклирования клиент уходит с БУСа...
Существует ли скрипт-конвертер с форума Битрикса на IPB или vBulletin?
Не встречал.
А чем не устроил Битрикс, если не секрет?
А вопрос не ко мне, но...
В общем, народ устал от ожидания улучшений. Тот же IPB - это же практически готовое, современное и красивое сообщество, а не архаичный придаток к бизнес-CMS.
Опять же, клиент (и я) устали при каждом обновлении форума тратить час-другой или даже день-второй на правку файлов нашей локализации, которая в БУСе отсутствует как данность, хотя обещана года два назад...
Я ему ответил просто - скажи что тебе лично не хватает? Я сделаю.
Он не нашел что возразить.
PS: Вот таким вот как ваш заказчик я и посвятил свой
Воспользовались вашим скриптом, все нормально. Но посты не переносятся
Может быть были какие-то изменения в структуре битрикса? не могли бы вы проверить свой скрипт на последней версии битрикса?
Нет, насколько я помню тогдашнюю архитектуру и знаю сегодняшнюю - они не отличаются.
Проверять скрипт на работоспособность к сожалению я не могу по причине нехватки времени.
UPD
Разобрался. Виноват был запрос mysql_query("SET NAMES 'UTF-8'"), подставил в него нужную кодировку и всё заработало.
Еще стоит отметить - таблицы b_gp_old_bb_topics и b_gp_old_bb_posts нужно создавать в БД Битрикса! Я сначала создал в БД форума...
Лично у меня почему-то скрипт ругался на бан-лист. После того как я поставил null - сработал. Важно заметить что здесь null - это строка "null", а не просто значение null
И в конце - ОГРОМНОЕ СПАСБО!!!
Еще стоит отметить - таблицы b_gp_old_bb_topics и b_gp_old_bb_posts нужно создавать в БД Битрикса! Я сначала создал в БД форума...
Лично у меня почему-то скрипт ругался на бан-лист. После того как я поставил TBL_BANLIST равное null - сработал. Важно заметить что здесь null - это строка "null", а не просто значение null
#Трембач Вячеслав - у меня сначала тоже посты не добавлялись. Просто в БД phpBB были разделены посты и тексты постов. На 157 строке forum.php нужно изменить запрос чтоб выбирал текст из таблицы phpbb_posts_text.
Так же трабл был с опубликованием - все сообщения добавлялись как неопубликованные: Почему-то в таблице phpbb_posts я не нашел свойства типа "опубликован ли топик". Поэтому в этом свойстве тупо поставил "Y"
И в конце - ОГРОМНОЕ СПАСБО!!!
Но каждый раз его нужно допиливать и подтачивать под конкретную версию форума, учитывая ее модификации и прочее.
Именно поэтому данные скрипты не оформлены в виде мастера, они лишь знакомят разработчиками с принципами переноса и на что стоит обратить внимание.
Как сюда его выложить - не знаю.
Кому нада - пишите мне Вконтакте (vkontakte.ru/beautycms). На форуме битрикса бываю раз в месяц....
- это вы прямо физически бываете на форуме битрикса и вам до него ездить далеко? А так если бы он был к вам поближе, то и заглядывали бы почаще?
Если Ваши базы в UTF, то не забудьте все str_replace переделать в mb_ereg_replace. Иначе запорятся все bb-коды.
Код$arFields["VIEWS"] = 1;
Я не знаю зачем это сделал разработчик форума. Если это не сделать, то все топики создадутся с просмотром равным единице.
Поправка. Теперь надо комментить код
"Самое страшное - это в таблицу (имя таблицы определяется в секции констант основного файла) нужно занести соответствие старых ID форумов и новых. Ее структура следующая: ID | OLD_ID | NEW_ID. ID - автоинкремент, остальные поля int'овые. Автоинкремент необязателен, просто для порядка."
в таблицу Битрикса ?
что за основной файл ?
Основной файл -
set_time_limit(0);
ignore_user_abort();
user_timezone
user_dateformat
P.S. Спасибо за Ваши оперативные комментарии на мои не совсем умные вопросы
а скриптик по зачистке форума я на удивление шустро написал сам
(с битриском только знакомлюсь - пока очень доволен)
(если вдруг скриптик кому понадобится - код на блоге выложил)
вытащить инфу из таблиц PHPBB_categories и PHPBB_forums и на основе этих данных создать форумы
то таблица соответствия форумов должна быть создана в БД форума !!!
а таблицы соответствия постов и топиков - в БД сайта !!!
коннектимся к БД форума
делаем проверочные селекты из табличек
TBL_WITH_FORUM_IDS
TBL_WITH_POSTS_IDS
смотрим дальше
$DB->Query("INSERT INTO ".TBL_WITH_TOPIC_IDS
получается что форумы и посты всё таки в БД форума, а топики в сайте ?
$DB->Query("INSERT INTO ".TBL_WITH_POSTS_IDS
похоже все правы - просто лишняя проверка в базе форума на TBL_WITH_POSTS_IDS
чтоб, например, топики не по автоинкременту нумеровались, а такие же как в PHPBB
(тоже и по юзерам, и по форумам и по постам)
Антон - спасибо за материал огромное !
кое-какие моменты у меня по-своему вышли - были подводные камни
кому интересны мои дополнения и модификации -