Definition of the templates used to render all HTML pages displayed in TWiki
The new modular template system is more flexible, efficient, and easily updated than the old set-up, where each template is a complete HTML file. The new master template approach places common templates parts, like headers and footers, in one shared file. This simplifies the conversion of templates into XHTML format, and provides a more versatile solution for templates and for skins.
The main difference is that templates are now defined using variables to include template parts. You change one stored instance of a common element to update all occurrences. The new system:
&TWiki::Store::readTemplate()
so that the caller simply gets an expanded template file (the same as before).
%TMPL:<key>%
and %TMPL:<key>{"attr"}%
.
%TMPL:INCLUDE{"file"}%
: Includes a template file. The usual search path is applied.
%TMPL:DEF{"var"}%
: Define a variable. Text between this and the END directive is not returned, but put into a hash for later use.
%TMPL:END%
: Ends variable definition.
%TMPL:P{"var"}%
: Prints a previously defined variable.
twiki.tmpl
, like twiki.print.tmpl
, that redefines the header and footer.
Attached is an example of an oops base template oopsbase.tmpl
and a example oops dialog oopstest.tmpl
which is based on the base template. NOTE: This isn't the release version, just a quick, simple demo.
The first line declares the delimiter variable called "sep", used to separate multiple link items. The variable can be called anywhere by writing %TMPL:P{"sep"}%
NOTE: Added a dot to escape rendering of variables, i.e. read %.WEB%
as %WEB%
.
<table border="1" cellspacing="0" cellpadding="1"> <tr><td> <verbatim> %.TMPL:DEF{"sep"}% | %.TMPL:END% <html> <head> <title> %.WIKITOOLNAME% . %.WEB% . %.TOPIC% %.TMPL:P{"titleaction"}%</title> <base href="%.SCRIPTURL%/view%.SCRIPTSUFFIX%/%.WEB%/%.TOPIC%"> <meta name="robots" content="noindex"> </head> <body bgcolor="#FFFFFF"> <table width="100%" border="0" cellpadding="3" cellspacing="0"> <tr> <td bgcolor="%.WEBBGCOLOR%" rowspan="2" valign="top" width="1%"> <a href="%.WIKIHOMEURL%"> <img src="%.PUBURLPATH%/wikiHome.gif" border="0"></a> </td> <td> <b>%.WIKITOOLNAME% . %.WEB% . </b><font size="+2"> <B>%.TOPIC%</b> %.TMPL:P{"titleaction"}%</font> </td> </tr> <tr bgcolor="%.WEBBGCOLOR%"> <td colspan="2"> %.TMPL:P{"webaction"}% </td> </tr> </table> --- ++ %.TMPL:P{"heading"}% %.TMPL:P{"message"}% <table width="100%" border="0" cellpadding="3" cellspacing="0"> <tr bgcolor="%.WEBBGCOLOR%"> <td valign="top"> Topic <b>TWikiTemplates</b> . { %.TMPL:P{"topicaction"}% } </td> </tr> </table> </body> </verbatim> </td></tr> </table >
Each oops template basically just defines some variables and includes the base template that does the layout work.
</table >
Sample screen shot of oopstest.tmpl
With URL:
.../bin/oops/Test/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify
%.TMPL:DEF{"titleaction"}% (test =titleaction=) %.TMPL:END% %.TMPL:DEF{"webaction"}% test =webaction= %.TMPL:END% %.TMPL:DEF{"heading"}% Test heading %.TMPL:END% %.TMPL:DEF{"message"}% Test =message=. Blah blah blah blah blah blah blah blah blah blah blah... * Some more blah blah blah blah blah blah blah blah blah blah... * Param1: %PARAM1% * Param2: %PARAM2% * Param3: %PARAM3% * Param4: %PARAM4% %.TMPL:END% %.TMPL:DEF{"topicaction"}% Test =topicaction=: [[%.WEB%.%TOPIC%][OK]] %.TMPL:P{"sep"}% [[%.TWIKIWEB%.TWikiRegistration][Register]] %.TMPL:END% %.TMPL:INCLUDE{"oopsbase"}%
![]()
All common template parts are defined in one master template, twiki.tmpl
, that all other templates include.
Template variable: | Defines: |
---|---|
%TMPL:DEF{"sep"}% | "|" separator |
%TMPL:DEF{"htmldoctype"}% | Start of all HTML pages |
%TMPL:DEF{"standardheader"}% | Standard header (ex: view, index, seach) |
%TMPL:DEF{"simpleheader"}% | Simple header with reduced links (ex: edit, attach, oops) |
%TMPL:DEF{"standardfooter"}% | Footer, excluding revision and copyright parts |
%TMPL:DEF{"oops"}% | Skeleton of oops dialog |
Example:preview.tmpl
template%TMPL:INCLUDE{"twiki"}% %TMPL:DEF{"titleaction"}% (oops) %TMPL:END% %TMPL:DEF{"webaction"}% *Attention* %TMPL:END% %TMPL:DEF{"heading"}% Topic is not saved yet %TMPL:END% %TMPL:DEF{"message"}% Please go back in your browser and save the topic. %TMPL:END% %TMPL:DEF{"topicaction"}% %TMPL:END% %TMPL:P{"oops"}%
.tmpl
filename extension - it contains unresolved %VARIABLES%
, but can still be previewed directly in a browser.
-- PeterThoeny - 23 Jul 2001
-- MikeMannix - 30 Aug 2001