Menu

algorithm

KyberPrizrak

Алгоритм работы движка

т.к. движок очень маленький и простой, то для общего понимания программистом (что и где нужно менять) проще рассказать об алгоритме работы движка (обязательно с чтением кода соответсвующих файлов! т.к. без чтения кода, это очень тяжело воспринимать):

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

Related

Wiki: Home