Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Переезжаем с 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
Вы конечно можете создать и другие правила (например, для конкретного сообщения, данных хватает), но мне хватило и этих. И конечно адреса могут отличаться.
Вот собственно и все. Повторюсь, статья для разработчиков, а не для клиентов. Скрипты не есть мастер, их надо будет подтачивать напильником. Я просто хотел донести основные моменты переноса, думаю мне это удалось.
Ну и напоследок, если кто-то решит эти вкусности оформить в виде мастера - бога ради, буду только рад, мое имя упомянуть не забудьте при распространении Но, повторю, прежде чем писать мастер, надо хорошо знать phpBB - как он менялся от версии к версии, какие есть распространенные моды и прочее и прочее. Я не обладаю такими знаниями.
PS: Перед полным переносом форума протестируйте на нескольких топиках, мало ли. Только после тестовых запуском не забудьте очищать таблицы соответствий айдишников.