Сравнение MaxSite CMS и Albireo CMS
При разработке Albireo CMS я ориентируюсь на MaxSite CMS, поскольку итоговая цель — сделать так, чтобы Albireo CMS могла выполнять всё то, что есть в MaxSite CMS. Конечно сравнивать системы «в лоб» не совсем корректно, но я ориентируюсь на конечные задачи пользователя.
В качестве сравнения я использую именно MaxSite CMS по той причине, что в ней сразу есть всё то, что требуется для современного сайта. Поэтому сравнивать например с WordPress не имеет смысла — эта система совершенно «голая».
Различие по принципу работы
Albireo CMS — это файлы и база SQLite, а MaxSite CMS — это база MySQL. В этом плане MaxSite CMS всегда будет выигрывать по скорости, особенно если на сайте много сотен/тысяч записей. Albireo CMS требуется каждый раз обсчитывать все файлы записей и это один из основных «тормозов» системы (но я думаю над этим вопросом).
«Магическое число» для Albireo CMS начинается от 1000 файлов. Скорее всего после тысячи файлов/записей придётся думать о том, как структурировать записи так, чтобы уменьшить их количество. Тут на помощь может прийти поддержка мультисайтинга: можно выделить из общего сайта отдельные разделы и разместить их как отдельный сайт. При этом «ядро», шаблоны могут быть общими. То есть вопрос решается, другое дело, что всё-таки за этим нужно следить.
Степень свободы
В Albireo CMS практически нет никаких ограничений. Это касается и адресов страниц, типов данных, выполнения php-кода, подключения CSS и JS и многого другого. MaxSite CMS в этом плане намного «скромнее»: адреса привязаны к типам данных, для выполнения php-кода, требуется включать плагин, а для подключения сторонних библиотек, требуются небольшие манипуляции, например для подключения в HEAD или в конце BODY.
Можно сказать, что MaxSite CMS — это типовой представитель семейства систем, которые взяли за основу идеологию WordPress. Отсюда, собственно и все ограничения. Albireo CMS имеет совершенно другую идеологию.
Структуры данных
Принципиальное отличие Albireo CMS от других систем в том, что здесь нет предопределенных типов данных (рубрики, метки, главная, статичные страницы, блоговые и т.п.). В MaxSite CMS (и всех прочих аля-WordPress систем) существует деление на типы страниц, то есть система всегда требует определить тип страницы, а уже потом предлагает способ её вывода.
В Albireo CMS ничего подобного нет. Здесь основа — адрес и соответствующий ему php-файл. Если сильно утрировать, то Albireo CMS представляет собой роутинг, который связывает входящий URL и его handler — php-файл. Всё остальное — некая обвязка, «мясо», которое делает обработку страницы простым и удобным.
Именно поэтому в Albireo CMS можно использовать произвольные адреса для абсолютно любых страниц. Деление на рубрики, метки и т.п. — это всё условность.
Если, скажем, мне нужно сделать страницу рубрики, то я просто делаю php-файл как обычную страницу с желаемым адресом, где размещаю простой код для получения записей.
То есть в Albireo CMS всё идёт от страницы и произвольных URL, а в других системах всё идет от типа данных, которые завязываются на предопределенные шаблоны URL.
Устройство шаблонов
В MaxSite CMS (и других аля-WordPress) шаблон строится от типа данных: один вывод для рубрик, другой для главной и т.п. Конкретно в MaxSite CMS схема шаблона базируется на main-файле, который представляет собой модульную сетку, которая подключает разные части шаблона: компоненты, циклы вывода записей, header-заголовки и т.д. Также в MaxSite CMS есть возможность «вклиниваться» в цикл вывода записей через type_foreach-файлы, что несколько упрощает структуру шаблона.
В Albireo CMS используется другой принцип, который больше согласуется с принципами верстки сайтов. Есть layout-файл, внутри которого происходят все остальные подключения. Таким образом меняя layout-файл мы можем построить любое количество модульных сеток, а также произвольную логику прочих подключений. Более того можно вообще отключить вывод чего-либо и использовать код страницы в «чистую».
Поэтому в Albireo CMS все модули фактически изолированы и не связаны между собой. Здесь просто нет необходимости в сложном обслуживающем коде: если нужно выстрелить в ногу, то проблем не будет.
Кроме того, default-шаблон Albireo CMS очень легко расширяется без его изменений — в этом случае свои файлы располагаются в произвольном месте, не затрагивая сам шаблон.
Также в Albireo CMS есть отдельный общий каталог ресурсов, где хранятся дистрибутивы сторонних библиотек и шрифты. Это сильно упрощает их поддержку и обслуживание.
Admin-панель
Админки, конечно разные. В MaxSite CMS опции хранятся в базе MySQL, а значит большая часть админки — это именно обслуживание опций. В Albireo CMS все опции располагаются в отдельных php-файлах, поэтому в ней просто нет необходимости в подобных страницах.
Редактор Albireo CMS — это простой textarea, где можно редактировать любые файлы системы. Если нужно поменять опцию, то просто открываем файл и вносим изменения.
Плагины
Предполагается, что плагины — это то, что позволяет расширять возможности системы. Схема работы плагинов практически везде одинакова — это срабатывание функции плагина на некий хук (ловушка) или событие в системе. Например обработчик bb-кода будет срабатывать после получения текста записи.
Я считаю, что такая схема работы плагинов крайне ущербная, поскольку тянет за собой множество других «плохих решений». В MaxSite CMS, конечно уже нет возможности что-то менять, поэтому плагины — это неотъемлемая часть системы. Но в Albireo CMS нет плагинов от слова «вообще».
Формально есть несколько events (событий), которые срабатывают в функции вывода файла. Это примерно тоже, что и в php-фреймворках событие start. Оно нужно для того, чтобы выполнить некое действие, в частности подсчитать статистику.
Если стоит задача расширить возможности Albireo CMS, то это делается с помощью своих функций или psr4-классов. В системе просто нет задач, где требуются хуки.
Плагины MaxSite CMS
Ниже я привожу плагины MaxSite CMS и их «замена» в Albireo CMS с комментариями.
Это описание будет интересно пользователям MaxSite CMS.
Вначале плагины, которые предназначены для работы с текстом.
- bbcode — Конвертирует тэги BBCode в HTML. Я считаю, что это уже неактуально.
- faq — ЧАВО на сайте. Можно использовать стандартный DETAILS.
- forms — Произвольные формы. Лучше использовать обычные html-формы.
- lightbox — Лайтбоксы в Albireo CMS — есть.
- parser_default, parser_markdown, parser_simple — есть TextSimple и ParseDown, но вообще можно подключить любую функцию по работе с текстом.
- protect_pre — защита PRE/CODE - есть нативная поддержка в Albireo CMS.
- psevdocode — произвольные замены. В Albireo CMS это делается через произвольные функции.
- shjs — Подсветка кода. Есть через highlight.js
- ushki — Ушки. Нет потребности.
- auth_content — В Albireo CMS можно скрывать любые части текста.
- editor_trumbowyg — визуальнй редактор. В Albireo CMS никогда не будет.
- internal_links и perelinks — перелинковка. Не думаю, что это актуально сегодня.
- popup — всплывающее окно. В Albireo CMS нет.
- random_gal — Галерея из файлов. Заменяется простым php-кодом.
- run_php — выполнение PHP. В Albireo CMS — нативное выполнение PHP.
- multipage — разбиение на страницы пагинации. В Albireo CMS можно сделать отдельными страницами, где указывается иерархия.
- smiles — Смайлики в тексте. Конечно на вынос.
- spoiler — Заменяется DETAILS.
- tabs — Это проще сделать через AlpineJS под свою верстку и дизайн.
Теперь плагины, которые что-то добавляют до или после записи. Тут нужно отметить, что в Albireo CMS можно указать произвольные модули, которые можно вывести до и после записи. Поэтому фактически любой код, который нужно подключить к записи, можно разместить отдельным файлом и подключать с помощью полей записи. Именно таким образом в Albireo CMS делается навигация, блоки других записей и т.п. Так что, если требуется что-то подключить, то технически это легко делается.
- addzakl — Закладки на соц.сервисы. Не уверен что это вообще актуально.
- comment_button — кнопки к комментированию. В Albireo CMS из «коробки».
- comment_smiles — Смайлики. Точно не будет.
- loginza_auth — Авторизация Логинзы. Не требуется.
- captcha и mkj_sc — Капчи. Пока думаю.
- pagination, pagination2 и paginator — пагинации. Уже в комплекте.
- rater — Рейтинг записи. Пока думаю.
- tweetmeme_com — Блок от Твиттера. Кажется уже не актуально.
То есть из этой группы для Albireo CMS я ещё делаю (неспешно) рейтинги star и like для записей.
Следующая группа плагинов — это виджеты. Некоторые из них достаточно специфичные, поэтому не актуальны для Albireo CMS. Создание виджета для Albireo CMS несколько проще, чем в MaxSite CMS, поскольку виджеты — это отдельный каталог. Поэтому виджеты в Albireo CMS это просто php-файл и произвольный конфиг-файл сайдбара. Для виджета нет необходимости к чему-либо цепляться.
- any_file — произвольный файл. Не актуально.
- category — рубрики. Уже есть.
- last_comments — Последние комментарии. В Albireo CMS это отдельная страница сайт/last-comments
- last_pages и last_pages_unit — последние записи. Уже есть.
- links — Ссылки. Есть универсальный favorites, где указываются произвольные ссылки.
- login_form — Форма логина. Есть.
- search_form — Форма поиска. Поскольку в Albireo CMS нет своего поиска, то возможен поиск через гугл.
- tagclouds — Метки. Уже есть.
- text_block — Произвольный блок. Уже есть.
- authors — авторы. Не актуально.
- calendar — календарь. Не уверен, что это нужно, поскольку есть отдельная карта сайта.
- catclouds — облако рубрики. Не знаю нужен ли.
- events — события. Слишком специфичен.
- favorites — Ссылки. Уже есть.
- page_comments — самое комментируемое. Пока думаю.
- page_parent — связанные страницы. Очень специфично.
- page_views — самое читаемое. Пока думаю.
- random_pages — случайные записи. Есть как универсальный pages.
- randomtext — случайные фразы. Думаю, что это не актуально.
- rss_get — работа с RSS. Уже не актуально.
- tabs — табы. Достаточно сложен, чтобы сделать универсальным.
- top_commentators — топ комментаторов. Не актуально.
- samborsky_polls — голосование. Уже есть.
B последняя группа плагинов, которые являются обязательными для современного сайта.
- meta_robots — Позволяет задать meta-тэг robots для любых адресов сайта.
- open_graph — Протокол Open Graph
- range_url — «Правильные» URL сайта
- redirect — Редиректы
- sitemap — Карта сайта
- xml_sitemap — sitemap.xml
Все эти возможности уже есть Albireo CMS прямо из «коробки». Причём есть возможность управлять всей секцией HEAD и добавлять в неё любые другие данные. Например есть favicon, counter, которые удобно размещаются в сниппетах.
Итого
Если сравнивать системы по функционалу, то можно сказать, что Albireo CMS не так сильно уступает MaxSite CMS. Здесь важный момент ещё в том, что многие плагины в MaxSite CMS делались в то время, когда верстка была достаточно сложна. Поэтому и требовался какой-то способ упростить использование.
Современные возможности уже позволяют использовать готовые библиотеки или нативный код. Простой пример — плагин popup я вряд ли когда то будут реализовывать для Albireo CMS, поскольку есть простой код, который добавляется через copy/paste за 10 секунд см. «Модальные окна в Alpine.js». И это касается огромного количества сторонних разработок. Скажем меня всё подмывает добавить построение диаграмм через Mermaid, но с другой стороны, всё что нужно сделать, так это получить ссылку на svg-изображение и вставить на сайте. Что может быть проще?
Роки три тому експерементував з Альбірео та вкладеними папками, коли створювалася тематична, а в неї закидувалися окремі сторінки у міру їх написання. Таким чином виникала ієрархія, яка відображалася на сторінці розділу з витягнутими slug, title і description для інформативності. Спосіб нехитрий, але легко реалізуємий в рамках цього фреймворку. Більше тоді бентежило відображення дерева в боковому меню.
З перерахованого вище не вистачає (як на мене) перемикання стилю теми типу "світла-темна", але то таке..