It's better when it's simple

User Tools

Site Tools


Core Overview

This is a walk through the source code during a request for /doku.php?id=start&do=show to explain the basics of DokuWiki. You should have the full source available when reading this to fully enjoy this journey. Use the XRef links to obtain a browsable version of the source. There is also a more detailed callgraph page available including the rendering process. A lot of detail is left out of this description to make it simpler.

Filename Code snippet Description
doku.php if(!defined('DOKU_INC')) Everything starts here by defining the base code directory
$ACT = $_REQUEST['do'] next we determine which action is requested a.k.a. do modes
require_once('init.php') over to init.php, initialize core
inc/init.php include('preload.php') preload make it possible to override directories and configuration cascade
if(!defined('DOKU_CONF') create environment defines for code location
include(DOKU_INC. 'inc/config_cascade.php') prepare and load the global configuration file(s)
global $lang; load and prepare the language files using English for all missing entries
if(!defined('DOKU_REL') create all environment defines not already defined, which might be dependent of the config settings
if(!headers_sent() && .. init session and set cookie
require_once (DOKU_INC.'inc/load.php') autoload all libraries

initialize plugin controller, event handling system, authentication and exit after setting up mail
doku.php $ID = getID() back from init.php, sanitize and turn request into global variables
$INFO = pageinfo() add page metadata into a global variable, this includes calling auth_quickaclcheck() and p_get_metadata(). The later causing a rendering of page metadata if it isn't cached.
if(!$INFO['exists'] … send 404 for missing pages
trigger_event(DOKUWIKI_STARTED) call action plugins subscribing the DOKUWIKI_STARTED event
inc/actions.php act_dispatch($ACT) do the work depending on action
if ($evt->advise_before()) ... allow plugins to override default behavior using ACTION_ACT_PREPROCESS event
$ACT = act_clean($ACT) sanitize and redirect disabled actions into do=show

$ACT = act_permcheck($ACT)
call processing code for requested action(s) while checking needed ACL permissions. The $ACT might change during act_dispatch().
global $INFO
global $conf
make global variables accessible to template code
trigger_event(ACTION_HEADERS_SEND) call action plugins subscribing the ACTION_HEADERS_SEND event
include(template('main.php')) over to the selected template main script
the template main script consist of HTML design elements calling on php methods for content like metaheaders, buttons, breadcrumb navigation elements etc. all available in the inc/template.php file
tpl_content() here the actual wiki page is created
trigger_event(TPL_ACT_RENDER) call to tpl_content_core() using TPL_ACT_RENDER event
switch($ACT) select content based on action, the basic do=show calls html_show()
inc/html.php $html = p_wiki_xhtml(…) which uses a cached XHTML version of the page OR triggers the renderer to render cached instructions as XHTML OR use the parser to turn wiki text into instructions first.
inc/template.php trigger_event(TPL_CONTENT_DISPLAY) back in tpl_content() action plugin's have a last chance to edit raw HTML before output by using TPL_CONTENT_DISPLAY event
doku.php trigger_event(DOKUWIKI_DONE) finish by calling action plugins subscribing the DOKUWIKI_DONE event when the template main script has ended
devel/overview.txt · Last modified: 2023-08-13 14:54 by Klap-in

Except where otherwise noted, content on this wiki is licensed under the following license: 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