====== templateconfhelper Plugin ======
---- plugin ----
description: Template switching and inheritance
author : Samuel Fischer
email : sf@notomorrow.de
type : action helper
lastupdate : 2015-05-16
compatible : 2014-09-29
depends :
conflicts :
similar : loadskin, multitemplate_styleman
tags : template farm
downloadurl: https://github.com/samfisch/dokuwiki-plugin-templateconfhelper/zipball/master
bugtracker : https://github.com/samfisch/dokuwiki-plugin-templateconfhelper/issues
sourcerepo : https://github.com/samfisch/dokuwiki-plugin-templateconfhelper
donationurl:
screenshot_img:
----
===== Installation =====
:!: This plugin helps developing and managing templates. It does not add any functionality by its own.
:!: This is a beta release. The functions included or their use might be a security risk
Search and install the plugin using the [[plugin:extension|Extension Manager]]. Refer to [[:Plugins]] on how to install plugins manually.
* https://github.com/samfisch/dokuwiki-plugin-templateconfhelper
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 [[devel:preload|preload]]
===== Examples =====
An example template making use of css iheritance could look like this:
{{ http://m3.notomorrow.de/public/repos/dokuwiki/plugins/dokuwiki-plugin-templateconfhelper-example.png?400|example tpl with default base_tpl}}
[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"
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 config settings to look up templatefiles. Files that dont exist in the active template are choosen from the next template in this order:
* template, existing dokuwiki template setting possibly overwritten by template switch
* ''default_tpl'', automaticaly set dokuwiki template setting
* ''base_tpl'', new config setting for fallback template
For the ''main.php'' the default is hardcoded in DokuWiki. 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 e.g. the ''tpl_include'' function no php code from the following cascade path is interpreted. (I think.)
==== Configuration ====
The ''base_tpl'' can be configured using the DokuWiki configuration manager available in the admin menu.
^ ''base_tpl'' | The default template which is used if the file was not found in the page or user template |
Cascade Path is an extension to the cascade config values in dokuwiki init. It can be set in ''preload.php''. The new ''template_path'' setting allows to read templates from pathes outside dokuwiki code. E.g. per domain in farming environments.
The plugin has a hardcoded cascade path wich is used if the ''%%$cascade_path['template_dir']%%'' setting is empty as it is in a default install.
$config_cascade['template_dir'] = array( // used in confutils
'default' => array( dirname( DOKU_TPLINC ).'/' ),
);
==== Example ====
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/' ),
);
{{ http://m3.notomorrow.de/public/repos/dokuwiki/plugins/dokuwiki-plugin-templateconfhelper-path.png?400|example getConfigPath debugging output}}
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.
===== 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( )''.
===== Changes =====
{{rss>https://github.com/samfisch/dokuwiki-plugin-templateconfhelper/commits/master.atom date}}
===== 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. --- [[user>sf|sf]] //2011/03/06 16:21//