.
2 Июль 2018

Конвертация форума с платформы 1С-Битрикс на wpForo

Печально констатировать но факт — 1С Битрикс с момента запуска модуля Форум для своего движка, на сегодняшний день практически остановился в развитии 🙁
Любой современный форумный движек легко обходит Битрикс по своим возможностям, а так же быстроте работы — оно и понятно, форумный движек встроен модулем в авианосец под названием Битрикс.
Полное нежелание усовершенствовать модуль компанией лично мне вообще непонятно.
На сайте в разделе форум idea.1c-bitrix.ru для разработчиков сгенерировали огромное количество пожеланий, которые и в данный момент остаются не реализованными.
Например, вот моё пожелание с 2014 ого года Открытие темы форума с первого непрочитанного сообщения так до сих пор остаётся не реализованным 🙁

Ладно, вернёмся к сабжу — лет 5 назад я конвертировал форум с phpbb на 1С Битрикс — и вот сейчас тот же клиент обратился ко мне с обратной просьбой — перенести форум с движка 1С Битрикс на форум wpForo (плагин к WordPress).

Поставленную задачу я реализовал следующим образом:
1. Этап — выгрузка форума (пользовательские данные, форумы, топики, сообщения) в файлы в формат Mysql dump с помощью Bitrix API (CUser::GetList, CForumNew::GetList, CForumTopic::GetList, CForumMessage::GetList) и вложенные файлы в формат хранения wpForo
/wp-content/uploads/wpforo/attachments/$UID/ ($UID — айди пользователя), так же на лету для картинок в папку /wp-content/uploads/wpforo/attachments/$UID/thumbnail/ создавал превью изображения с помощью CFile::ResizeImageFile
Из подводных камней на данном этапе отмечу невозможность с помощью Bitrix API получать файловые вложения к сообщению, которые просто прикреплены, но не вставлены в тело сообщения.


решение такое - сначала регуляркой вытащил те вложения, что в теле сообщения
preg_match_all('!\[FILE ID\=(\d+)(.*?)\]!', $arMessage["POST_MESSAGE"], $match)
айдишники упадут в массив $match[1]
потом прямым запросом получаем ВСЕ вложения в массив $arAttachments
$strSql = "SELECT * FROM b_forum_file WHERE MESSAGE_ID=".$arMessage["ID"];
$res = $DB->Query($strSql);
if($ar = $res->GetNext()) {
$arAttachments[] = $ar[FILE_ID];
...
}
дальше думаю понятно :)

далее копируем папку с вложениями и превью картинками в Вордпресс и загружаем сгенерированные скриптом sql дапмы с данными форума, после чего в админке wpForo удаляем все данные кэша и вуаля!

3. Делаем 301й редирект со старых адресов на новые — в данном случае ЧПУ осталось тем же, поэтому достаточно просто убрать .php (только для форума)

# BEGIN Forum 301 redirect

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/forum/
RewriteRule (.*)\.php$ $1 [R=301,L]

# END Forum 301 redirect

PS
Так же обратите внимание на поля, отвечающие за «открытость» форумов
UPDATE `p_wpforo_topics` SET closed = 0;
UPDATE `p_wpforo_posts` SET is_answer = 0;
UPDATE `p_wpforo_posts` SET private = 0, status = 0;

Так же после загрузки нужно обратить внимание на иерархию и сортировку самих форумов — у меня они не отображались, пока я их не запихал 2м уровнем в группу «все форумы»

рубрики: Bitrix, Программирование | Комментарии (0)

Яндекс.Метрика