Отличия Albireo от других CMS
Хотя Albireo CMS позволяет делать привычные сайты и блоги, а по функционалу ничем не уступает другим CMS, она имеет несколько достаточно существенных отличий.
Flat-File CMS
Поскольку система работает на файлах, то в ней используются другие механизмы получения и выборки данных. Если в системах, работающих на базе данных, требуется составлять SQL-запросы, то в Albireo все данные по сути представляют собой обычный php-массив. Таким образом, в любой части системы можно всегда получить любые записи и провести с ними нужные манипуляции.
Важно отметить, что массив записей в Albireo CMS содержит только служебную часть страниц, без основного контента. Поля страницы по сути — это ключи массива. Например если отметить поле type: blog
, то фактически это будет преобразовано в 'type' => 'blog'
.
Управление страницей
Все настройки располагаются прямо в теле страницы в php-комментарии. Эта схема непривычна для систем на БД, но привычна для многих Flat-File CMS. Отличие от них в том, что в Albireo CMS — это именно настоящие php-комментарии /** **/, а в других системах используются другие форматы разделителей, например в Grav применяется ---
(три минуса).
Преимущество использования php-комментариев в том, что мы можем подключить страницу как обычный php-файл, без какой-либо обработки.
Произвольные URL
В Albireo CMS любая страница может иметь любой адрес. У страницы можно указать поле slug
, который будет использовать как итоговый адрес страницы. Также можно использовать slug-pattern
, где задать php-паттерн (для preg_math), по которому будет найдена эта же страница. Это позволяет делать произвольные группировки записей, например для рубрик или меток, когда используется первый сегмент адреса — именно он и перехватывается из slug-pattern
.
Кроме этого Albireo CMS поддерживает автоматические URL (когда slug
не указан), когда адрес формируется из имени файла (без расширения). При этом учитывается вложенность каталогов. Например, если разместить страницу как blog/mypage.php
, то её адрес будет blog/mypage
. Это позволяет группировать страницы и файлы удобным для себя образом.
В других системах адреса и файлы, как правило, имеют жесткую предопределённую структуру. В Albireo CMS полная свобода.
Произвольные страницы
Важное отличие Albireo CMS в том, что здесь нет никакой предопределённой группировки записей. В других системах сразу выделяют типы данных: главная, непосредственная страница записи (post, static, page и т.п.); агрегатные страницы рубрик, меток, архивов; служебные последние комментарии, страницы авторизации и т.п.
В Albireo CMS подобного деления не существует. Поскольку адреса у страниц произвольны, то просто определяется адрес страницы и уже в ней решается для какого вывода она предназначена.
То есть в отличие от других систем, в Albireo CMS каждая страница может выполнять любую функциональность. Система просто подключает файл страницы через шаблон вывода и больше ничего не делает. Нет никакой предварительной загрузки данных или ещё каких-то манипуляций. Можно сказать, что Albireo CMS работает как простой роутинг, когда по URL-адресу находится его php-файл.
Произвольные группировки данных
Таким образом пользователь Albireo CMS сам решает какие ему нужные страницы сайта и сам определяет их адреса. Обычные страницы, которые содержат текст, как например эта, просто выводят своё содержимое. При этом можно прямо здесь же сделать любой другой вывод — ограничений нет.
Но если нужно сделать автоматический вывод многих страниц, например на главной, то в тексте файла прописывается код, который получает и выводит нужные данные.
Проще показать на примере реального php-кода:
// типовой вариант блога $files = getPagesField('type', 'blog'); // записи с type: blog $files = sortArray($files, 'date', 'date-desc'); // новые вверху $pag = paginationA($files, limit: 7); $files = $pag['files']; // обрезанный массив по пагинации echo tpl(data: $files, tpl: TPL_DIR . 'one-column-3.php'); echo tpl(data: $pag, tpl: TPL_DIR . getConfig('pagination', 'pagination1.php'));
Последовательность такая:
- Получаем записи по каким-то критериям, здесь смотрим записи, где type: blog.
- Потом выполняем сортировку полученного массива, в данном примере новые записи будут вверху.
- Потом формируем специальный массив для пагинации, где указываем количество записей на одной странице.
- Пагинация автоматически обрезает исходный массив так, чтобы оставить только те элементы, которые нужно сейчас вывести.
- Дальше обычный вывод через цикл в tpl-файле. На сегодня их 9 шт. — это вывод в одну колонку, в несколько и разные группировки.
- В конце выводим пагинацию через tpl-файл. Есть два файла, выбирается на своё усмотрение.
С помощью getPagesField()
можно получать записи по любым критериям. Например я могу получить те записи, где используется alpinejs, или те, которые в статусе draft (черновик), или те, где отключен сбор статистики (stat: -
). Поскольку данные — это обычный php-массив, то без разницы что нужно искать.
При необходимости можно получить записи через getPagesSlug()
, которая принимает массив адресов страниц. Это нужно для тех случаев, когда мы хотим вывести какие-то предопределённые страницы.
Функция sortArray()
универсальная — она позволяет сортировать записи (массив) по нескольких критериям: по дате, по числу, по строкам, причем в прямом и обратном порядке (asc/desc), а также можно получить случайную выборку (rand). То есть фактически эта функция выполняет роль ORDER BY
в SQL-запросах.
В одном файле можно сделать сколько угодно выборок записей. Здесь нет никаких ограничений, поскольку это обычный PHP. Например сейчас на главной вывод сделал через array_chunk()
, который разбивает вывод по 5 записей, а вывод «2+3» происходит уже в tpl-файле.
То есть в отличие от других систем, в Albireo CMS нет никаких предопределённых выводов — здесь это решает непосредственно сама страница.
«Динамические» страницы
Часть страниц генерируется «на лету». Речь о rss.xml
, rss-comments.xml
и sitemap.xml
. Поскольку адрес любой страницы может быть произвольным, то просто указывается соотвествующий slug. Схема работы аналогично приведенной выше — вначале получаются данные, потом обходятся в цикле и формируются в нужный xml-код. Чтобы браузер понимал это как XML, просто отправляется соответствующий header()
. Для исключения любого другого вывода у страницы указывается layout: empty.php
, который выводит только содержимое страницы и ничего больше.
В других системах, как правило, формирование этих файлов выполняется по хукам/событиям, например сразу после нажатия кнопки «Сохранить запись». При этом формируется реальный файл в корне сайта. В Albireo CMS это просто не нужно.
Такой подход позволяет формировать и произвольные API под любой формат вывода, будь то XML или JSON. В других CMS такое сделать намного сложнее.
Чистый PHP
В Albireo CMS нет сторонних форматов данных. Здесь нет JSON, env(), YAML или XML, которые часто используются в других системах. Все эти форматы всё-равно нужно преобразовать в обычный php-массив, поэтому я сразу отказался от этих прокладок.
Отсутствие зависимостей
Albireo CMS не использует сторонние php-фреймворки. Часто встречаются CMS основанные на фреймворках, вроде Laravel, где их авторы преподносят это как большой плюс. По мне так — это огромный минус. Мало того, что в стороннем коде масса мусора и хлама, так ещё и разработчик создаёт зависимость от которой потом не сможет отказаться. При этом, что самое смешное, такая CMS использует мизерную функциональность фреймворка. То есть вместо того, чтобы написать свой PSR4-загрузчик классов и примитивный MVC-каркас, он предпочёл подключить стороннего монстра.
В Albireo CMS используется всего несколько компактных сторонних библиотек. Это Zebra Image для манипуляции с изображениями и Parsedown для нативной разметки Markdown. Хотя Parsedown я включил только для «коллекции», потому что мой парсер TextSimple работает примерно с такой же разметкой, только быстрей. Весь остальной код Albireo CMS — нативный PHP. Отсутствие сторонних зависимостей — важное отличие системы.
Нулевая установка
Система просто загружается на сервер и сразу работает. Единственный нюанс — это файл .htaccess
, который может иметь свои особенности на сервере. Поэтому может потребоваться вручную поставить этот файл (он в комплекте).
Мультисайтинг
Далеко не каждая система позволяет разделять своё ядро на несколько сайтов. Albireo CMS одновременно работает с любым количеством сайтов.
Переносимость
Для меня это важное отличие. Albireo CMS позволяет переносить любые данные, включая записи, изображения, конфигурации и т.п. простым копированием. Можно спокойно настроить синхронизацию по ftp локального каталога на компьютере и удаленного каталога на сервере. Одна кнопка и данные будут полностью синхронизированы.
Админ-панель
Я отказался от идеи тяжелой админ-панели в пользу быстрой, простой и функциональной. Albireo CMS рассчитана на простых блогеров, которым нужно удобство работы с текстами. Обилие всяческих настроек только мешает нормальному творческому процессу.
В других системах админ-панель обычно обвешана кучей «рюшечек» и тяжелых визуальных блоков. Очень многие действия требуется выполнять только через панель управления. Мне это не нужно.
Работа с изображениями
В Albireo CMS основа — это работа с современным форматом webp. Основной принцип — загружай файл любого формата, он автоматом будет конвертирован в webp с указанными размерами и качеством. Я хотел сделать так, чтобы изображения занимали как можно меньше места на диске и с ними было удобно работать.
При этом у пользователя есть возможность самому выполнить конвертацию файлов — есть готовые функции. Можно сделать миниатюры — в шаблоне они делается автоматом, можно вручную. Есть функция генерации нового изображения с указанным текстом.
В других системах ничего подобного просто нет.
Шаблон
Об этом я уже писал, поэтому просто отмечу, что более логичной и удобной схемы шаблона, вы больше нигде не встретите.
Компактность и эффективность кода
Несколько нововведений, которых я также нигде не встречал.
Ядро системы для конечного пользователя — это два небольших phar-архива. Именно в них размещены все функции и psr4-библиотеки. Пользователь просто не видит файлов, к которым он не имеет никакого отношения.
Для разработчика основные функции размещаются по принципу «одна функция = один файл». Такой подход позволяет очень быстро находить нужную функцию и прекрасно контролирует «распухший» код. Я считаю, что для разработки проектов такой подход оказался очень продуктивным.
Berry CSS
В основе дизайна лежит Berry CSS новой версии, которая управляется не только через SASS, но и через css-переменные. То есть можно сменить дизайн сайта, только поменяв css-переменные в отдельном файле. Этот подход очень привлекательный для верстальщиков, когда вся работа заключается только в правке css-кода. Причём писать нужно не весь css-код, а только те части, которые требуют изменений. Например мне нужен был сайт в зелёных цветах — вся работа — это 4 сточки, где я задаю насыщенность и градус цвета для --primary
и --secondary
.
Я вообще считаю, что будущее css-верстки — это atomic design, поэтому Albireo CMS будет развиваться только в этом направлении. Естественно это будет и развитие Berry CSS.
Слава Украине! Смерть рашистам!