Работы по Albireo CMS (июль 2025)

Расскажу о последних самых интересных изменениях в Albireo CMS. Они накопились за последние несколько месяцев.
Регистрация пользователей
Изначально я не ставил задачи делать регистрации, поскольку рассматривал систему, как однопользовательскую. Но если нужны пользователи, то делается это вручную: есть конфигурационный файл users.php
, где можно указать сколько угодно пользователей, их разрешения, адреса и любую другую информацию.
В 99% случаев на сайтах регистрация пользователей делается только для того, чтобы оставить комментарий. Я давно уже не сторонник этого подхода, поэтому давно уже разрешаю комментарии анонимам.
Но есть задачи, когда регистрация, действительно необходима.
Например скрытый контент. Скажем после регистрации будут доступны полные версии статей. То есть это один из вариантов монетизации сайта.
Другой пример — сбор email адресов для последующей рассылки. Это уже маркетинговые штуки.
Во всех этих случаях требуется полноценная регистрация.
Я её сделал, но пока на этом сайте не включал. Привязка идёт к email, нужно указать свой пароль и эмодзи в качестве «аватара». Это единственная особенность, а так всё привычно.
При этом я оставил users.php
, чтобы можно было создавать пользователей как и раньше. То есть система сама объединяет этот файл с базой, где хранятся остальные юзеры.
Антиспам
Мне вдруг впервые пришёл спам. Ручной. У меня давно отмечена задача по антиспаму, поэтому занялся этим довольно плотно.
Что получилось в итоге:
- Список стоп-слов. Если срабатывает, то форма блокируется.
- Есть список «черных» IP.
- Есть всякие токены, с помощью которых можно блокировать автоматический спам.
- Есть защита от брутфорса.
- Есть защита от слишком частой отправкой форм.
- Есть отслеживание действий пользователя, когда он слишком быстро отправляет форму (человек так не может).
Понятно, что от ручного спама всё равно нет полноценной защиты, но то что есть, уже неплохое подспорье.
Парсер TextSimple и Markdown
Я давно уже работаю с TextSimple — это моя очень старая разработка (ещё со времен Landing Page Framework), он входит в MaxSite CMS и Albireo Framework (в старом варианте).
Почему я с ним так «ношусь»? Всё просто — я хочу парсер, который не будет усложнён, но при этом позволял бы генерировать управляемый HTML. В основе я ориентировался на Textlite, но сейчас понятно, что в Сети уже «победил» Markdown. Поэтому я поставил задачу приблизить к нему TextSimple.
Сложность в том, что для решения задачи требуется довольно сложные регулярки и алгоритмы. По сути сейчас TextSimple можно рассматривать как расширенную версию Markdown, поскольку я сделал так, чтобы их синтаксис был очень близок между собой.
Из последних изменений — я наконец-то смог доделать возможность не указывать ul
для списков, то есть теперь это может быть привычный Markdown-вариант (с разными маркерами списка). Также я унифицировал вариант с полужирный и курсивом, как это сейчас принято в большинстве реализаций Markdown.
То есть я считаю, что формат Markdown станет доминировать в Интернете вместо обычного текста. В первую очередь это из-за нейросетей, которые его используют по умолчанию. Так что TextSimple может быть хорошим развитием этого формата.
SEO
Доделал возможность автоматического указания канонического адреса. Оказалось, что гугл по какой-то причине проиндексировал адреса с мусорными get-параметрами. Очевидно, что нужно указать ему канонический адрес.
Также изменил логику sitemap.xml
. Изначально я как-то не подумал, что привязка к типу blog
не совсем корректна, поскольку тип может быть любой другой, например doc
для документации. Поэтому сделал по другому — в xml-карту сайта попадают все, кроме явно отключенных страниц и тех у которых тип system
.
Добавил автоматическое создание robots.txt
. Поу молчанию там просто ссылка на sitemap.xml
.
В качестве будущей возможности прикрутил JSON+LD. С этой разметкой всегда есть нюансы, поэтому пока экспериментирую с типами Article, NewsArticle и BlogPosting — их можно использовать прямо сейчас.
Мультиязычность
Получилась очень объемная работа. Раньше я уже об этом писал, но накопилось много новых идей.
Главное изменение — это более корректное определение языка посетителя: например японский, но поскольку его на сайте нет, то будет выбран английский (как указано у посетителя в браузере), а если и его нет, то язык по умолчанию.
Но главное изменение — это поддержка языковых файлов. Делается страница на основном языке, потом отдельно переводы в файлах, например
about.php
about@lang-uk.php
about@lang-en.php
Основная задача сделать именно удобное управление языковыми версиями. Полные описание см. в документации Мультиязычность в Albireo CMS.
Я рассказывал об этом в telegram-канале.
Миграции/seeders
Это из области «больших» фреймворков. Миграции — это работа с версиями баз данных. Можно накатить или откатить миграцию, то есть привести её к какому-то состоянию. Seeders — это тоже самое, только всегда в одну сторону.
Зачем это нужно?
Скажем у меня есть изменения по структуре базы. Когда пользователь загрузит новые файлы системы, нужно как-то обновить базу. Миграция — это просто php-файл, который запускается из командной строки и выполняется в рамках системы. После выполнения он отмечается как выполненный и больше не запускается.
У меня механизм проще. Seeders запускаются автоматом при запуске системы. После того, как обновления выполнены, seeder-файл сам себя перемещает в каталог done
. Соответственно больше он не будет запускаться. Очень простая, но эффективная схема для обновления системы.
Прочие
- Добавил Font Awesome Free 5-й и 6-й версии.
- Слайдер swiperjs.
- Более корректное определение адреса с http и https, когда они на сайте смешиваются.
- Рубрики могут иметь произвольные адреса.
- В адресах можно использовать всякие символы вроде эмодзи.
- Модуль stat (статистика) по умолчанию отключен (он довольно ресурсоёмкий), вместо него используется
stat.page
— легковесная альтернатива, которая предназначена просто для подсчета статистики прочтений без какой-либо детализации. - Добавил в описание Создание документации с помощью Albireo CMS.
Внешний вид
Я постоянно работаю с дизайном админки. Пока не буду показывать скриншоты, поскольку сделаю отдельный анонс по обновлению официального сайта Albireo CMS. Пока у меня загвоздка с главной страницей — меня всё тянет в мультяшную акварель, но умом понимаю, что нужно что-то более строгое. Поэтому пока эта работа откладывается. 😎