Алгоритм работы движка
т.к. движок очень маленький и простой, то для общего понимания программистом (что и где нужно менять) проще рассказать об алгоритме работы движка (обязательно с чтением кода соответсвующих файлов! т.к. без чтения кода, это очень тяжело воспринимать):
- начинается все с того, что средствами .htaccess на файл index.php (весь алгоритм генерации страницы сосредоточен именно в этом файле) перенаправляются все запросы пользователей (за исключением папок: files, public, admin, install. А также некоторых стандартных расширений файлов.)
- подключается файл setup.php, содержаший все настройки сайта в ввиде констант (константы удобны, т.к. они видны в коде везде, и их невозможно переопределить). В административной части, в этом файле присутсвует подключение setup.php основного сайта.
- подключаются все файлы движка из папки includes, в которых в основном определяются необходимые классы и функции, а также (перечислены только ключевые моменты):
- создается глобальный массив локализации ($LANG) и подключается файл локализации движка (/lang/system/ru.php)
- происходит подключение к БД
- загружаются все настройки (из таблицы site_settings) сайта в глобальный массив ($SETTINGS_VARS)
- парсится текущая строка запроса (та строка, которая указывается в адресной строке браузера) и вычисляется ID текущей страницы (главная страница имеет ID: index), который записывается в $CUR_PAGE
- если в настройках установлен DEBUG_MODE==true, подключается файл отладки сайта (debug_start.php)
- подключаются загрузчики расширений сайта (они посредством вызовов функции register_extension_file() указывают файлы, которые нужно подключить в определенный момент работы движка сайта. Такие моменты в движке заданы посредством вызовов функции include_extension_files() с цифрой от 1 до 42, ниже в тексте они записаны как "подключение файлов расширений с load=N")
- Подключается файл '/settings/system/ru.php' (где 'ru' - язык сайта). В этом файле можно переопределять значения массива $LANG сайта и расширений, объявлять глобальные функции/классы/константы, которые потом можно использовать в любом месте.
- подключение файлов расширений с load=1 (системные расширения, здесь прерывать работу программы запрещено)
- подключение файлов расширений с load=2 (расширения сбора статистики и пр., здесь прерывать работу программы запрещено)
- подключение файлов расширений с load=3 (проверки доступа, проверки на безопасность)
- если в настройках сайта установлена константа NEED_USER_ACCESS==true, то проверяем константу USER_ACCESS на истину (если ложно - вызываем fatal_error). Расширения с load=3 при NEED_USER_ACCESS==true должны были прервать работу скрипта если пользователь не прошел авторизацию, или установить константу USER_ACCESS=true.
- подключение файлов расширений с load=4 (после проверки доступа и безопасности)
- если страница из кеша ($PAGE_HTML_CODE_FROM_CACHE==true, т.е. расширение кеширования смогло найти в кеше весь HTML-код страницы, и ее нет необходимости генерировать):
- подключение файлов расширений с load=12 (изменяем html-код страницы кэша)
- подключение файлов расширений с load=13 (обработка перед отправкой html-кода, html-код здесь менять запрещено)
- отправка HTML-код из кэша клиенту
- подключение файлов расширений с load=14 (после вывода html-кода)
- если в настройках установлен DEBUG_MODE==true, подключается файл отладки сайта (debug_end.php)
- останавливаем работу скрипта
- подключение файлов расширений с load=5 (Если страница не из кэша)
- делаем запрос к БД (к таблице site_pages) для получения данных о странице сайта (ID страницы хранится в глобальной переменной $CUR_PAGE), в том числе здесь выясняется структура страницы сайта (какие на ней используются модули, материалы, шаблоны), которые записываются как секция "section_main".
- в данных о текущей странице, указан ID используемого шаблона сайта. Делаем запрос к БД (таблице site_pages_templates) для получения данных о шаблоне текущей страницы сайта.
- подключение файлов расширений с load=6 (Если страница не из кэша, до постройки $ROOTDATA, но после получения данных о странице и шаблоне)
- формируем глобальную переменную $ROOTDATA, содержащую данные для шаблона страницы
- подключение файлов расширений с load=7 (Если страница не из кэша, после постройки $ROOTDATA но перед подключением секций)
- подключаем все секции сайта (они прописываются в $ROOTDATA под именем секции)
- подключение файлов расширений с load=8 (перед отправкой $ROOTDATA шаблонизатору)
- передаем $ROOTDATA шаблонизатору (данные о шаблоне текущей страницы мы получили ранее)
- подключение файлов расширений с load=9 (изменяем html-код страницы)
- подключение файлов расширений с load=10 (обработка перед отправкой html-кода, html-код здесь менять запрещено)
- отправляем html-код клиенту
- подключение файлов расширений с load=11 (после вывода html-кода)
- если в настройках установлен DEBUG_MODE==true, подключается файл отладки сайта (debug_end.php)
- останавливаем работу скрипта