====== Обзор ядра ====== Это описание базового поведения "DokuWiki" во время отработки запроса на отображения страницы ''/doku.php?id=start&do=show''. У вас под рукой должны быть исходники для понимания этого процесса. Можно также использовать он-лайн версию API документации [[https://codesearch.dokuwiki.org/xref/dokuwiki/|XRef]]. А это графическое представление процесса создания страницы [[devel:callgraph|диаграмма вызовов]]. Много деталей было опущено для упрощения этого описания. ^Имя файла ^Пример кода ^Описание ^ | [[xref>doku.php]] |'' if(!defined('DOKU_INC')) '' | Все начинается с определения корневого каталога вики | | ::: |'' $ACT = $_REQUEST['do'] '' | дальше определяется тип действия которое запрашивается, например [[ru:devel:action_modes|do режим]] | | ::: |'' require_once('init.php') '' | с помощью init.php, инициализируется ядро | | [[xref>inc/init.php]] |'' include('preload.php') '' | [[devel:preload|предзагрузка]] делает возможным перезапись каталогов и конфигураций| | ::: |'' if(!defined('DOKU_CONF') '' | создание [[ru:devel:environment|окружения]] определяет расположение кода | | ::: |'' include(DOKU_INC. 'inc/config_cascade.php') '' | подготовка и загрузка глобальной [[ru:devel:configuration|конфигурации]] файла(ов) | | ::: |'' global $lang; '' | загружает и подготавливает [[devel:localization|языковые]] файлы используя "английские" для всех не найденных вхождений | | ::: |'' if(!defined('DOKU_REL') '' | создает остальные [[ru:devel:environment|переменные_окружения]] которые еще не были созданы, так как зависели от [[ru:config|конфигурационных]] настроек | | ::: |'' if(!headers_sent() && .. '' | создание сессии и установка куков | | ::: |'' require_once (DOKU_INC.'inc/load.php') '' | [[autoloader|подгружает]] все библиотеки | | ::: |'' ... \\ auth_setup() \\ ... '' | инит контроллера плагинов, системы [[devel:events|перехвата событий]], аутентификации и выход после настройки почты | | [[xref>doku.php]] |'' $ID = getID() '' | возврат из init.php, очистка и передача запроса на [[ru:devel:environment|глобальные переменные]]| | ::: |'' $INFO = pageinfo() '' | добавление [[ru:devel:metadata|метаданных]] страницы в [[ru:devel:environment|глобальные переменные]] с помощью [[xref>auth_quickaclcheck()]] и [[xref>p_get_metadata()]]. Позже вызывается ее рендеринг, если она не кешируется. | | ::: |'' if(!$INFO['exists'] ... '' | отправляет 404 для не найденных страниц | | ::: |'' trigger_event(DOKUWIKI_STARTED)'' | запускает [[ru:devel:action_plugins|плагины действий]] которые слушают [[devel:event:dokuwiki_started|DOKUWIKI_STARTED]] события | | [[xref>inc/actions.php]] |'' act_dispatch($ACT) '' | выполняет работы по указанному [[ru:devel:action_modes|действию]] | | ::: |''%%if ($evt->advise_before()) ...%%''| позволяет плагинам переопределять обычное поведение используя событие [[devel:event:action_act_preprocess|ACTION_ACT_PREPROCESS]] | | ::: |'' $ACT = act_clean($ACT) '' | очистка и перенаправление [[ru:config:disableactions|отключенных действий]] на действие отображения страницы ''do=show''| | ::: |'' ... \\ $ACT = act_permcheck($ACT) \\ ... '' | проверяет ACL-разрешения на выполнение запрошенных действий. Переменная $ACT может меняться в процессе выполнения [[xref>act_dispatch()]]. | | ::: |'' global $INFO \\ global $conf '' | делает доступными глобальные переменные для кода шаблона | | ::: |'' trigger_event(ACTION_HEADERS_SEND) '' | запускает [[ru:devel:action_plugins|экшен плагины]] по событию [[devel:event:action_headers_send|ACTION_HEADERS_SEND]] | | ::: |'' include(template('main.php')) '' | добавляет базовый код страницы в выбранный шаблон | | [[xref>lib/tpl/default/main.php]] |'' ... \\ tpl_metaheaders() \\ ... '' | главный скрипт [[template|шаблона]] состоит из элементов HTML дизайна с включением php запросов для наполнения контента как например метазаголовки, кнопки, элементы навигации и тд.. все находится в [[xref>inc/template.php]] файле | | ::: |'' tpl_content() '' | здесь создаются вики-страницы | | [[xref>inc/template.php]] |::: | ::: | | ::: |'' trigger_event(TPL_ACT_RENDER) '' | вызов [[xref>tpl_content_core()]] по событию [[devel:event:tpl_act_render|TPL_ACT_RENDER]] | | ::: |'' switch($ACT) '' | выбор контента на основании действия, основной ''do=show'' вызывает [[xref>html_show()]] | | [[xref>inc/html.php]] |'' $html = p_wiki_xhtml(...) '' | который использует [[ru:devel:caching#Двухстадийное кэширование|кешированную XHTML]] версию страницы __ИЛИ__ запускает [[parser|парсер-визуализатор]] для отображения закэшированных инструкции как XHTML __ИЛИ__ использует [[parser|парсер]] для перевода вики текста в инструкции, в первую очередь. | | [[xref>inc/template.php]] |'' trigger_event(TPL_CONTENT_DISPLAY) '' | возврат в [[xref>tpl_content()]]. [[action plugins|action-плагины]] имеют последний шанс на модификацию сырого HTML перед его отображением по событию [[devel:event:tpl_content_display|TPL_CONTENT_DISPLAY]] | | [[xref>doku.php]] |'' trigger_event(DOKUWIKI_DONE) '' | завершение и вызов [[action plugins|action-плагинов]] которые ждут [[devel:event:dokuwiki_done|DOKUWIKI_DONE]] события, после завершения работы главного скрипта шаблона |