Миграция из XenForo¶
Forum Pro импортирует форум XenForo 2.2 из обычного дампа MySQL с его таблицами и копии двух папок из установки. Участники сохраняют рабочие пароли, BBCode преобразуется в Markdown, вложения и аватары переносятся прямо с диска в ваше хранилище, а импорт можно возобновить и запускать повторно.
Что потребуется¶
Попросите того, кто отвечает за установку XenForo, о двух вещах:
- Дамп схемы и данных таблиц
xf_*. Подойдёт обычныйmysqldump xenforo > dump.sql; на общих хостингах добавьте--no-tablespaces. Экспорт из phpMyAdmin тоже работает. Дамп только с данными (mysqldump -t) не принимается, потому что без операторовCREATE TABLEневозможно определить названия столбцов. - Две папки из установки:
internal_data/attachmentsиdata/avatars. XenForo ограничивает скачивание вложений правами, поэтому файлы читаются с диска, а не загружаются по HTTP.
Дамп потоково разбирается в PHP. MySQL не нужно устанавливать на новом сервере, а дамп размером в несколько гигабайт обрабатывается потоково с постоянным потреблением памяти.
Команда¶
bin/plugin forum-pro import-xenforo dump.sql \
--source-url https://forum.example.org \
--xf-root /path/to/xenforo
| Параметр | Назначение |
|---|---|
--source-url |
Базовый URL старого форума, включая подпапку, например /community. По нему распознаются и перезаписываются внутренние ссылки в сообщениях. |
--xf-root |
Корень установки XenForo; в нём находятся internal_data/attachments и data/avatars. |
--attachments-dir, --avatars-dir |
Указать каждую папку отдельно, переопределяя --xf-root. |
--skip-files |
Импортировать только данные. Полезно для первого просмотра до получения папок. |
--prefixes tag|title|skip |
Что делать с префиксами тем: сделать их метками (по умолчанию), добавить [Prefix] к заголовку или отбросить. |
--skip-pms |
Не импортировать беседы (личные сообщения). |
--default-section |
Название раздела для форумов, над которыми нет категории верхнего уровня. |
Дамп может быть сжат gzip. Дамп размером 55 МБ с 6 000 сообщений и 2 500 вложений импортируется примерно за десять секунд в пустую базу данных.
Что переносится¶
Участники и идентификация
- Участники с рабочими паролями. XenForo 2 хранит bcrypt, который Forum Pro проверяет нативно; учётные записи с хешем XenForo 1 проверяются через помеченный устаревший формат и обновляются до bcrypt при первом входе. Имена пользователей с пробелами преобразуются в допустимые имена (
Jane DoeстановитсяJane_Doe), а оригинал сохраняется как отображаемое имя. - Администраторы и модераторы как роли модераторов. Блокировки и отключённые учётные записи — как приостановки.
- Пользовательские группы пользователей с членством. Четыре стандартные группы XenForo не создаются.
- Трофеи как вручную выданные значки и пользовательские звания.
- Подписи и аватары.
Структура и контент
- Дерево узлов. Категория верхнего уровня становится разделом; каждый форум становится категорией внутри раздела своего самого верхнего предка. Более глубокая вложенность сплющивается, а не воспроизводится, потому что в Forum Pro ровно два уровня. Узлы страниц и ссылок пропускаются. Форум, закрытый для новых сообщений, становится доступным только сотрудникам.
- Темы с их состояниями закрепления, открытости и удаления и счётчиками просмотров. Темы-редиректы пропускаются.
- Сообщения с преобразованием BBCode в Markdown: жирный, курсив, зачёркивание, заголовки, списки, таблицы, цитаты с указанием автора, код и встроенный код, спойлеры (как цитата с заголовком, поскольку Forum Pro никогда не выводит необработанный HTML), изображения, упоминания
[USER], ссылки[ATTACH]и вставки[MEDIA]. Теги только оформления, такие как цвет, размер, шрифт и выравнивание, теряют разметку, но сохраняют текст. - Историю изменений как ревизии сообщений.
- Вложения, перенесённые в контентно-адресуемое хранилище. Изображения отображаются внутри сообщения, остальные файлы — ссылками.
- Реакции, сопоставленные с настроенными типами (см. ниже).
- Метки и префиксы тем.
- Принятые ответы из форумов вопросов.
- Закладки, опросы с голосами и отслеживание тем и форумов.
- Беседы как личные сообщения.
Ссылки
- Внутренние ссылки между темами, сообщениями, форумами и участниками перезаписываются на новые адреса — как в понятной форме, так и в форме
index.php?threads/....
Реакции¶
В XenForo шесть реакций (Like, Love, Haha, Wow, Sad, Angry), а в Forum Pro четыре (like, heart, laugh, confused). Типы реакций — это просто конфигурация, поэтому чище всего настроить шесть реакций XenForo до импорта:
reactions:
enabled: true
types:
like: 1
heart: 1
laugh: 0
wow: 0
sad: 0
angry: 0
emoji:
like: "👍"
heart: "❤️"
laugh: "😄"
wow: "😮"
sad: "😢"
angry: "😡"
Импортёр сопоставляет каждую реакцию XenForo по её названию с вашими reactions.types. Название, совпадающее с типом, сохраняет свою идентичность, а два синонима понимаются особо: Love становится heart, а Haha становится laugh. Реакция, для которой нет типа, становится like, поэтому ничего не теряется даже с четырьмя по умолчанию. Реакции из дополнений работают так же: назовите тип по ним, и они перенесутся как сами собой.
Вставки медиа¶
Теги [MEDIA] становятся ссылками на оригинальное сообщение, восстановленными по id провайдера, который хранит XenForo. Распознаются YouTube, Vimeo, Twitter/X, Instagram, TikTok, Imgur, Reddit, Facebook, Dailymotion, SoundCloud, Giphy, Flickr, Pinterest и Spotify. Провайдер, который не распознан, отбрасывается и учитывается в отчёте.
Чтение отчёта¶
Импорт заканчивается таблицей счётчиков. Большинство из них — просто инвентаризация; некоторые говорят о точности переноса:
| Показатель | Значение |
|---|---|
transform regex bailouts |
Сообщение оказалось слишком сложным для преобразователя BBCode, поэтому сохранило исходный BBCode, а не потеряло текст. Ноль — норма. |
posts transform fallbacks |
Сообщение получилось бы пустым (в нём были только теги без эквивалента), поэтому сохранило BBCode. |
attachments missing |
Сообщение ссылалось на файл, которого не было в предоставленных папках. |
attachments unresolved |
Сообщение ссылалось на id вложения, которого уже нет в самом дампе. Исправлять нечего; XenForo уже его потерял. |
media unsupported |
Вставка от провайдера без известного шаблона ссылки. |
mentions unresolved |
Упоминание @mention участника, которого нет в дампе, обычно удалённой учётной записи. |
passwords dropped |
Учётная запись со схемой пароля, которую Forum Pro не может проверить, например из дополнения. Таким участникам нужно один раз воспользоваться сбросом пароля. |
Идемпотентность¶
Каждая импортированная строка несёт свой id XenForo. Повторный запуск прерванного импорта никогда не создаёт дубликаты, а повторный запуск со свежим дампом перед переключением добавляет только новое.
Внутри дамп один раз читается в буферный файл во временной папке системы, привязанный к файлу дампа. Повторный запуск того же файла использует этот буфер, поэтому повторные запуски быстрые.
Размещение по старому адресу¶
Большинство форумов XenForo живут на собственном имени хоста, часто в его корне. Чтобы сохранить адрес, подключите форум в корне сайта и позвольте редиректам со старых URL обрабатывать старые формы URL на том же хосте:
frontend:
route: ''
legacy_redirects:
enabled: true
xenforo:
hosts: ['forum.example.org']
base_path: ''
target_base: ''
catch_all: false
Сделайте страницу форума домашней страницей Grav (system.home.alias), как описано в разделе Установка. Тогда посетитель, пришедший на /threads/some-title.123/, попадёт в нужную тему, не покидая хост.
Если форум жил в подпапке, установите base_path: '/community'; если старое имя хоста исчезает полностью, catch_all: true отправляет всё неотображённое под этим путём на главную страницу форума. В отличие от источника Discourse, для XenForo по умолчанию нет catch-all, потому что остальная часть старого хоста обычно продолжает работать.
| Путь XenForo | Перенаправляется на |
|---|---|
/threads/<slug>.<id>/ и /threads/<slug>.<id>/post-<n> |
Тему, к правильному сообщению |
/posts/<id>/ |
Сообщение в его теме |
/forums/<slug>.<id>/ |
Категорию |
/members/<name>.<id>/ |
Профиль участника |
/tags/<tag>/ |
Метку |
/index.php?threads/<slug>.<id>/ |
То же самое для установок без понятных URL |
Предлагаемый план переключения¶
- Разверните новый форум на тестовом хосте. Сначала настройте реакции, группы, защиту от спама и оформление, потому что реакции, в частности, сопоставляются во время импорта.
- Получите дамп и две папки и запустите импорт. Прочитайте отчёт.
- Проверьте результат. Откройте несколько сообщений с насыщенным BBCode: анонс релиза со списками и ссылками, предложение с таблицей, длинную ветку с цитатами, сообщение, состоящее в основном из вложений. Проверьте аватар участника, опрос и личное сообщение.
- Сделайте свежий дамп незадолго до переключения и повторите импорт, чтобы забрать изменения.
- Закройте старый форум для новых сообщений.
- Направьте имя хоста на новый сайт с включёнными редиректами со старых URL.
После импорта¶
bin/plugin forum-pro recount # исправить денормализованные счётчики
bin/plugin forum-pro reindex # построить поисковый индекс
bin/plugin forum-pro integrity # отчёт о согласованности только для чтения
Что нужно знать¶
- Пользовательский BBCode из дополнений не имеет преобразователя, поэтому его теги удаляются, а текст сохраняется. Если форум сильно зависит от такого, сообщите нам, какого именно; распространённые добавляются быстро.
- Одиночный
[word]без закрывающего тега сохраняется как текст, потому что сообщения в стиле списка изменений помечают записи именно так, и XenForo показывает их дословно. - Журнал показателей не заполняется задним числом. Графики активности на панели управления накапливаются с момента установки Forum Pro; итоговые значения сразу верны.
- Ссылки на ещё более старую платформу остаются как были. Форум, пришедший в XenForo откуда-то ещё, часто хранит URL той платформы в старых сообщениях. Это не ссылки XenForo, поэтому импортёр их не трогает.