Алгоритмы работы Albireo CMS
Точка входа
- Все запросы принимаются на корневой
index.php
— таковы настройки.htaccess
. - В
index.php
определяется константаFRONT_NAME
, которая указывает на каталог сайта — по умолчанию этоwebsite
. - Происходит подключение
FRONT_NAME/index.php
.
Запуск сайта
Файл FRONT_NAME/index.php
отвечает за запуск сайта. Изначально в нём определяются базовые константы, которые хранят основные пути к каталогам.
После этого происходит последовательное выполнение:
- загрузка ядра системы
SYS_DIR/loader.php
, - проверка блокировки IP,
- проверка заданных редиректов,
- подключение пользовательских констант,
- регистрация PSR4-autoload,
- запуск механизма сессий,
- проверка создания
.htaccess
иrobots.txt
, - формирование данных по текущему URL,
- получение данных записей,
- обработка AJAX-запросов по адресу
_request_ajax
, - поиск соответствия входящего URL и php-файла записи,
- вывод страницы через layout-файл,
- вывод отладочной информации через встроенную debug-панель.
Хранение кэша и работа с записями сайта
Все записи/страницы сайта хранятся в отдельных 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/admmn.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
.