DokuWiki

It's better when it's simple

Инструменты пользователя

Инструменты сайта


ru:devel:overview

Обзор ядра

Это описание базового поведения «DokuWiki» во время отработки запроса на отображения страницы /doku.php?id=start&do=show. У вас под рукой должны быть исходники для понимания этого процесса. Можно также использовать он-лайн версию API документации XRef. А это графическое представление процесса создания страницы диаграмма вызовов. Много деталей было опущено для упрощения этого описания.

Имя файла Пример кода Описание
doku.php if(!defined('DOKU_INC')) Все начинается с определения корневого каталога вики
$ACT = $_REQUEST['do'] дальше определяется тип действия которое запрашивается, например do режим
require_once('init.php') с помощью init.php, инициализируется ядро
inc/init.php include('preload.php') предзагрузка делает возможным перезапись каталогов и конфигураций
if(!defined('DOKU_CONF') создание окружения определяет расположение кода
include(DOKU_INC. 'inc/config_cascade.php') подготовка и загрузка глобальной конфигурации файла(ов)
global $lang; загружает и подготавливает языковые файлы используя «английские» для всех не найденных вхождений
if(!defined('DOKU_REL') создает остальные переменные_окружения которые еще не были созданы, так как зависели от конфигурационных настроек
if(!headers_sent() && .. создание сессии и установка куков
require_once (DOKU_INC.'inc/load.php') подгружает все библиотеки

auth_setup()
инит контроллера плагинов, системы перехвата событий, аутентификации и выход после настройки почты
doku.php $ID = getID() возврат из init.php, очистка и передача запроса на глобальные переменные
$INFO = pageinfo() добавление метаданных страницы в глобальные переменные с помощью auth_quickaclcheck() и p_get_metadata(). Позже вызывается ее рендеринг, если она не кешируется.
if(!$INFO['exists'] … отправляет 404 для не найденных страниц
trigger_event(DOKUWIKI_STARTED) запускает плагины действий которые слушают DOKUWIKI_STARTED события
inc/actions.php act_dispatch($ACT) выполняет работы по указанному действию
if ($evt->advise_before()) ... позволяет плагинам переопределять обычное поведение используя событие ACTION_ACT_PREPROCESS
$ACT = act_clean($ACT) очистка и перенаправление отключенных действий на действие отображения страницы do=show

$ACT = act_permcheck($ACT)
проверяет ACL-разрешения на выполнение запрошенных действий. Переменная $ACT может меняться в процессе выполнения act_dispatch().
global $INFO
global $conf
делает доступными глобальные переменные для кода шаблона
trigger_event(ACTION_HEADERS_SEND) запускает экшен плагины по событию ACTION_HEADERS_SEND
include(template('main.php')) добавляет базовый код страницы в выбранный шаблон
lib/tpl/default/main.php
tpl_metaheaders()
главный скрипт шаблона состоит из элементов HTML дизайна с включением php запросов для наполнения контента как например метазаголовки, кнопки, элементы навигации и тд.. все находится в inc/template.php файле
tpl_content() здесь создаются вики-страницы
inc/template.php
trigger_event(TPL_ACT_RENDER) вызов tpl_content_core() по событию TPL_ACT_RENDER
switch($ACT) выбор контента на основании действия, основной do=show вызывает html_show()
inc/html.php $html = p_wiki_xhtml(…) который использует кешированную XHTML версию страницы ИЛИ запускает парсер-визуализатор для отображения закэшированных инструкции как XHTML ИЛИ использует парсер для перевода вики текста в инструкции, в первую очередь.
inc/template.php trigger_event(TPL_CONTENT_DISPLAY) возврат в tpl_content(). action-плагины имеют последний шанс на модификацию сырого HTML перед его отображением по событию TPL_CONTENT_DISPLAY
doku.php trigger_event(DOKUWIKI_DONE) завершение и вызов action-плагинов которые ждут DOKUWIKI_DONE события, после завершения работы главного скрипта шаблона
ru/devel/overview.txt · Последнее изменение: 2023-08-13 14:56 — Klap-in

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki