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