Где мы находимся сейчас?
Кратко: Мы усердно работаем над выпуском XenForo 2.4 как можно быстрее, но это занимает больше времени, чем ожидалось, из-за изменений в объеме работ и стратегических решений дождаться определенных обновлений, которые положительно скажутся на долгосрочном развитии. Объясню причину на наглядном примере:
Процесс разработки программного обеспечения подобен путешествию по стране с множеством пунктов назначения.
Когда вы приступаете к разработке версии 2.4, вы не просто едете в ближайший город. Вам предстоит проложить маршрут через неизведанную местность с запланированными промежуточными пунктами — каждым пунктом является крупная веха или крупный релиз функционала.
Но сложность в том, что ландшафт постоянно изменяется по мере продвижения:
Нельзя фокусироваться только на достижении ближайшей остановки. Необходимо оценивать, как каждое принятое решение отразится на дальнейшем маршруте. Сокращение маршрута ради ускорения выпуска 2.4 может привести к проблемам при попытке добраться до версий 3.0, 4.0 или даже 5.0.
Именно поэтому происходят изменения объема работ: опытные разработчики постоянно корректируют маршрут, исходя из новой информации, чтобы обеспечить успешное достижение не только ближайшего пункта, но и всех дальнейших ориентиров.
Задержки — это не обходные пути, а необходимые корректировки курса, гарантирующие устойчивость долговременного путешествия.
Будем чуть менее загадочными и поясним конкретные сложности, с которыми столкнулись:
Почти спустя 8 лет после релиза XenForo 2.0 многие используемые нами технологии заметно устарели, принятые ранее решения стали тормозить разработку больше, чем хотелось бы, и в целом, XenForo как фреймворк перестал быть таким же эффективным инструментом, как раньше. Решение могло бы заключаться в полном перезапуске с нуля, но мы пришли к выводу, что на данном этапе это не обязательно.
Вместо этого в ближайшие несколько версий, включая 2.4, мы будем пытаться вносить постепенные архитектурные изменения в фреймворк, чтобы оснастить нас лучшими инструментами для улучшения опыта как разработчиков, так и пользователей. Особое внимание уделяем реализации функциональных возможностей, ставших стандартом в других фреймворках, таких как Laravel.
Вполне вероятно, что к выходу версии добавятся новые функции от уважаемых разработчиков, таких как Xon и @digitalpoint, если у нас будет время реализовать их. Иначе они дождутся следующей версии.
Очень важно сохранять перспективу. Версия XenForo 2.2 вышла в сентябре 2020 года, а 2.3 — почти четыре года спустя. Версия 2.4 выйдет гораздо раньше, чем через три года.
Но, полагаю, вы открыли эту страницу, чтобы узнать, что нового, верно? Давайте разбираться!
Чтобы установить или обновить XenForo до версии 2.4, вам необходимо убедиться, что в вашем хостинговом окружении установлена библиотека PDO с драйвером mysql.
Кроме того, в PDO реализовано несколько полезных улучшений качества жизни, таких как привязка именованных параметров, например:
Хотя, оглядываясь назад, это может оказаться менее полезным, чем казалось вначале... (об этом подробнее позже).
Особенно ценна SQLite для опытных разработчиков, особенно тех, кто занимается автоматизированным развертыванием (DevOps), так как она великолепно подходит для автоматического тестирования — вы можете мгновенно запустить полную изолированную базу данных для каждого теста. Официально мы продолжим рекомендовать MySQL для производственного окружения, но SQLite для тестов и разработки очень привлекательна, и мы рады предложить её вам уже в составе XenForo 2.4.
Но как быть со всеми существующими SQL-запросами в коде?
Экземпляр этого билдера запросов автоматически компилирует правильный SQL-диалект в зависимости от используемой базы данных. Мы переписали все существующие запросы в приложении (включая официальные плагины), чтобы использовать новый билдер запросов, включая запросы, генерируемые компонентами Finder и SchemaManager, для обеспечения поддержки SQLite.
Впрочем, вы не обязаны использовать его. Вы можете продолжать писать запросы напрямую для поддержки как MySQL (так, как это делается сейчас), так и SQLite или же вообще забыть о поддержке SQLite (правда, это может затруднить использование вашего плагина пользователями, выбравшими SQLite).
Это также открывает перспективы для поддержки других баз данных в будущем. Хотя конкретных планов пока нет, теперь возможна поддержка Microsoft SQL Server и PostgreSQL. Любой желающий может легко написать собственные адаптеры и грамматические классы для билдера запросов, чтобы добавить необходимую поддержку, если это понадобится.
Чтобы решить эту проблему, мы рады сообщить, что выпустим бесплатный и открытый плагин для PhpStorm (помогите нам поддерживать его
), который обеспечит автодополнение названий таблиц и столбцов.
Вот как это выглядит в действии:
Посмотреть вложение 322589-b08f75fa3cba8f63c60da2845e10201d.mov
Мы поддерживаем методы dump, dd, dumpSimple, ddSimple, dumpToFile и dumpToFileNamed в любом месте цепочки вызовов билдера запросов. Эти методы регистрируют событие, срабатывающее непосредственно перед выполнением итогового запроса, что также работает с агрегатными методами, такими как count и sum.
Кстати, о средствах отладки запросов — мы также обновили внешний вид вывода отладочной информации. Теперь он улучшился за счёт лучшего использования цветов как в светлом, так и в тёмном режиме, а также подсветки синтаксиса и форматирования для запросов к базе данных:

