Сайт вебмастера

Обновление Albireo Framework

09-12-2021Reading time ~ 5 min.Albireo Framework / CMS 1962

Итак у нас новая версия Albireo. :-) Я расскажу что изменилось за последние пару месяцев.

Последнее изменение — это немного другая структура каталогов. Я выделил админ-панель в собственный каталог вне данных страниц, а также новый каталог, где можно будет размещать шаблоны сайта. Изменения я планировал давно, поэтому решил больше не тянуть и не создавать «хвостов» на будущее.

Админ-панель

Всего год назад в Albireo появилась админ-панель и за прошедший год она была отлажена до рабочего состояния. Теперь, когда вы делаете сайт для клиента, ему можно будет предложить и управление этим сайтом. Для него приятный бонус, а вам ничего не стоит. :-)

Но есть нюанс - админ-панель с технической точки зрения — это самые обычные страницы сайта. Когда я только начинал её делать, то не совсем понимал что получится в итоге, поэтому пошёл по пути наименьшего сопротивления. Задумка удалась, но меня сильно смущало расположение панели в каталоге данных albireo-data, поскольку к данным пользователя она не имеет отношения, а должна быть частью фреймворка.

Я исправил этот недочёт и теперь панель расположена отдельно в каталоге albireo-admin. За счёт этого каталог данных albireo-data сильно «похудел», что очень хорошо скажется на поддержке сайта при обновлении.

Функционал панели никак не пострадал, а в «ядро» фреймворка я внёс необходимые правки. В будущем я бы хотел получить ещё более крутую админ-панель, поэтому когда она размещается отдельно, то с этим не будет проблем.

Ну и если на сайте админ-панель не нужна, то можно просто удалить каталог albireo-admin.

Шаблоны сайта

Это уже из разряда полноценных CMS.

В Albireo вывод контента страниц происходит через layout-файлы. В них содержится html-разметка, внутри которой добавляется обработанное содержимое страницы.

Нюанс в том, что layout-файл содержит не только html-код, но и подключает всякие css-стили, js-скрипты и т.д. Например я использую Berry CSS и AlpineJS, но для других разработчиков требуются другие фреймворки. Чтобы не заниматься правкой дефолтных layout-файлов, теперь можно сделать их в виде шаблона сайта.

Все шаблоны хранятся в каталоге albireo-templates, каждый в своём каталоге. По умолчанию используется default, а уже в нём каталоги assets и layout. То есть, когда нужно будет изменить модульную сетку сайта или использовать другой css-фреймворк, достаточно будет сделать свой набор файлов в виде шаблона сайта и указать его в конфигурации.

Это намного проще и удобней, чем менять файлы страниц под новый layout-файл. Ну а в перспективе даёт возможность создания отдельных шаблонов для Albireo.

Как обновляться?

По сути произошла некая «перетусовка» каталогов, поэтому можно пойти несколькими путями. Самый простой — это взять новый дистрибутив Albireo и добавить в него свои страницы из старого albireo-data.

Если вы меняли layout-файлы, то сделайте новый шаблон в albireo-templates и скопируйте в него старые файлы. Только учитывайте, что doc-файлы (для создания вашей документации) имеют несколько правок — нужно будет их внести (если нужно, конечно).

Если вы используете свой assets, то также скопируйте его в каталог своего шаблона.

То есть изменения такие, что в albireo-data больше нет каталога admin (здесь была админ-панель) и layout (он перекочевал в каталог шаблонов).

Также возьмите новый файл конфигурации albireo-data/config/config.php — в нём укажите свой шаблон сайта и, если нужно, перенесите недостающие ключи.

Из-за того, что Albireo в момент инициализации не в курсе какой используется шаблон, то часть конфигурационных ключей формируется автоматически. Например раньше нужно было вручную указывать параметр assetsUrl, но теперь этот ключ рассчитывается автоматически на основе указанного шаблона сайта.

Ну и традиционно, в Albireo можно поменять все каталоги через конфигурацию.

PDO и SQLite

Если вы следили за публикациями моего сайта, то знаете, что Albireo поддерживает работу с этой базой данных. На будущее у меня запланированы изменения сделать так, чтобы фреймворк позволял хранить страницы не только в файлах, но и БД. Это довольно серьёзный шаг, который требует хорошей и неспешной проработки. Поэтому пока SQLite я использую в более простом варианте — блоки, опции, логи.

PHP 8.1

Недавно вышла новая версия и я подправил Albireo для неё. Потребовалась всего одна мелкая правка. Так, что желающие могут пользоваться.

Кстати, насчёт PHP 8.1. По какой-то причине новая версия PHP у меня отказывается работать с MySQL — происходит падение dll-библиотеки Apache. При том, что все остальные версии, включая 8.0 без проблем работают. Причину я так и не нашёл, но это не позволяет мне протестировать MaxSite CMS на новой версии PHP. Если вы смогли запустить PHP 8.1 + MySQL для MaxSite CMS и появились ошибки, сделайте доброе дело — сообщите о них на github-странице проекта.

Кэш при высокой нагрузке

В своём телеграм-канале я об этом уже рассказывал, поэтому остановлюсь здесь кратко.

Если на сайте появляется очень высокая посещаемость: десятки и даже тысячи запросов в секунду, то кэш будет иметь некий минимальный период обновления. Например, если одновременно в одну секунду пришло 1000 http-запросов, то кэш будет проверяться только для первого, а остальные 999 будут его использовать без проверки.

Нагрузочное тестирование показало, что Albireo может выдержать тысячи запросов в секунду. То есть скорее «отвалится» http-сервер, чем PHP или диск сервера. :-) Ну и «побочный» эффект — ускорение кэша на 1-2 порядка.

Service-контейнер и класс хранения кэша

С подачи автора ichiblog.ru сделал так, чтобы можно было менять хранилище кэша.

По умолчанию используется файловый кэш, но при желании можно написать свой класс для другого хранилища, например Memcached или SQLite.

Реализация уже полноценная. Это почти PSR-16. «Почти» из-за того, что часть методов не имеет смысла и пришлось ради совместимости с PHP 7.1 отказаться от новых (в PHP 8) типов данных.

Настройки кэша вынесены в файл конфигурации: указывается класс обработчика (handler) и, если нужно, его параметры — они попадают в его конструктор.

Чтобы всё сделать красиво, я написал небольшой Service-контейнер, который понимает методы PSR-11. Его плюс в том, что он простой, быстрый и работает из «ООП-коробки», не создавая зависимостей, как это происходит в больших фреймворках. Если будет время, то постараюсь написать статью о таких вещах, включая DI-контейнер.

Итого

Новая версия — это новый цикл развития Albireo Framework. Лично я очень доволен, как проект поднялся и повзрослел всего за один год. Это удобный и хороший инструмент для любого разработчика. Пользуйтесь. :-)

Related Posts