Архитектура DIAFAN.CMS

Все запросы к системе попадают в первую очередь на файл index.php. Файл выполняет следующие функции:

  1. подключение всех «жизненно важных» файлов;
  2. проверка наличия папки инсталляции – если да, то перенаправление на установку системы;
  3. проверка запроса на доступ к административной папке – если да, то перенаправление на административную часть;
  4. определение путей сайта (анализируется адрес, который после site.ru/);
  5. инициация основного объекта системы.

Основной объект системы – экземпляр класса Init, описанный в файле includes/init.php.

При инициации основного объекта системы происходит:

  1. старт сессии;
  2. определение пользователя;
  3. определение запрошенной языковой версии сайта;
  4. определение запрошенной страницы сайта;
  5. подключение модуля;
  6. подключение шаблона дизайна сайта (по умолчанию themes/site.php).

Экземпляр класса Init передается во все другие объекты и доступен из любого места системы в виде переменной $this->diafan.

Таким образом, в любом месте системы можно получить глобальные данные:

  1. общие данные;
  2. общие функции;
  3. объекты классов-подключений.

Теперь подробнее об этих данных:

Общие данные

  • $this->diafan->installed_modules – массив данных с именами модулей, которые подключены к фронтенду сайта (в таблице {modules} сделала запись о модуле name=модуль, site='1');

    Пример:

    if(in_array('cart', $this->diafan->installed_modules))
    {
        
    // модуль «Корзина товаров» установлен и можно к нему обращаться
    }
  • $this->diafan->rewrite_variable_names – список всех переменных, доступных для использования в URL;
  • $this->diafan->current_module – модуль текущего исполняемого файла;
  • $this->diafan->current_insert_tag – текущий шаблонный тег.

Общие функции

Класс Init наследует абстрактный класс Core (includes/core.php). Все функции этого класса можно вызвать в контроллере и модели модуля в виде:

$this->diafan->название_функции();

Пример:

// редирект на главную страницу
$this->diafan->redirect('/');

// получение сообщения для пользователя, заданного в настройках модуля «Обратная связь»
$message = $this->diafan->configmodules('add_message', 'feedback');

Объекты классов-подключений

В основном объекте инициируются классы:

  • кеширование (класс Cache, файл includes/cache.php, вызывается $this->diafan->_cache) – вся работа с кэшем;
  • маршрутизатор (класс Route, файл includes/route.php, вызывается $this->diafan->_route) – доступ к переменным, передаваемым в URL, а также генерирование, сохранение, получение ЧПУ;
  • шаблоны модулей (класс Template, файл includes/template.php, вызывается $this->diafan->_tpl) – подключение шаблонов модулей, обработка текста из визуального редактора;
  • парсер шаблонных тегов (класс Parser_theme, файл includes/parser_theme.php, вызывается $this->diafan->_parser_theme) – подключает шаблонные теги, прописанные в виде тегов в шаблонах сайта и непосредственно в тексте визуального редактора.

Кроме того, через основной объект можно обратиться к любому модулю-подключению. Если в модуле есть файл modules/модуль/модуль.inc.php, где описан класс Модуль_inc, то при первом обращении к переменной $this->diafan->_модуль, создаётся экземпляр класса.

Выделим отдельно подключения модулей, относящихся к ядру системы:

  • cтраницы сайта – используется для получения данных о текущей странице и переопределение их в модуле.

    Пример:

    • $this->diafan->_site->id – номер текущей страницы;
    • $this->diafan->_site->module – модуль, прикрепленный к текущей странице;
    • $this->diafan->_site->text – контент текущей страницы.
  • пользователи сайта – используется для получения сведений о текущем пользователе.

    Пример:

    • $this->diafan->_users->id – id-номер текущего пользователя;
    • $this->diafan->_users->name – логин текущего пользователя;
    • $this->diafan->_users->fio – ФИО текущего пользователя.
  • языки сайта – используется для получения сведений о языках сайта, главной языке административной и пользовательской частей сайта и получение перевода интерфейса.

    Пример:

    • $this->diafan->_languages->all – массив данных обо всех языках, использующихся на сайте;
    • $this->diafan->_languages->site – номер языка, использующегося как основной на сайте;
    • $this->diafan->_languages->admin – номер языка, использующегося как основной в административной части.
Ваши комментарии и дополнения
23 декабря 2015 г. , редакция: 25 декабря 2015 г.
Было бы здорово в псевдо-графическом варианте видеть дерево подключения файлов при формировании страницы. А то сначала, когда документацию читать начинаешь (на этой странице), структура отслеживается (сначала index.php, потом init.php и т.д..), а далее по докам - нет.

Можно использовать древовидные JS-плагины для этой цели или на PHP реализовать.
Так структура будет абсолютно прозрачной и намного более понятной для тех, кто не может читать код "с листа".

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.