Ну вот наконец я заставил себя это сделать - написать техническую статью для переноса phpBB на Битрикс. Хотел оформить мастером, но много лишнего времени убил бы, но главное - очень плохо знаю phpBB, боялся что-то упустить. Так что под кат путь открыт только техническим специалистам. [spoiler] Сразу предупреждаю - по поводу где то или иное посмотреть в 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: Перед полным переносом форума протестируйте на нескольких топиках, мало ли. Только после тестовых запуском не забудьте очищать таблицы соответствий айдишников.
8. Теперь уберем баг в модуле форума Битрикса (на время, потом можете вернуть). Идем в /bitrix/modules/forum/classes/general/topic.php и ищем там метод добавления топика Add, коментим там Код$arFields["VIEWS"] = 1;
Я не знаю зачем это сделал разработчик форума. Если это не сделать, то все топики создадутся с просмотром равным единице.
вот это не совсем понял "Самое страшное - это в таблицу (имя таблицы определяется в секции констант основного файла) нужно занести соответствие старых ID форумов и новых. Ее структура следующая: ID | OLD_ID | NEW_ID. ID - автоинкремент, остальные поля int'овые. Автоинкремент необязателен, просто для порядка."
Исходя из ваших вопросов, вы не разработчик извините, мне сложно будет вам объяснить подробнее, чем написано. В статье дана скорее база материала по переносу, не сказала бы что подробно, да, но разработчику как подспорье скорее служит.
Если данное не отключено на хостинге, то работать будет, но скорее навредит, чем поможет. Так как браузер все равно коннект сбросит, и вы не увидите конца исполнения скрипта. Он будет работать в фоне, может работать часами, нагружая сервер, а то и вовсе уводя его в даун.
в форумах Битриксе этого нема ? user_timezone user_dateformat
P.S. Спасибо за Ваши оперативные комментарии на мои не совсем умные вопросы
а скриптик по зачистке форума я на удивление шустро написал сам (с битриском только знакомлюсь - пока очень доволен) (если вдруг скриптик кому понадобится - код на блоге выложил)
user_timezone пока нет (ни для пользователя, ни глобально), user_dateformat - для конкретного пользователя - тоже нет, но настраивается в компоненте форума общим форматом.
Еще стоит отметить - таблицы b_gp_old_bb_topics и b_gp_old_bb_posts нужно создавать в БД Битрикса! Я сначала создал в БД форума...
Если форум и сайт используют разные БД то таблица соответствия форумов должна быть создана в БД форума !!! а таблицы соответствия постов и топиков - в БД сайта !!!
смотрим код коннектимся к БД форума делаем проверочные селекты из табличек TBL_WITH_FORUM_IDS TBL_WITH_POSTS_IDS смотрим дальше $DB->Query("INSERT INTO ".TBL_WITH_TOPIC_IDS
получается что форумы и посты всё таки в БД форума, а топики в сайте ?
можно ли каким нить образом один-в-один перетащить ID ? чтоб, например, топики не по автоинкременту нумеровались, а такие же как в PHPBB (тоже и по юзерам, и по форумам и по постам)
В phpBB вроде тот же автоинкремент используется. Перенести можно, но в двух словах алгоритм и тонкости не опишешь. Да и прилично геморройно это, а плюсов не вижу.
Ещё раз заказали перенос с phpbb3 - вроде уже второй раз делаю и инструкции есть - а всё равно как в первый раз Свои новые ньюансы, как и было упомянуто.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».