This is an old revision of the document!
Table of Contents
templateconfhelper Plugin
Compatible with DokuWiki
2010-11-07 "Anteater"
This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.
Similar to loadskin, multitemplate_styleman
Needed for subconfhelper
Installation
This plugin helps developing and managing templates. It does not add any functioanlity by its own.
This is a beta release. The functions included or their use might be a security risk
you can install the plugin using the Plugin Manager using this url:
http://m3.notomorrow.de/public/repos/dokuwiki/plugins/dokuwiki-plugin-templateconfhelper-0.1.tgz
or checkout the source on github:
git clone git://github.com/samfisch/dokuwiki-plugin-templateconfhelper.git templateconfhelper
features
- template inheritance, templates can reference php and style files from other templates – inheritance
- template switcher action plugin, later version might include template tags or user-settings-page extension –templateaction
- template images via fetch.php – fetchaction
- cascading template path, templates can be stored outside dokuwiki directory if you use preload
examples
An example template making use of css iheritance could look like this:
- style.ini
[stylesheets] layout.css = screen design.css = screen style.css = screen example.css = screen media.css = screen _mediaoptions.css = screen _admin.css = screen _linkwiz.css = screen _subscription.css = screen rtl.css = rtl print.css = print [replacements] ; main text color __text__ = "#F439CB"
- example.css
body .dokuwiki { font-size: 0.7em !important; }
TemplateAction
changes template based on users Selection via GET and saves it in the Session.
parameter
- $_GET[utpl] /^[\w-]+$/ - override template
functions
- get_user( $var=false ) - get utpl from session
- save_session( $var, $false ) - save utpl to session
- save_user( $var, $val ) - #DUMMY
- tpl_switch( $tpl ) - change style after init.php has been run
- tpl_loadconfig( $tpl ) - reload config for template, called on switch
FetchAction
uses FETCH_MEDIA_STATUS event to hook into fetch.php. This allows to have template files outside of webroot.
parameter
- $_GET[mode] styleimg - trigger
- $_GET[template /^[\w-]*$/ - template dir to search for the file
a nginx rewrite rule to fix path used in templates
rewrite ^/lib/tpl/((.*)/)?images/(.*) /lib/exe/fetch.php?mode=styleimg&media=$3&template=$2 last;
or with nicer path
rewrite ^/_img/((.*)/)?(.*) /lib/exe/fetch.php?mode=styleimg&media=$3&template=$2 last;
inheritance
The custom css.php and the functions in inc/template.php use following new config settings to look up templatefiles. Files that dont exist in the active template are choosen from the next template in this order:
- template, dokuwiki template setting possibly overwritten by template switch
- default_tpl, dokuwiki template setting
- base_tpl, fallback template
For the main.php the default is hardcoded in dokuwiki.php. So for templates to overwrite the main.php they have to exist in the dokuwiki lib/tpl/ directory. Fallback is always lib/tpl/default/. This is a security feature as without a special template making use of eg the tpl_include function no php code from the following cascade path is interpreted. (I think)
Cascade Path is an extension to the cascade config values in dokuwiki init. It can be set in preload.php and allows to read templates from pathes outside dokuwiki code. E.g. per domain in farming environments.
Example cascade path for inc/preload.php
$version = '/dokuwiki/' $farmdir = "$farmbasedir/domains/$animal/";
$config_cascade['template_dir'] = array( // used in templateconfig plugin 'default' => array( $farmbasedir.'/extension/tpl/', $farmbasedir.$version.'lib/tpl/' ), 'local' => array( $farmdir.'tpl/' ), #'protected' => array( $farmbasedir.'/extension/tpl_protected/' ), );
to allow animals to overwrite template php files a main.php like this can be used in the default_tpl or base_tpl in dokuwiki lib/tpl/ directory. It will check the cascade path for a main.php in the active template.
- main.php
<?php tpl_include( 'main.php' );
preload
This is a rather creative apporach to hook into css.php. The templateaction plugin class deffinition includes inc/preload.php. Here css.php calls are intercepted and the custom css.php from the plugins exe directory is loaded.
If the template_path cascade config has not been set. Defaults are made up for a standard dokuwiki setup.
helper
confutils
- getConfigPath( $type, $file ) - find file in cascade_config[$type]
template
- tpl_include( $file, $t=false ) - use getConfigPath to include file from cascade_config['template_path'], checks templates $t, default_tpl and base_tpl
- … some undocumented and likely to change functions for use in templates
css
include style.ini and css files based on inheritance. Makes use of default_tpl, base_tpl and getConfigPath( )
FAQ
Todo
- exclude or document template helper functions
- add template switcher for user settings
- publish some templates
Discussion
- let me know if you use this or not. I ll try to provide some of my templates that make use of this functions. — sf 2011/03/06 16:21