**%TMPL:<key>%**
and **%TMPL:<key>\{"attr"\}%**
.
- Directives:
- **%TMPL:INCLUDE\{"file"\}%**
: Includes a template file. The template directory of the current web is searched first, then the templates root (`twiki/templates`).
- **%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.
- Variables live in a global name space: there is no parameter passing.
- Two-pass processing lets you use a variable before or after declaring it.
- Templates and [[TWikiSkins]] work transparently and interchangeably. For example, you can create a skin that overloads only the `twiki.tmpl` master template, like `twiki.print.tmpl`, that redefines the header and footer.
- %H% Use of template directives is optional: templates work without them.
- %X% **NOTE:** Template directives work only for templates: they do not get processed in topic text.
## Types of Template
There are three types of template:
- **Master Template**: Stores common parts; included by other templates
- **HTML Page Templates**: Defines the layout of %WIKITOOLNAME% pages
- **Template Topics**: Defines default text when you create a new topic
### Master Templates
Common parts, appearing in two or more templates, can be defined in a master template and then shared by others: **twiki.tmpl**
is the default master template.
> Template variable: | >Defines: | >
---|---|
%TMPL:DEF{"sep"}% | >"|" separator | >
%TMPL:DEF{"htmldoctype"}% | >Start of all HTML pages | >
%TMPL:DEF{"standardheader"}% | >Standard header (ex: view, index, search) | >
%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 | >
**twiki/templates**
directory or in user topics. As an example, **twiki/templates/view.tmpl**
is the template file for the **twiki/bin/view**
script.
%H% Templates can be overloaded by individual webs.
%H% [[TWikiSkins]] can overload the standard templates.
TWiki uses the following search order to determine which template to use:
> If a skin is specified | >If no skin is specified | >
---|---|
templates/%WEB%/%RED%script.%RED%skin%ENDCOLOR%.tmpl |
> templates/%WEB%/%RED%script%ENDCOLOR%.tmpl |
>
templates/%RED%script%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl |
> templates/%RED%script%ENDCOLOR%.tmpl |
>
data/%WEB%/%RED%Skin%ENDCOLOR%Skin%RED%Script%ENDCOLOR%Template.txt |
> data/%WEB%/%RED%Script%ENDCOLOR%Template.txt |
>
data/TWiki/%RED%Skin%ENDCOLOR%Skin%RED%Script%ENDCOLOR%Template.txt |
> data/TWiki/%RED%Script%ENDCOLOR%Template.txt |
>
Legend: %BB% %RED%script%ENDCOLOR% refers to the script name, e.g view , edit %BB% %RED%Script%ENDCOLOR% refers to the same, but with the first character capitalized, e.g View %BB% %RED%skin%ENDCOLOR% refers to the skin name, e.g dragon , pattern %BB% %RED%Skin%ENDCOLOR% refers to the same, but with the first character capitalized, e.g Dragon %BB% %WEB% refers to the current web |
>
If a skin is specified | >If no skin is specified | >
---|---|
templates/%RED%web%ENDCOLOR%/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl |
> templates/%RED%web%ENDCOLOR%/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.tmpl |
>
templates/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.%RED%skin%ENDCOLOR%.tmpl |
> templates/%RED%Web%ENDCOLOR%.%RED%Topic%ENDCOLOR%.tmpl |
>
data/%RED%Web%ENDCOLOR%/%RED%Topic%ENDCOLOR%.txt |
>
Topic Name: | >What it is: | >
---|---|
[[Main/WebTopicViewTemplate]] | >Error page shown when you try to view a nonexistent topic | >
[[Main/WebTopicNonWikiTemplate]] | >Alert page shown when you try to view a nonexistent topic with a non-WikiName | >
[[Main/WebTopicEditTemplate]] | >Default text shown when you create a new topic. | >
Variable: | >Description: | >
---|---|
%DATE% |
> Current date, e.g. 29 Jun 2010 |
>
%USERNAME% |
> Login name, e.g. jsmith |
>
%WIKINAME% |
> [[Main/WikiName]] of user, e.g. JohnSmith |
>
%WIKIUSERNAME% |
> User name, e.g. Main.JohnSmith |
>
%URLPARAM{"name"}% |
> Value of a named URL parameter | >
%NOP% |
> A no-operation variable that gets removed. Useful to prevent a SEARCH from hitting an edit template topic; also useful to escape a variable like %URLPARAM%NOP%{...}% |
>
%NOP{ ... }% |
> A no-operation text that gets removed. Useful to write-protect an edit template topic, but not the topics based this template topic. See notes below. Example:%BR% %NOP{%BR% * Set ALLOWTOPICCHANGE = Main.TWikiAdminGroup%BR% }% |
>
**templatetopic**
specifies [[ExampleTopicTemplate]] as the template topic to use. Here is the HTML source of the form:
The `edit` scipt understands the following parameters, typically supplied by HTML input fields:
> Parameter: | >Description: | >
---|---|
topic |
> Name of topic to create. Can be set in a text field, or is set programmatically (e.g. with a sequential number) | >
onlywikiname |
> If set, TWiki will complain if the topic name is not a [[Main/WikiWord]] | >
onlynewtopic |
> If set, TWiki will complain if a topic of the same name already exists | >
templatetopic |
> The name of the template topic, e.g. topic used to copy the initial content | >
topicparent |
> Sets the parent topic | >
TopicClassification |
> Assuming the template topic has a form with a field called "TopicClassification", it will set the value of the field | >
contenttype |
> Optional parameter that defines the application type to write into the CGI header. Defaults to text/html . May be used to invoke alternative client applications |
>
anyname |
> Any parameter can passed to the new topic; if the template topic contains %URLPARAM{"anyname"}% , it will be replaced by its value |
>
**-- %WIKIUSERNAME% - %DATE%**
## Templates by Example
Attached is an example of an oops based template `oopsbase.tmpl` and an example oops dialog `oopstest.tmpl` based on the base template. %A% **NOTE:** This isn't the release version, just a quick, simple demo.
### Base template oopsbase.tmpl
The first line declares a delimiter variable called "sep", used to separate multiple link items. The variable can be called anywhere by writing `%TMPL:P{"sep"}%`
> > %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>%TOPIC%</b> . { > %TMPL:P{"topicaction"}% > } > </td> > </tr> > </table> > </body> > |
>
> %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"}% > |
>
</table > | >
**.../bin/oops/Sandbox/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify**
> > |