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

Отличия Albireo от других CMS

27-09-2024Reading time ~ 8 min.Albireo Framework / CMS 330

Хотя 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.


Слава Украине! Смерть рашистам!

Related Posts
Comments (3) RSS
1 Андрей 2024-11-09 09:05:14

Добрый день, Максим!

Вы пишите: Единственный нюанс — это файл .htaccess, который может иметь свои особенности на сервере

Я не большой специалист, но как-будто файл .htaccess подразумевает использование сервера apache. Как быть если я использую связку nginx + php-fpm?


2 Макс 2024-11-09 09:21:27 admin

Всё равно. Годится любой сервер, который умеет переправлять запросы к index.php. Можно даже встроенный php-сервер использовать. Так что проблем не будет.


3 Андрей 2024-11-09 12:21:08

Понял. Спасибо.

Ждем релиз.

Leave a comment!