Алгоритмы работы Albireo CMS
Точка входа
- Все запросы принимаются на корневой
index.php— таковы настройки.htaccess. - В
index.phpопределяется константаFRONT_NAME, которая указывает на каталог сайта — по умолчанию этоwebsite. - Происходит подключение
FRONT_NAME/index.php.
Точка входа (мультисайтинг)
Здесь сразу происходит обращение к index.php каталога сайта, например blog (он становится FRONT_NAME). В остальном алгоритм аналогичный.
Запуск сайта
Файл FRONT_NAME/index.php отвечает за запуск сайта. Изначально в нём определяются базовые константы, которые хранят основные пути к каталогам.
После этого происходит последовательное выполнение:
- загрузка ядра системы
SYS_DIR/loader.php, - проверка блокировки IP,
- проверка заданных редиректов,
- подключение пользовательских констант,
- регистрация PSR4-autoload,
- запуск механизма сессий,
- проверка создания
.htaccessиrobots.txt, - формирование данных по текущему URL,
- получение данных записей,
- обработка AJAX-запросов по адресу
_request_ajax, - поиск соответствия входящего URL и php-файла записи,
- вывод страницы через layout-файл,
- вывод отладочной информации через встроенную debug-панель.
Функции «ядра»
Эти функции обеспечивают весь цикл работы Albireo CMS. Их можно рассматривать как «черный ящик» системы.
- blockIP — блокировка по IP по указанным шаблонам (настраивается через конфигурацию).
- compressHtml — сжатие HTML.
- createHtaccess — автоматическое создание
.htaccessиrobots.txt. - currentUrl — определяется структура текущего URL (см. константу
CURRENT_URL). - events — механизм событий.
- getFileInfo — обработка php-файла страниц.
- getSnapshot — получение «снимка» каталога страниц.
- license — работа с лицензией сайта.
- matchUrlPage — роутинг.
- pageOut — вывод страницы.
- processingContent — обработка текста страницы.
- protectHTMLCode — защита html-кода (pre, code, script, style).
- psr4Autoload — автозагрузка PSR-4.
- readPages — считывание и формирование данных всех страниц.
- redirects — редиректы по шаблонам (настраивается через конфигурацию).
- requestAjax — входной обработчик AJAX-запросов.
- seeder — механизм сидеров/миграций.
- setBaseConstants — установка основных констант системы.
Хранение кэша и работа с записями сайта
Все записи/страницы сайта хранятся в отдельных php-файлах в каталоге website/pages. Каждый файл страницы должен иметь служебную часть в виде php-комментария /** **/, только в этом случае она будет считаться записью/страницей сайта.
При запуске сайта, система будет проверять наличие изменений в файлах и структуре каталогов. На основе этих изменений будет построен кэш в виде SQLite-таблицы. Таким образом информация о записях будет храниться в базе данных.
В последующем, для того, чтобы сделать выборку, используются обычные SQL-запросы.
Такая схема позволяет организовать хранение нескольких тысяч файлов для одного сайта. Тестирование показывает, что Albireo CMS может работать с 10 000 записями без особых проблем.
Основная нагрузка будет лежать на построении кэша. Это зависит от мощности сервера.
Работа шаблона
Все шаблоны располагаются в website/templates, каждый в своём каталоге. По умолчанию используется шаблон default.
В шаблоне есть каталог layout, который хранит файлы, которые подключаются как основной файл страницы.
Например, если у страницы pages/about.php указан layout: default.php, то будет подключен файл website/templates/default/layout/default.php. Этот файл обеспечивает корректное формирование html-кода, на основе настроек (полей) страницы.
Уже в рамках default.php происходит непосредственное подключение файла pages/about.php.
Таким образом алгоритм будет следующий:
- система определяет по входящему URL, соответствующий ему php-файл (страница),
- система получает из полей страницы шаблон и layout-файл,
- система подключает этот layout-файл,
- внутри layout-файла происходит подключение php-файла страницы.
Такая схема работы позволяет использовать множество layout-файлов под разные задачи в рамках одного шаблона.
Расширение функциональности
Часто стоит задача: внести небольшое изменение в файл, не меняя при этом остальную функциональность. Например если нужно поменять данные в файле шапки, то есть два пути.
- Первый — непосредственно открыть файл шаблона и внести правки. В этом случае обновление системы затрёт эти правки.
- Второй — использовать альтернативный каталог, который повторяет исходный. Система сама определит, что файл размещен в альтернативном каталоге и подключит именно его.
📁 Каталог website/service/my
Этот каталог специально создан для того, чтобы хранить файлы, которые будут использоваться в шаблоне сайта. Это позволяет расширять возможности шаблона без необходимости его изменения.
website/
service/
my/
extras/
modules/
parts/
tpl/
Эти подкаталоги повторяют структуру каталога шаблона Default.
📁 Каталог website/config
Этот каталог используется для хранения файлов конфигурации. Если файла нет, то будет использован каталог system/config.
ВАЖНО! Не нужно менять файлы вsystem/config. Вместо этого нужно скопировать файл вwebsite/configи работать уже с ним.
📁 Рекурсивные config-файлы
Некоторые config-файлы система обрабатывает рекурсивно на уровне каждой опции. Это позволяет хранить в этих файлах только изменённые ключи по сравнению с файлом из system/config.
-
website/config/config.php -
website/config/page-data.php -
website/config/admin.php
Остальные файлы следует копировать целиком.
📁 Каталог website/service/functions
В этом каталоге можно размещать свои php-файлы, которые будут автоматически подключены при запуске системы. Лучше если в этих файлах будут php-функции без их выполнения.
📁 Каталог website/service/psr4
Здесь можно разместить php-классы, которые будут подключены через PSR4-автозагрузку.
Например:
# website/service/psr4/Demo/Demo.php
namespace Demo;
class Demo
{
public function test()
{
echo 'This Demo class';
}
}
Использование:
$demo = new \Demo\Demo; $demo->test();
📁 Каталог website/service/widgets
Здесь можно размещать собственные виджеты по тому же принципу, что и в system/widget.