Ядро

Обработка запросов

Чтобы запросы к разделам попадали на обработчик _core.php, нужно правильно настроить корневой файл .htaccess. Пример файла:

Options -Indexes

# Включаем mod_rewrite
RewriteEngine On

# Устанавливаем корневой путь (если CMS установлена в подпапку, укажите здесь)
RewriteBase /

# Исключаем обращения к реальным файлам (изображения, css, js и т.п.)
RewriteCond %{REQUEST_FILENAME} !-f

# Перенаправляем ВСЁ в _core.php
RewriteRule ^(.*)$ _core.php [QSA,L]

Содержимое _core.php:

<?php
// Отладка: включаем отображение ошибок
error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once $_SERVER['DOCUMENT_ROOT'].'/_tmpl/define.php';
require_once CORE . '/core/core.php';

// обновляем карту сайта
if (mc::is_admin()
	&& (!is_file(SITEROOT.'/sitemap.xml') || (intval(stat(SITEROOT.'/sitemap.xml')['mtime']) + 60*60) < time())) {
    module('sitemap');
}

?>

В строках 3 и 4 включается отображение всех предупреждений и ошибок. На работающем сайте рекомендуется отредактировать или закомментировать эти строки.

Строка 6 подключает основные настройки сайта.

Строка 7 запускает инициализацию движка.

Со строки 9 запускается генерация файла карты сайта sitemap.xml. Можно убрать этот функционал в планировщик Cron.

Среди констант, подключенных в define.php, есть те, которые указывают пути к папке движка CORE, папке шаблонов TMPL и папке скриптов и стилей INC:

define('CORE_URI', '_mc2');
define('CORE', $_SERVER['DOCUMENT_ROOT'].'/'.CORE_URI);
define('TMPL', $_SERVER['DOCUMENT_ROOT'].'/_tmpl');
define('INC', '_inc');

Инициализация

Ядро:

  1. последовательно подключает необходимые файлы
  2. устанавливает константу MC2_CORE в true
  3. загружает пользователя и его права доступа
  4. читает _section.php и _menu.php открытого раздела и загружает эти данные в переменные класса mc.
  5. определяет право на доступ пользователя к разделу и в зависимости от этого:
    • читает index.php раздела
    • или читает модуль, указанный в _section.php
    • или выдаёт ошибку
  6. определяет подходящий шаблон _template.php и выдаёт его

Класс mc

Private static переменные содержат информацию о разделе, меню и пользователе. Доступ к ним осуществляется через методы класса.

private static $section = [];
private static $menu = [];
private static $user = null;
private static $admin = [];
private static $script = [];

Доступные публичные методы класса:

mc::section($param = '', $value = '')

Выводит или обновляет информацию о параметрах раздела, которые прочитаны из _section.php.

Если не указана $param, то выводится весь массив.

Если указана $param, то только значение указанной переменной.

Если указана $value, то $param присваивается новое значение.

mc::menu()

Выводит массив меню.

mc::user($param = '')

Выводит информацию о пользователе.

Если не указана $param, то выводится весь массив информации.

Если указана $param, то только значение указанной переменной.

mc::admin($param = ''): bool|array

Выводит информацию о правах доступа пользователя.

Если не указана $param, то выводится весь массив имеющихся прав.

Если указана $param, то только значение указанной переменной true/false.

mc::is_admin(): bool

Возвращает true/false является ли пользователь хоть каким-нибудь администратором.

mc::error(int $code)

Запускает отображение страницы ошибки с указанным кодом.

mc::init(): string

Инициализирует ядро. Возвращает строку $uri.

mc::section_access($access): bool

Проверяет права доступа пользователя, возвращает true/false. $access - требуемые права доступа, разделенные запятыми ",". Если хотя бы одно право есть у пользователя, то доступ разрешён.

mc::set_script(string $module, string $template, string $file)

Добавляет в private массив mc::$script ссылку на самый приоритетный javascript файл $file для модуля $module с шаблоном $template. Сам файл ищется по следующей схеме:

Такой подход позволяет заменять стандартные javascript файлы модуля на свои. Для этого их нужно скопировать в папку SITEROOT/INC/$module/$file или SITEROOT/INC/$module/$template/$file и уже там изменять.

mc::get_script(): array

Возвращает массив ссылок на скрипты для использования в шаблоне страницы _template.php. Пример использования:

mc::set_script('main', '', 'script.js');
mc::set_script('main', '', 'gallery.js');
mc::set_script('message', '', 'script.js');

foreach (mc::get_script() as $script_link) {
	echo '<script src="'.$script_link.'"></script>'."\n";
}

mc::is_user(): bool

Возвращает true/false является ли посетитель зарегистрированным пользователем сайта.

mc::admin_uri()

Проверяет, находится ли вызов внутри админки. Возвращает true/false.