+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Переезжаем с phpBB на форум Битрикс

Ну вот наконец я заставил себя это сделать - написать техническую статью для переноса phpBB на Битрикс. Хотел оформить мастером, но много лишнего времени убил бы, но главное - очень плохо знаю phpBB, боялся что-то упустить. Так что под кат путь открыт только техническим специалистам.

Сразу предупреждаю - по поводу где то или иное посмотреть в phpBB не спрашивайте - я его админку открывал последний раз лет пять назад :)

И еще одно предупреждение - скрипт не просто для запуска, вы должны внимательно с ним ознакомиться, может быть внести правки.

Скрипт переноса написан под последние версии форума (в частности когда он переоделся). Можно легко  заточить и под ранние версии. В частности придется поломать голову над атачем файлов - в phpBB можно цеплять несколько файлов к посту, а у Битрикса это появилось недавно. Это единственное ограничение, которое не позволяет скрипт с легкостью применять на ранних версиях форума Битрикс.

Да, еще важное замечание - перенесено максимально возможное, что может быть перенесено на Битрикс. То есть моды форума я не трогал понятно. Также не переносил вещи, которых нет в Битриксе. Но это только одна - опросы. Сами топики опросов перенесутся, но перестанут быть опросами. И да, я не трогал персональные сообщения, но там ничего сложного нет. Если потребуется - подскажу как лучше сделать.

Ну, теперь собственно перейдем к файлам переноса (я устал от здешнего отображения кодов, поэтому скинул на сервер с раскраской, ниже есть архив, содержащий все эти файлы):
forum.php
users.php
vars.php
Теперь подробнее о файлах и предварительных настройках.

Несколько слов о структуре файлов. Селект из БД вынесен за пределы Битрикса, потому что часто бывает что БД форума находится в другой базе нежели Битрикс. Может быть даже и друга кодировка. Если другая кодировка, то можно либо конвертить все текстовые поля, либо (что проще) сначала базу форума перекодировать.

Пару слов о пользователях. Они конечно все переносятся тоже. Их логином становиться имя на форуме. Имя/фамилия остаются пустыми. E-Mail тоже переносится. А вот с паролями туго. В одной версии phpBB они хранятся так, в другой иначе. Копаться и разбираться я не стал. Если вашим пользователям будет не лень после апдейта единственный раз напомнить пароль себе, то ни с чем и не надо заморачиваться. Если не хотите доставлять неудобств пользователям, можете писать обработчик для логирования старых пользователей. Тут уже каждый случай индивидуален. Также кое что о пользователях ниже еще.

А теперь порядок ваших действий:
1. Нудное занятие, которое я не стал автоматизировать и даже не написал никаких вспомогательных скриптов. Нужно создать форумы в Битриксе :) Но это еще не самое страшное. Самое страшное - это в таблицу (имя таблицы определяется в секции констант основного файла) нужно занести соответствие старых ID форумов и новых. Ее структура следующая: ID | OLD_ID | NEW_ID. ID - автоинкремент, остальные поля int'овые. Автоинкремент необязателен, просто для порядка.

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. А теперь придется немного покодить :) А именно, написать функцию выдергивания вложений __GetAttachmentsArray (которая в файле forum.php). Почему я не стал ее писать. Потому что заметил, что на одном форуме файлы хранятся так, на другом иначе. Этот phpBB не поймешь. Но там особо ничего сложного нет. Ей передается id поста в старом форуме, а вы уже дергаете файл(ы) и возвращаете их массив. В комментариях функции приведен пример. Вложения хранятся в таблице %attachments%.

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. Для топиков


Вот собственно и все. Повторюсь, статья для разработчиков, а не для клиентов. Скрипты не есть мастер, их надо будет подтачивать напильником. Я просто хотел донести основные моменты переноса, думаю мне это удалось.

Ну и напоследок, если кто-то решит эти вкусности оформить в виде мастера - бога ради, буду только рад, мое имя упомянуть не забудьте при распространении :) Но, повторю, прежде чем писать мастер, надо хорошо знать phpBB - как он менялся от версии к версии, какие есть распространенные моды и прочее и прочее. Я не обладаю такими знаниями.

Файл переноса

PS: Перед полным переносом форума протестируйте на нескольких топиках, мало ли. Только после тестовых запуском не забудьте очищать таблицы соответствий айдишников.

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA