&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 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.
twiki.tmpl
master template, like twiki.print.tmpl
, that redefines the header and footer.
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.
Templates can be overloaded by individual webs.
TWikiSkins can overload the standard templates.
TWiki uses the following search order to determine which template to use:
Additionally (and primarily for use in
If a skin is specified If no skin is specified templates/%WEB%/script.skin.tmpl
templates/%WEB%/script.tmpl
templates/script.skin.tmpl
templates/script.tmpl
data/%WEB%/SkinSkinScriptTemplate.txt
data/%WEB%/ScriptTemplate.txt
data/TWiki/SkinSkinScriptTemplate.txt
data/TWiki/ScriptTemplate.txt
Legend:
• script refers to the script name, e.gview
,edit
• Script refers to the same, but with the first character capitalized, e.gView
• skin refers to the skin name, e.gdragon
,pattern
• Skin refers to the same, but with the first character capitalized, e.gDragon
•%WEB%
refers to the current web
%TMPL:INCLUDE{}%
) the template name may be a wiki topic name, specified as Web.Topic
, in which case the search is:
If Web is not specified in the INCLUDE, it defaults to TWiki, and the search to the first type. Special variables are used in templates, especially in
If a skin is specified If no skin is specified templates/web/Web.Topic.skin.tmpl
templates/web/Web.Topic.tmpl
templates/Web.Topic.skin.tmpl
templates/Web.Topic.tmpl
data/Web/Topic.txt
view
, to display meta data.
All template topics are located in the TWiki web. The WebTopicEditTemplate can be overloaded. When you create a new topic, TWiki locates a topic to use as a content template according to the following search order:
Topic Name: What it is: WebTopicViewTemplate Error page shown when you try to view a nonexistent topic WebTopicNonWikiTemplate Alert page shown when you try to view a nonexistent topic with a non-WikiName WebTopicEditTemplate Default text shown when you create a new topic.
templatetopic
CGI parameter.
Notes:
Variable: Description: %DATE%
Current date, e.g. 23 Nov 2024
%USERNAME%
Login name, e.g. jsmith
%WIKINAME%
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:
%NOP{
* Set ALLOWTOPICCHANGE = Main.TWikiAdminGroup
}%
%NOP{ ... }%
can span multiple lines.
}%
pattern is "non-greedy", that is, it stops at the first occurance. That means, you need to escape variables with parameters located inside %NOP{ ... }%
: Insert a %NOP%
between }
and %
. Silly example: %NOP{ %GMTIME{"$year"}%NOP%% }%
.
templatetopic
specifies ExampleTopicTemplate as the template topic to use. Here is the HTML source of the form:
<form name="new" action="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%INTURLENCODE{"%WEB%"}%/"> * New example topic: <input type="text" name="topic" value="ExampleTopic%SERVERTIME{$yearx$mox$day}%" size="23" /> <input type="hidden" name="templatetopic" value="ExampleTopicTemplate" /> <input type="hidden" name="topicparent" value="%TOPIC%" /> <input type="hidden" name="onlywikiname" value="on" /> <input type="hidden" name="onlynewtopic" value="on" /> <input type="submit" value="Create" /> (date format is <nop>YYYYxMMxDD) </form>The
edit
scipt understands the following parameters, typically supplied by HTML input fields:
TIP: You can use the
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 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 applicationsanyname
Any parameter can passed to the new topic; if the template topic contains %URLPARAM{"anyname"}%
, it will be replaced by its value
%WIKIUSERNAME%
and %DATE%
variables in your topic templates to include the signature of the person creating a new topic. The variables are expanded into fixed text when a new topic is created. The standard signature is: -- %WIKIUSERNAME% - %DATE%
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.
%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"}%
.../bin/oops/Sandbox/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify
.tmpl
filename extension - it contained unresolved %VARIABLES%
, but could still be previewed directly in a browser.