Используя встроенный веб-сервер PHP, вы можете быстро поднять сервер для разработки, не прикасаясь к конфигурациям веб-сервера или полнофункциональным окружениям вроде Herd, WAMP, MAMP или Docker.
Интерпретатор заранее загружает общие переменные, такие как $app, $db, $em и многие другие, которые могут пригодиться. Полный список переменных можно просмотреть командой ls -l --vars, а поведение предварительной загрузки отключить флагом --without-vars.
Можно использовать опцию --execute, чтобы передать код для непосредственного выполнения, что удобно для быстрых одноразовых скриптов. Или передавать пути файлов в качестве аргументов, чтобы включить их при старте REPL, что полезно для общего кода начальной настройки. REPL также поддерживает флаг --with-commands, позволяющий вызывать другие команды XenForo CLI прямо из оболочки.
Документация сайта Psysh может стать хорошим справочным руководством для начала работы с этим инструментом:

Кратко: Мы усердно работаем над выпуском XenForo 2.4 как можно быстрее, но это занимает больше времени, чем ожидалось, из-за изменений в объеме работ и стратегических решений дождаться определенных обновлений, которые положительно скажутся на долгосрочном развитии. Объясню причину на наглядном примере:
Процесс разработки программного обеспечения подобен путешествию по стране с множеством пунктов назначения.
Когда вы приступаете к разработке версии 2.4, вы не просто едете в ближайший город. Вам предстоит проложить маршрут через неизведанную местность с запланированными промежуточными пунктами — каждым пунктом является крупная веха или крупный релиз функционала.
Но сложность в том, что ландшафт постоянно изменяется по мере продвижения:
- Открываются новые дороги (появляются лучшие технологии),
- Мосты смываются наводнениями (зависимости ломаются или устаревают),
- Находятся живописные маршруты, полезные будущим путешественникам (возможности архитектурных улучшений),
- Меняются погодные условия (эволюционируют рыночные требования и потребности пользователей),
- Автотранспорт неожиданно нуждается в ремонте (необходимо устранить техническую неполадку).
Нельзя фокусироваться только на достижении ближайшей остановки. Необходимо оценивать, как каждое принятое решение отразится на дальнейшем маршруте. Сокращение маршрута ради ускорения выпуска 2.4 может привести к проблемам при попытке добраться до версий 3.0, 4.0 или даже 5.0.
Именно поэтому происходят изменения объема работ: опытные разработчики постоянно корректируют маршрут, исходя из новой информации, чтобы обеспечить успешное достижение не только ближайшего пункта, но и всех дальнейших ориентиров.
Задержки — это не обходные пути, а необходимые корректировки курса, гарантирующие устойчивость долговременного путешествия.
Будем чуть менее загадочными и поясним конкретные сложности, с которыми столкнулись:
Выход новой версии Tiptap
Когда мы объявили, что Tiptap войдет в состав XenForo 2.4, работа над ним была завершена на 95%. Затем мы сделали небольшую паузу, сосредоточившись на других проектах, о которых сообщали ранее и будем обсуждать в этой ветке форума. Позднее команда Tiptap объявила о выходе версии Tiptap V3, которая сейчас находится в стадии бета-тестирования. Учитывая центральную роль редактора в опыте пользования форумом, логичнее поставить XenForo 2.4 на рельсы Tiptap V3, а не Tiptap V2, как планировалось изначально. Необходимые изменения не слишком масштабны, но мы не хотим выпускать версию 2.4 с нестабильной зависимостью, подверженной изменениям. Хотя мы не планируем ждать стабильного релиза Tiptap V3, мы хотим дать ей немного больше времени, чтобы повысить уверенность в стабильности предоставляемого опыта редактирования.Рассмотрели возможность переписать ядро (снова)
Хотя это направление мы пока не приняли окончательно, ответственным шагом было бы хотя бы рассмотреть все возможные пути для успешного завершения экспедиции.Почти спустя 8 лет после релиза XenForo 2.0 многие используемые нами технологии заметно устарели, принятые ранее решения стали тормозить разработку больше, чем хотелось бы, и в целом, XenForo как фреймворк перестал быть таким же эффективным инструментом, как раньше. Решение могло бы заключаться в полном перезапуске с нуля, но мы пришли к выводу, что на данном этапе это не обязательно.
Вместо этого в ближайшие несколько версий, включая 2.4, мы будем пытаться вносить постепенные архитектурные изменения в фреймворк, чтобы оснастить нас лучшими инструментами для улучшения опыта как разработчиков, так и пользователей. Особое внимание уделяем реализации функциональных возможностей, ставших стандартом в других фреймворках, таких как Laravel.
Некоторые лучшие функции пока не завершены
Есть одна или две функции, которые пользователи регулярно запрашивают на форуме сообщества и в каналах отзывов, и мы рады подтвердить, что они появятся в версии 2.4! Однако преждевременный выпуск ожидаемых функций, не доведенных до необходимого уровня качества, полировки и расширяемости, никому не принесет пользы. Лучше уделить дополнительное время на доведение их до совершенства, чем торопиться и разочаровывать пользователей посредственными реализациями, требующими немедленных патчей или лишёнными гибкости для дальнейшей кастомизации. Детали этих функций и принципы их работы будут раскрыты в ближайшие недели, следите за новостями!Мы не успеваем рассказать обо всём!
Только что посчитал: примерно 15 функций уже объединены или ожидают объединения в XenForo 2.4, о которых мы пока не объявляли. Некоторые из них мелкого масштаба и не достойны отдельного анонса (скорее всего, они попадут в рубрику "разное"), другие же описаны ниже. Между тем, пока мы "готовились" (как нынче говорят молодые), нам сложно было сбалансировать проведение проверок кода и публикацию новостей.Вполне вероятно, что к выходу версии добавятся новые функции от уважаемых разработчиков, таких как Xon и @digitalpoint, если у нас будет время реализовать их. Иначе они дождутся следующей версии.
Итак, подведём итоги
Хоть и обидно признавать, что выпуск 2.4 занял больше времени, чем предполагалось, мы упорно трудились и близки к завершению разработки.Очень важно сохранять перспективу. Версия XenForo 2.2 вышла в сентябре 2020 года, а 2.3 — почти четыре года спустя. Версия 2.4 выйдет гораздо раньше, чем через три года.
Но, полагаю, вы открыли эту страницу, чтобы узнать, что нового, верно? Давайте разбираться!
Использование PDO для взаимодействия с базой данных вместо mysqli
Одной из первых принятых нами мер стало изменение библиотеки для работы с базой данных с mysqli на PDO. Как мы обсудим позже, PDO облегчает написание новых адаптеров базы данных, что полезно для поддержки импортирования данных из других баз данных или для третьих лиц, желающих интегрироваться с локально размещёнными внешними базами данных. PDO на данный момент является фактическим стандартом для PHP. Многие провайдеры хостинга предоставляют поддержку PDO по умолчанию, в то время как библиотека mysqli часто требует ручной активации. Нам неоднократно встречались случаи, когда при переходе на другой хост или при обновлении версии PHP люди забывали проверить включение расширения mysqli.Чтобы установить или обновить XenForo до версии 2.4, вам необходимо убедиться, что в вашем хостинговом окружении установлена библиотека PDO с драйвером mysql.
Кроме того, в PDO реализовано несколько полезных улучшений качества жизни, таких как привязка именованных параметров, например:
PHP:
$activeUsers = \XF::db()->fetchAll("
SELECT *
FROM xf_user AS user
INNER JOIN xf_user_profile AS profile ON
(user.user_id = profile.user_id)
WHERE user.user_state = :user_state
AND user.last_activity > :min_activity
ORDER BY user.last_activity DESC
LIMIT 10
", ['user_state' => 'valid', 'min_activity' => time()]);
Хотя, оглядываясь назад, это может оказаться менее полезным, чем казалось вначале... (об этом подробнее позже).
Родная поддержка SQLite
На данный момент SQLite является самой распространённой базой данных в мире (используется на смартфонах, встроенных устройствах, приложениях и т.д.), причём некоторые используют её даже в крупных высокопроизводительных производственных средах. SQLite привлекательна для разработчиков благодаря своей широкой распространённости, отсутствию сложной настройки, портативности (всего один файл) и отличным показателям производительности на локальных дисках. Несмотря на свою простоту, SQLite полностью соответствует стандартам ACID и удивительно надёжна. Это не просто удобство, это корпоративный уровень надежности.Особенно ценна SQLite для опытных разработчиков, особенно тех, кто занимается автоматизированным развертыванием (DevOps), так как она великолепно подходит для автоматического тестирования — вы можете мгновенно запустить полную изолированную базу данных для каждого теста. Официально мы продолжим рекомендовать MySQL для производственного окружения, но SQLite для тестов и разработки очень привлекательна, и мы рады предложить её вам уже в составе XenForo 2.4.
Но как быть со всеми существующими SQL-запросами в коде?
Совершенно новый Fluent Query Builder
Новая база данных предполагает необходимость поддерживать другой диалект запросов. Но никто не хочет писать запросы дважды. Более того, их написание и единожды вызывает раздражение. Новый билдер запросов призван облегчить жизнь. Давайте перепишем предыдущий запрос, используя новый Query Builder:
PHP:
$activeUsers = \XF::query('xf_user AS user')
->join('xf_user_profile AS profile', 'user.user_id', '=', 'profile.user_id')
->where('user.user_state', 'valid')
->where('user.last_activity', '>', time() - 86400)
->orderByDesc('user.last_activity')
->limit(10)
->fetchAll();
Экземпляр этого билдера запросов автоматически компилирует правильный SQL-диалект в зависимости от используемой базы данных. Мы переписали все существующие запросы в приложении (включая официальные плагины), чтобы использовать новый билдер запросов, включая запросы, генерируемые компонентами Finder и SchemaManager, для обеспечения поддержки SQLite.
Впрочем, вы не обязаны использовать его. Вы можете продолжать писать запросы напрямую для поддержки как MySQL (так, как это делается сейчас), так и SQLite или же вообще забыть о поддержке SQLite (правда, это может затруднить использование вашего плагина пользователями, выбравшими SQLite).
Это также открывает перспективы для поддержки других баз данных в будущем. Хотя конкретных планов пока нет, теперь возможна поддержка Microsoft SQL Server и PostgreSQL. Любой желающий может легко написать собственные адаптеры и грамматические классы для билдера запросов, чтобы добавить необходимую поддержку, если это понадобится.
Плагин для PhpStorm для разработчиков
Мы осознаём, что хотя билдеры запросов полезны, иногда они могут замедлять разработку, так как при написании сырых SQL-запросов IDE, такие как PhpStorm, могут быть настроены на распознавание схемы базы данных через встроенные инструменты.Чтобы решить эту проблему, мы рады сообщить, что выпустим бесплатный и открытый плагин для PhpStorm (помогите нам поддерживать его

Вот как это выглядит в действии:
Посмотреть вложение 322589-b08f75fa3cba8f63c60da2845e10201d.mov
Отладка запросов
Мы реализовали несколько методов, которые помогут разработчикам проверять, какой именно SQL-запрос собирается выполняться при вызове билдера запросов, что полезно для целей отладки.
PHP:
$pairs = \XF::query('xf_user')
->dump()
->select('user_id', 'username')
->limit(5)
->fetchPairs();
Мы поддерживаем методы dump, dd, dumpSimple, ddSimple, dumpToFile и dumpToFileNamed в любом месте цепочки вызовов билдера запросов. Эти методы регистрируют событие, срабатывающее непосредственно перед выполнением итогового запроса, что также работает с агрегатными методами, такими как count и sum.
SQL:
SELECT "user_id", "username" FROM "xf_user" LIMIT 5
Кстати, о средствах отладки запросов — мы также обновили внешний вид вывода отладочной информации. Теперь он улучшился за счёт лучшего использования цветов как в светлом, так и в тёмном режиме, а также подсветки синтаксиса и форматирования для запросов к базе данных:

Встроенная поддержка веб-сервера PHP
Выбор подходящей среды для разработки и тестирования может вызвать трудности. Существует множество различных решений для разных операционных систем. Порой непросто подобрать подходящее именно вам, иногда возникают проблемы после обновлений, а однажды утром вы включаете ноутбук и понимаете, что ваши базы данных вдруг перестали быть доступны. Ранее мы уже рассказывали, как SQLite может упростить ситуацию — отсутствие необходимости самостоятельной установки и обслуживания сервера MySQL или MariaDB является значительным преимуществом. Но что если вам не придётся беспокоиться и о настройке Nginx или Apache?
Код:
# php cmd.php xf:serve
Starting XenForo development server...
XenForo development server started: http://localhost:8080
Document root is: /Users/chrisdeeming/Herd/24x
Press Ctrl-C to quit.
13:26:20 GET 200 / (432.84ms)
13:26:21 GET 200 /css.php?css=public%3Anormalize.css%2Cpublic%3Afa.css%2Cpublic%3Avariations.less%2Cpublic%3Acore.less%2Cpublic%3Aapp.less&s=1&l=1&d=1747965566&k=975f8f0746a2cbf3a7f3ee7c96f538e9a2bf61e6 (488.67ms)
13:26:21 GET 200 /css.php?css=public%3Anode_list.less%2Cpublic%3Ashare_controls.less%2Cpublic%3Aextra.less&s=1&l=1&d=1747965566&k=b21bffa3ee848ff6a7384493bd4c8b387d4a511e (58.2ms)
13:26:21 GET 200 /js/xf/preamble.js?_v=e361daff
...
Используя встроенный веб-сервер PHP, вы можете быстро поднять сервер для разработки, не прикасаясь к конфигурациям веб-сервера или полнофункциональным окружениям вроде Herd, WAMP, MAMP или Docker.
Консольный интерпретатор для разработки XenForo (REPL)
Добавлена новая команда командной строки xf-dev:tinker, предоставляющая интерактивную оболочку (REPL — Read–Eval–Print Loop) для разработки на XenForo. Реализована на основе прекрасной библиотеки
У Вас недостаточно прав для просмотра ссылок.
Вход или Регистрация
, предоставляя удобное пространство для выполнения фрагментов кода, тестирования сервисов и интерактивного осмотра среды.Интерпретатор заранее загружает общие переменные, такие как $app, $db, $em и многие другие, которые могут пригодиться. Полный список переменных можно просмотреть командой ls -l --vars, а поведение предварительной загрузки отключить флагом --without-vars.
Можно использовать опцию --execute, чтобы передать код для непосредственного выполнения, что удобно для быстрых одноразовых скриптов. Или передавать пути файлов в качестве аргументов, чтобы включить их при старте REPL, что полезно для общего кода начальной настройки. REPL также поддерживает флаг --with-commands, позволяющий вызывать другие команды XenForo CLI прямо из оболочки.
Документация сайта Psysh может стать хорошим справочным руководством для начала работы с этим инструментом:
-
У Вас недостаточно прав для просмотра ссылок. Вход или Регистрация
-
У Вас недостаточно прав для просмотра ссылок. Вход или Регистрация
