Master templates use the block definition directives (%TMPL:DEF and %TMPL:END%) to define common sections that appear in two or more other templates. twiki.tmpl is the default master template.
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
> >
%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
Line: 207 to 207
</form>
Changed:
< <
See TWikiScripts for details of the parameters that the edit script understands.
> >
See TWikiScripts#edit for details of the parameters that the edit script understands.
TIP: You can use the %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%
Templates are plain text with embedded template directives that tell TWiki how to compose blocks of text together to create something new.
Line: 24 to 26
Directives are of the form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
Directives:
%TMPL:INCLUDE{"file"}%: Includes a template file. The file is found as described below.
Changed:
< <
%TMPL:DEF{"block"}%: Define a block. Text between this and the %TMPL:END% directive is not used in-place, but is saved for later use with %TMPL:P. Leading and trailing whitespace is ignored.
> >
%TMPL:DEF{"block"}%: Define a block. All text between this and the next %TMPL:END% directive is removed and saved for later use with %TMPL:P.
%TMPL:END%: Ends a block definition.
%TMPL:P{"var"}%: Includes a previously defined block.
%{...}%: is a comment.
Line: 64 to 66
templates/web/script.tmpl
this usage is supported for compatibility only and is deprecated. Store web-specific templates in TWiki topics instead.
templates/script.tmpl
Changed:
< <
The TWiki topic web.topic if the template name can be parsed into web.topic
> >
The TWiki topic aweb.atopic if the template name can be parsed into aweb.atopic
The TWiki topic web.SkinSkinScriptTemplate for each skin on the skin path
The TWiki topic web.ScriptTemplate
Changed:
< <
The TWiki topic TWiki.SkinSkinScriptTemplate for each skin on the skin path
The TWiki topic TWiki.ScriptTemplate
> >
The TWiki topic %TWIKIWEB%.SkinSkinScriptTemplate for each skin on the skin path
The TWiki topic %TWIKIWEB%.ScriptTemplate
Legend:
script refers to the script name, e.g view, edit
Script refers to the same, but with the first character capitalized, e.g View
Line: 95 to 97
EDIT_TEMPLATE sets the template for editing a topic.
If these preferences are set locally (using Local instead of Set) for a topic, in WebPreferences, in Main.TWikiPreferences, or TWiki.TWikiPreferences (using Set), the indicated templates will be chosen for view and edit respectively. The template search order is as specified above.
Added:
> >
TMPL:INCLUDE recusion for piecewise customisation, or mixing in new features
If there is recusion in the TMPL:INCLUDE chain (eg twiki.classic.tmpl contains %TMPL:INCLUDE{"twiki"}%, the templating system will include the next twiki.SKIN in the skin path.
For example, to create a customisation of pattern skin, where you only want to over-ride the breadcrumbs for the view script, you can create only a view.yourlocal.tmpl:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"breadcrumb"}% We don't want any crumbs %TMPL:END%
and then set SKIN=yourlocal,pattern
Master Templates
Master templates use the block definition directives (%TMPL:DEF and %TMPL:END%) to define common sections that appear in two or more other templates. twiki.tmpl is the default master template.
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 variable that gets removed. Useful to prevent a SEARCH from hitting an edit template topic; also useful to escape a variable, such as %URLPA%NOP%RAM{...}% escaping URLPARAM
If you want to make a TWiki application where you need automatically generated unique topicnames, you can use 10 X's in the edit / save URL, and they will be replaced on topic save with a count value. For example, BugIDXXXXXXXXXX will result in topics named BugID0, BugID1, BugID2 etc.
> >
For TWiki application it is useful to automatically generate unique topicnames, such as BugID0001, BugID0002, etc. You can add AUTOINC<n> to the topic name in the edit and save scripts, it gets replaced with an auto-incremented number on topic save. <n> is a number starting from 0, and may include leading zeros. Leading zeros are used to zero-pad numbers so that auto-incremented topic names can sort properly. Deleted topics are not re-used to ensure uniqueness of topic names. That is, the auto-incremented number is always higher than the existing ones, even if there are gaps in the number sequence.
Examples:
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"}%
Deleted:
< <
%TMPL:DEF{"sep"}% | %TMPL:END%
<html>
Line: 260 to 275
</table>
</body>
Deleted:
< <
Test template oopstest.tmpl
Line: 269 to 282
Each oops template basically just defines some variables and includes the base template that does the layout work.
Deleted:
< <
%TMPL:DEF{"titleaction"}% (test =titleaction=) %TMPL:END%
%TMPL:DEF{"webaction"}% test =webaction= %TMPL:END%
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%{...}%
The new modular template system offers flexible, easy control over the layout of all TWiki pages. The master template approach groups parts that are shared by several templates - like headers and footers - in a common file. Special variables allow individual layouts to include parts from a master template - variables are mixed with regular HTML markup for template-specific content. Templates are used to define page layout, and also to supply default content for new pages.
> >
There are three types of template:
Master Templates: Define blocks of text for use in other templates
HTML Page Templates: Define the layout of TWiki pages
Template Topics: Define default text when you create a new topic
Changed:
< <
Major changes from the previous template system
> >
All three types of template use the TWiki template system.
Changed:
< <
Where the old templates were each complete HTML documents, the new templates are defined using variables to include template parts from a master file. You can now change one instance of a common element to update all occurrences; previously, every affected template had to be updated. This simplifies the conversion of templates into XHTML format, and provides a more versatile solution for templates and for TWikiSkins. The new system:
> >
The TWiki Template System
Changed:
< <
separates a set of common template parts into a base template that is included by all of the related templates;
defines common variables, like a standard separator (ex: "|"), in the base template;
defines variable text in the individual templates and passes it back to the base template.
> >
Templates are plain text with embedded template directives that tell TWiki how to compose blocks of text together to create something new.
Changed:
< <
How Template Variables Work
Special template directives (or preprocessor commands) are embedded in normal templates.
All template preprocessing is done in &TWiki::Store::readTemplate() so that the caller simply gets an expanded template file (the same as before).
> >
How Template Directives Work
Template directives are embedded in templates.
Directives are of the form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
Directives:
Changed:
< <
%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.
> >
%TMPL:INCLUDE{"file"}%: Includes a template file. The file is found as described below.
%TMPL:DEF{"block"}%: Define a block. Text between this and the %TMPL:END% directive is not used in-place, but is saved for later use with %TMPL:P. Leading and trailing whitespace is ignored.
%TMPL:END%: Ends a block definition.
%TMPL:P{"var"}%: Includes a previously defined block.
%{...}%: is a comment.
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.
Use of template directives is optional: templates work without them.
Changed:
< <
NOTE: Template directives work only for templates: they do not get processed in topic text.
> >
NOTE: Template directives work only for templates: they do not get processed in normal topic text.
Changed:
< <
Types of Template
> >
TMPL:P also supports simple parameters. For example, given the definition
%TMPL:DEF{"x"}% x%P%z%TMPL:END% then %TMPL:P{"x" P="y"}% will expand to xyz.
Changed:
< <
There are three types of template:
> >
Note that parameters can simply be ignored; for example=%TMPL:P{"x"}%= will expand to x%P%z.
Any alphanumeric characters can be used in parameter names. You are highly recommended to use parameter names that cannot be confused with TWikiVariables.
Changed:
< <
Master Template: Stores common parts; included by other templates
HTML Page Templates: Defines the layout of TWiki pages
Template Topics: Defines default text when you create a new topic
> >
Note that three parameter names, context, then and else are reserved. They are used to support a limited form of "if" condition that you can use to select which of two templates to use, based on a context identifier:
When the "inactive" context is set, then this will expand the "link_inactive" template; otherwise it will expand the "link_active" template.
See IfStatements for details of supported context identifiers.
Changed:
< <
Master Templates
> >
Finding Templates
Templates are stored either in the twiki/templates directory, or can also be read from user topics. As an example, twiki/templates/view.tmpl is the default template file for the twiki/bin/view script.
Templates that are included using %TMPL:INCLUDE% are also found using the same search algorithm, unless you explicitly put '.tmpl' at the end of the template name. In this case, the string is assumed to be the full name of a template in the templates directory, and the algorithm isn't used.
TWiki uses the following search order to determine which template file or topic to use for a particular script. The skin path is set as described in TWikiSkins.
Changed:
< <
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.
> >
templates/web/script.skin.tmpl for each skin on the skin path
this usage is supported for compatibility only and is deprecated. Store web-specific templates in TWiki topics instead.
templates/script.skin.tmpl for each skin on the skin path
templates/web/script.tmpl
this usage is supported for compatibility only and is deprecated. Store web-specific templates in TWiki topics instead.
templates/script.tmpl
The TWiki topic web.topic if the template name can be parsed into web.topic
The TWiki topic web.SkinSkinScriptTemplate for each skin on the skin path
The TWiki topic web.ScriptTemplate
The TWiki topic TWiki.SkinSkinScriptTemplate for each skin on the skin path
The TWiki topic TWiki.ScriptTemplate
Legend:
script refers to the script name, e.g view, edit
Script refers to the same, but with the first character capitalized, e.g View
skin refers to a skin name, e.g dragon, pattern. All skins are checked at each stage, in the order they appear in the skin path.
Skin refers to the same, but with the first character capitalized, e.g Dragon
web refers to the current web
For example, the example template file will be searched for in the following places, when the current web is Thisweb and the skin path is print,pattern:
templates/Thisweb/example.print.tmpldeprecated; don't rely on it
templates/Thisweb/example.pattern.tmpldeprecated; don't rely on it
templates/example.print.tmpl
templates/example.pattern.tmpl
templates/Thisweb/example.tmpldeprecated; don't rely on it
templates/example.tmpl
Thisweb.PrintSkinExampleTemplate
Thisweb.PatternSkinExampleTemplate
Thisweb.ExampleTemplate
TWiki.PrintSkinExampleTemplate
TWiki.PatternSkinExampleTemplate
TWiki.ExampleTemplate
Template names are usually derived from the name of the currently executing script; however it is also possible to override these settings in the view and edit scripts, for example when a topic-specific template is required. Two preference variables can be user to override the templates used:
VIEW_TEMPLATE sets the template to be used for viewing a topic
EDIT_TEMPLATE sets the template for editing a topic.
If these preferences are set locally (using Local instead of Set) for a topic, in WebPreferences, in Main.TWikiPreferences, or TWiki.TWikiPreferences (using Set), the indicated templates will be chosen for view and edit respectively. The template search order is as specified above.
Master Templates
Master templates use the block definition directives (%TMPL:DEF and %TMPL:END%) to define common sections that appear in two or more other templates. twiki.tmpl is the default master template.
TWiki uses HTML template files for all actions, like topic view, edit, and preview. This allows you to change the look and feel of all pages by editing just a few template files.
Templates are stored either in the twiki/templates directory or in user topics. As an example, twiki/templates/view.tmpl is the template file for the twiki/bin/view script.
> >
HTML Page Templates
Changed:
< <
Templates can be overloaded by individual webs.
> >
HTML page templates are files of HTML mixed with template directives that tell TWiki how to build up an HTML page. As described above, the template system supports the use of 'include' directives that let you re-use the same sections of HTML - such as headers and footers - in several different places.
TWiki uses HTML page templates when composing the output from all actions, like topic view, edit, and preview. This allows you to change the look and feel of all pages by editing just a few template files.
Changed:
< <
TWiki uses the following search order to determine which template to use:
Legend: • script refers to the script name, e.g view, edit • Script refers to the same, but with the first character capitalized, e.g View • skin refers to the skin name, e.g dragon, pattern • Skin refers to the same, but with the first character capitalized, e.g Dragon • %WEB% refers to the current web
Additionally (and primarily for use in %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 view, to display meta data.
> >
HTML page templates are also used in the definition of TWikiSkins.
Changed:
< <
Template Topics
> >
Template Topics
Template topics define the default text for new topics. There are three types of template topic:
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:
> >
When you create a new topic, TWiki locates a topic to use as a content template according to the following search order:
Changed:
< <
A topic name specified by the templatetopic CGI parameter.
> >
A topic name specified by the templatetopic CGI parameter
if no web is specified, the current web is searched first and then the TWiki web
WebTopicEditTemplate in the current web
WebTopicEditTemplate in the TWiki web
Changed:
< <
Edit Template Topics and Variable Expansion
> >
Edit Template Topics and Variable Expansion
The following variables get expanded when a user creates a new topic based on a template topic:
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%{...}%
Changed:
< <
%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 }%
Login name of user who is instantiating the new topic, e.g. guest
%URLPARAM{"name"}%
Value of a named URL parameter
%WIKINAME%
WikiName of user who is instantiating the new topic, e.g. TWikiGuest
%WIKIUSERNAME%
User name of user who is instantiating the new tpoic, e.g. Main.TWikiGuest
Changed:
< <
Notes:
Unlike other variables, %NOP{ ... }% can span multiple lines.
The scan for the closing }% 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%% }%.
> >
%STARTSECTION{type="templateonly"}% ... %ENDSECTION{type="templateonly"}% markers are used to embed text that you do not want expanded when a new topic based on the template topic is created. For example, you might want to write in the template topic:
%STARTSECTION{type="templateonly"}%
This template can only be changed by:
* Set ALLOWTOPICCHANGE = %MAINWEB%.TWikiAdminGroup
%ENDSECTION{type="templateonly"}%
This will restrict who can edit the template topic, but will get removed when a new topic based on that template topic is created.
%NOP% can be used to prevent expansion of TWiki variables that would otherwise be expanded during topic creation e.g.i escape %nop>SERVERTIME% with %SER%NOP%VERTIME%.
All other variables are unchanged, e.g. are carried over "as is" into the new topic.
Changed:
< <
Template Topics in Action
> >
Template Topics in Action
Here is an example for creating new topics based on a specific template topic:
Changed:
< <
> >
New example topic:
Changed:
< <
> >
Deleted:
< <
(date format is YYYYxMMxDD)
The above form asks for a topic name. A hidden input tag named templatetopic specifies ExampleTopicTemplate as the template topic to use. Here is the HTML source of the form:
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 applications
anyname
Any parameter can passed to the new topic; if the template topic contains %URLPARAM{"anyname"}%, it will be replaced by its value
> >
See TWikiScripts for details of the parameters that the edit script understands.
TIP: You can use the %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%
Changed:
< <
Templates by Example
> >
Automatically Generated Topicname
If you want to make a TWiki application where you need automatically generated unique topicnames, you can use 10 X's in the edit / save URL, and they will be replaced on topic save with a count value. For example, BugIDXXXXXXXXXX will result in topics named BugID0, BugID1, BugID2 etc.
Changed:
< <
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.
> >
Example link to create a new topic:
[[%SCRIPTURLPATH{"edit"}%/%WEB%/BugIDXXXXXXXXXX?templatetopic=BugTemplate&topicparent=%TOPIC%&t=%SERVERTIME{"$day$hour$min$sec"}%][Create new item]]=
Master 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. NOTE: This isn't the release version, just a quick, simple demo.
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a .tmpl filename extension - it contained unresolved %VARIABLES%, but could still be previewed directly in a browser.
TWiki uses HTML template files for all actions, like topic view, edit, and preview. This allows you to change the look and feel of all pages by editing just a few template files.
> >
TWiki uses HTML template files for all actions, like topic view, edit, and preview. This allows you to change the look and feel of all pages by editing just a few template files.
Changed:
< <
Templates are in the twiki/templates directory. As an example, twiki/templates/view.tmpl is the template file for the twiki/bin/view script. Templates can be overloaded by individual webs. The following search order applies:
> >
Templates are stored either in the twiki/templates directory or in user topics. As an example, twiki/templates/view.tmpl is the template file for the twiki/bin/view script.
Changed:
< <
twiki/templates/$webName/$scriptName.tmpl
twiki/templates/$scriptName.tmpl
$webName is the name of the web (ex: Main)
$scriptName is the script (ex: view).
> >
Templates can be overloaded by individual webs.
Changed:
< <
NOTE:TWikiSkins can be defined to overload the standard templates.
> >
TWikiSkins can overload the standard templates.
TWiki uses the following search order to determine which template to use:
Legend: • script refers to the script name, e.g view, edit • Script refers to the same, but with the first character capitalized, e.g View • skin refers to the skin name, e.g dragon, pattern • Skin refers to the same, but with the first character capitalized, e.g Dragon • %WEB% refers to the current web
Additionally (and primarily for use in %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 view, to display meta data.
Line: 149 to 166
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
Added:
> >
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
Line: 252 to 270
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a .tmpl filename extension - it contained unresolved %VARIABLES%, but could still be previewed directly in a browser.
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 }%
Line: 250 to 252
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a .tmpl filename extension - it contained unresolved %VARIABLES%, but could still be previewed directly in a browser.
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
Added:
> >
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
Line: 247 to 250
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a .tmpl filename extension - it contained unresolved %VARIABLES%, but could still be previewed directly in a browser.
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
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
anyname
Any parameter can passed to the new topic; if the template topic contains %URLPARAM{"anyname"}%, it will be replaced by its value
TIP: You can use the %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%
Line: 237 to 247
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a .tmpl filename extension - it contained unresolved %VARIABLES%, but could still be previewed directly in a browser.
<input type="hidden" name="onlywikiname" value="on" />
<input type="submit" value="Create" />
(date format is <nop>YYYYxMMxDD)
</form>
Changed:
< <
The onlywikiname parameter enforces WikiWords for topic names.
> >
The onlywikiname parameter enforces WikiWords for topic names. The topicparent parameter sets the topic parent to the topic where the form is located.
TIP: You can use the %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%
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 }%
Notes:
Unlike other variables, %NOP{ ... }% can span multiple lines.
The scan for the closing }% 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%% }%.
All other variables are unchanged, e.g. are carried over "as is" into the new topic.
Template Topics in Action
Here is an example for creating new topics based on a specific template topic:
Line: 215 to 234
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a .tmpl filename extension - it contained unresolved %VARIABLES%, but could still be previewed directly in a browser.
Here is an example for creating new topics based on a specific template topic:
Changed:
< <
> >
New example topic:
Line: 103 to 103
The above form asks for a topic name. A hidden input tag named templatetopic specifies ExampleTopicTemplate as the template topic to use. Here is the HTML source of the form:
Here is an example for creating new topics based on a specific template topic:
Changed:
< <
> >
New example topic:
Line: 103 to 103
The above form asks for a topic name. A hidden input tag named templatetopic specifies ExampleTopicTemplate as the template topic to use. Here is the HTML source of the form:
Here is an example for creating new topics based on a specific template topic:
Changed:
< <
> >
New example topic:
Line: 103 to 103
The above form asks for a topic name. A hidden input tag named templatetopic specifies ExampleTopicTemplate as the template topic to use. Here is the HTML source of the form:
The new modular template system offers flexible, easy control over the layout of all TWiki pages. The master template approach groups parts that are shared by several templates - like headers and footers - in a common file. Special variables allow individual layouts to include parts from a master template - variables are mixed with regular HTML mark-up for template-specific content. Templates are used to define page layout, and also to supplydefault content for new pages.
> >
The new modular template system offers flexible, easy control over the layout of all TWiki pages. The master template approach groups parts that are shared by several templates - like headers and footers - in a common file. Special variables allow individual layouts to include parts from a master template - variables are mixed with regular HTML markup for template-specific content. Templates are used to define page layout, and also to supply default content for new pages.
Major changes from the previous template system
Line: 18 to 18
defines common variables, like a standard separator (ex: "|"), in the base template;
defines variable text in the individual templates and passes it back to the base template.
Changed:
< <
Functional Specifications
> >
How Template Variables Work
Special template directives (or preprocessor commands) are embedded in normal templates.
Deleted:
< <
Use of template directives is optional, templates work without them.
All template preprocessing is done in &TWiki::Store::readTemplate() so that the caller simply gets an expanded template file (the same as before).
Changed:
< <
Directives are of the form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
> >
Directives are of the form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
Directives:
Changed:
< <
%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 are live in a global name space, there is no parameter passing.
Two-pass processing, so that you can use a variable before declaring it or after.
Templates and TWikiSkins work transparently and interchangeably. For example, you can create a skin that overloads just the twiki.tmpl, like twiki.print.tmpl, that redefines the header and footer.
NOTE: The template directives work only for templates, they do not get processed in topic text.
> >
%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.
Use of template directives is optional: templates work without them.
NOTE: Template directives work only for templates: they do not get processed in topic text.
Changed:
< <
TWiki Master Template
> >
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 TWiki pages
Template Topics: Defines default text when you create a new topic
Master Templates
Changed:
< <
All common parts are defined in a master template, twiki.tmpl, that all other templates use.
> >
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.
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
Deleted:
< <
Types of Template
There are two types of templates:
HTML Page Templates: Defines layout of TWiki pages
Template Topics: Defines default text when you create a new topic
HTML Page Templates
Changed:
< <
TWiki uses HTML template files for all actions like topic view, edit, preview and so on. This allows you to change the look and feel of all pages by editing just some template files.
> >
TWiki uses HTML template files for all actions, like topic view, edit, and preview. This allows you to change the look and feel of all pages by editing just a few template files.
Changed:
< <
The template files are in the twiki/templates directory. As an example, twiki/templates/view.tmpl is the template file for the twiki/bin/view script. Templates can be overloaded per web. The following search order applies:
> >
Templates are in the twiki/templates directory. As an example, twiki/templates/view.tmpl is the template file for the twiki/bin/view script. Templates can be overloaded by individual webs. The following search order applies:
twiki/templates/$webName/$scriptName.tmpl
twiki/templates/$scriptName.tmpl
Added:
> >
$webName is the name of the web (ex: Main)
$scriptName is the script (ex: view).
Changed:
< <
Note:$webName is the name of the web (ex: Main), and $scriptName is the script (ex: view).
Note:TWikiSkins can be defined to overload the standard templates.
> >
NOTE:TWikiSkins can be defined to overload the standard templates.
Special variables are used in templates, especially in view, to display meta data.
Template Topics
Changed:
< <
Template topics define the default text for new topics. There are three types of template topics:
> >
Template topics define the default text for new topics. There are three types of template topic:
All template topics are located in the TWiki web. The WebTopicEditTemplate can be overloaded. The following search order applies when you create a new topic:
> >
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:
Changed:
< <
The topic name specified by the templatetopic CGI parameter.
WebTopicEditTemplate in the current web.
WebTopicEditTemplate in the TWiki web.
> >
A topic name specified by the templatetopic CGI parameter.
WebTopicEditTemplate in the current web
WebTopicEditTemplate in the TWiki web
Template Topics in Action
Line: 98 to 99
(date format is YYYYxMMxDD)
Changed:
< <
Above form asks for a topic name. A hidden input tag of name "templatetopic" specifies the ExampleTopicTemplate as the template topic. Here is the HTML source of the form:
> >
The above form asks for a topic name. A hidden input tag named templatetopic specifies ExampleTopicTemplate as the template topic to use. Here is the HTML source of the form:
The "onlywikiname" parameter enforces WikiWords for topic names.
> >
The onlywikiname parameter enforces WikiWords for topic names.
Changed:
< <
Note: Use can use the %WIKIUSERNAME% and %DATE% variables in your topic templates as the signature; those variables are expanded when a new topic is created. The standard topic signature is: -- %WIKIUSERNAME% - %DATE%
> >
TIP: You can use the %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%
Templates by Example
Changed:
< <
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.
> >
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
Changed:
< <
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"}%
> >
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"}%
Line: 205 to 207
With URL: .../bin/oops/Sandbox/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify
Changed:
< <
> >
Known Issues
Changed:
< <
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template is a structurally complete HTML document with a .tmpl filename extension - it contains unresolved %VARIABLES%, but can still be previewed directly in a browser.
> >
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template was a structurally complete HTML document with a .tmpl filename extension - it contained unresolved %VARIABLES%, but could still be previewed directly in a browser.
The new modular template system offers flexible, easy control over the layout of all TWiki pages. The master template approach groups parts that are shared by several templates - like headers and footers - in a common file. Special variables allow individual layouts to include parts from a master template - variables are mixed with regular HTML mark-up for template-specific content.
> >
The new modular template system offers flexible, easy control over the layout of all TWiki pages. The master template approach groups parts that are shared by several templates - like headers and footers - in a common file. Special variables allow individual layouts to include parts from a master template - variables are mixed with regular HTML mark-up for template-specific content. Templates are used to define page layout, and also to supplydefault content for new pages.
Major changes from the previous template system
Line: 54 to 54
HTML Page Templates: Defines layout of TWiki pages
Template Topics: Defines default text when you create a new topic
Added:
> >
HTML Page Templates
TWiki uses HTML template files for all actions like topic view, edit, preview and so on. This allows you to change the look and feel of all pages by editing just some template files.
Line: 69 to 70
Special variables are used in templates, especially in view, to display meta data.
Added:
> >
Template Topics
Template topics define the default text for new topics. There are three types of template topics:
Definition of the templates used to render all HTML pages displayed in TWiki
Overview
Changed:
< <
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 TWikiSkins.
> >
The new modular template system offers flexible, easy control over the layout of all TWiki pages. The master template approach groups parts that are shared by several templates - like headers and footers - in a common file. Special variables allow individual layouts to include parts from a master template - variables are mixed with regular HTML mark-up for template-specific content.
Major changes from the previous template system
Changed:
< <
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:
> >
Where the old templates were each complete HTML documents, the new templates are defined using variables to include template parts from a master file. You can now change one instance of a common element to update all occurrences; previously, every affected template had to be updated. This simplifies the conversion of templates into XHTML format, and provides a more versatile solution for templates and for TWikiSkins. The new system:
separates a set of common template parts into a base template that is included by all of the related templates;
Deleted:
< <
defines common variables, like a standard separator (ex: "|"), in the base template;
Deleted:
< <
defines variable text in the individual templates and passes it back to the base template.
Functional Specifications
Line: 34 to 32
Variables are live in a global name space, there is no parameter passing.
Two-pass processing, so that you can use a variable before declaring it or after.
Templates and TWikiSkins work transparently and interchangeably. For example, you can create a skin that overloads just the twiki.tmpl, like twiki.print.tmpl, that redefines the header and footer.
Changed:
< <
Note: The template directives work only for templates, they do not get processed in topic text.
> >
NOTE: The template directives work only for templates, they do not get processed in topic text.
All template topics are located in the TWiki web. The WebTopicEditTemplate can be overloaded. The following search order applies when you create a new topic:
Changed:
< <
The topic name specified by the templatetopic parameter.
> >
The topic name specified by the templatetopic CGI parameter.
WebTopicEditTemplate in the current web.
WebTopicEditTemplate in the TWiki web.
Line: 90 to 92
Changed:
< <
(date format is YYYYMMDD)
> >
(date format is YYYYxMMxDD)
Above form asks for a topic name. A hidden input tag of name "templatetopic" specifies the ExampleTopicTemplate as the template topic. Here is the HTML source of the form:
Line: 100 to 103
<form name="new" action="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%WEB%/">
* New example topic:
Changed:
< <
<input type="text" name="topic" value="ExampleTopic%SERVERTIME{$year$mo$day}%" size="22">
<input type="hidden" name="templatetopic" value="ExampleTopicTemplate">
<input type="hidden" name="onlywikiname" value="on">
<input type="submit" value="Create"> (date format is YYYYMMDD)
Templates and TWikiSkins work transparently and interchangeably. For example, you can create a skin that overloads just the twiki.tmpl, like twiki.print.tmpl, that redefines the header and footer.
Note: The template directives work only for templates, they do not get processed in topic text.
Changed:
< <
New Template System by Example
> >
TWiki Master Template
All common parts are defined in a master template, twiki.tmpl, that all other templates use.
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
Types of Template
There are two types of templates:
HTML Page Templates: Defines layout of TWiki pages
Template Topics: Defines default text when you create a new topic
HTML Page Templates
TWiki uses HTML template files for all actions like topic view, edit, preview and so on. This allows you to change the look and feel of all pages by editing just some template files.
The template files are in the twiki/templates directory. As an example, twiki/templates/view.tmpl is the template file for the twiki/bin/view script. Templates can be overloaded per web. The following search order applies:
twiki/templates/$webName/$scriptName.tmpl
twiki/templates/$scriptName.tmpl
Note:$webName is the name of the web ( i.e. Main ), and $scriptName is the script ( i.e. view ).
Note:TWikiSkins can be defined to overload the standard templates.
Some special variables are used in templates ( especially view ) to show meta data - see Meta Data Rendering
Template Topics
Template topics define the default text for new topics. There are three types of template topics:
All template topics are located in the TWiki web. The WebTopicEditTemplate can be overloaded. The following search order applies when you create a new topic:
The topic name specified by the templatetopic parameter.
WebTopicEditTemplate in the current web.
WebTopicEditTemplate in the TWiki web.
Template Topics in Action
Here is an example for creating new topics based on a specific template topic:
Above form asks for a topic name. A hidden input tag of name "templatetopic" specifies the ExampleTopicTemplate as the template topic. Here is the HTML source of the form:
<form name="new" action="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%WEB%/">
* New example topic:
<input type="text" name="topic" value="ExampleTopic%SERVERTIME{$year$mo$day}%" size="22">
<input type="hidden" name="templatetopic" value="ExampleTopicTemplate">
<input type="hidden" name="onlywikiname" value="on">
<input type="submit" value="Create"> (date format is YYYYMMDD)
</form>
The "onlywikiname" parameter enforces WikiWords for topic names.
Note: Use can use the %WIKIUSERNAME% and %DATE% variables in your topic templates as the signature; those variables are expanded when a new topic is created. The standard topic signature is: -- %WIKIUSERNAME% - %DATE%
Templates by Example
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.
Line: 44 to 119
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"}%
Changed:
< <
> >
%TMPL:DEF{"sep"}% | %TMPL:END%
Line: 95 to 169
Each oops template basically just defines some variables and includes the base template that does the layout work.
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: oopspreview.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"}%
Known Issues
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template is a structurally complete HTML document with a .tmpl filename extension - it contains unresolved %VARIABLES%, but can still be previewed directly in a browser.
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 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 TWikiSkins.
Major changes from the previous template system
Line: 26 to 26
Use of template directives is optional, templates work without them.
All template preprocessing is done in &TWiki::Store::readTemplate() so that the caller simply gets an expanded template file (the same as before).
Directives are of the form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
Changed:
< <
Initial set of directives:
%TMPL:INCLUDE{"file"}%: Includes a template file. The usual search path is applied.
> >
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.
Deleted:
< <
New directives can be added over time when needed, ex: IF-THEN-ELSE.
Variables are live in a global name space, there is no parameter passing.
Two-pass processing, so that you can use a variable before declaring it or after.
Changed:
< <
Templates and skins work transparently and interchangeably. For example, you can create a skin that overloads just the twiki.tmpl, like twiki.print.tmpl, that redefines the header and footer.
> >
Templates and TWikiSkins work transparently and interchangeably. For example, you can create a skin that overloads just the twiki.tmpl, like twiki.print.tmpl, that redefines the header and footer.
Note: The template directives work only for templates, they do not get processed in topic text.
New Template System by Example
Line: 45 to 44
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"}%
Deleted:
< <
NOTE: Added a dot to escape rendering of variables, i.e. read %.WEB% as %WEB%.
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template is a structurally complete HTML document with a .tmpl filename extension - it contains unresolved %VARIABLES%, but can still be previewed directly in a browser.
Slightly edited down, but waiting for new docs, hopefully.
see also for ref: orig TWikiTemplatingSystem?
Deleted:
< <
TWiki Template System
Line: 10 to 4
TWiki Template System
Changed:
< <
Define the templates used to render all HTML pages displayed in TWiki
> >
Definition of the templates used to render all HTML pages displayed in TWiki
Changed:
< <
Overview
> >
Overview
Changed:
< <
We have a need for more advanced template handling. As JohnTalintyre? pointed out in CommonHeaderFooterTemplate? it makes sense to separate the header and footer into one file so that it can be easily altered (or even overloaded by a skin). Also the oops dialog messages are all identical except for a few variables like heading, and so on.
> >
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.
Changed:
< <
Using external modules like the TemplateToolkit? would be one way to go, but this will add a lot of baggage to TWiki.
> >
Major changes from the previous template system
Changed:
< <
Needs of the TWiki templating system
> >
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:
Changed:
< <
Separate common parts into one (or more) base template file(s) and include that from other template files like view.tmpl.
Define common variables like a "|" separator in the base template and use them in other template files
Define variable text in templates (i.e. view.tmpl) and pass them to the base template
> >
separates a set of common template parts into a base template that is included by all of the related templates;
Changed:
< <
Functional Spec
> >
defines common variables, like a standard separator (ex: "|"), in the base template;
Changed:
< <
I tried to define a simple but powerful solution that can be extended over time. Here we go:
> >
defines variable text in the individual templates and passes it back to the base template.
Functional Specifications
Special template directives (or preprocessor commands) are embedded in normal templates.
Use of template directives is optional, templates work without them.
Changed:
< <
All template preprocessing is done in &TWiki::Store::readTemplate() so that the caller simply gets an expanded template file (the same as before)
Directives are of form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
> >
All template preprocessing is done in &TWiki::Store::readTemplate() so that the caller simply gets an expanded template file (the same as before).
Directives are of the form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
Initial set of directives:
%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.
Changed:
< <
New directives can be added over time when needed, i.e. IF-THEN-ELSE.
Variables live in a global name space, there is no parameter passing.
Two pass processing, so that you can use a variable before declaring it or after.
Templates and skins work transparently and interchangeably. You could for example define a new skin just for the header & footer and keep the other template files unchanged.
Note: The template directive work only for templates, they do not get processed in topic text.
> >
New directives can be added over time when needed, ex: IF-THEN-ELSE.
Variables are live in a global name space, there is no parameter passing.
Two-pass processing, so that you can use a variable before declaring it or after.
Templates and skins work transparently and interchangeably. For example, you can create a skin that overloads just the twiki.tmpl, like twiki.print.tmpl, that redefines the header and footer.
Note: The template directives work only for templates, they do not get processed in topic text.
Changed:
< <
Examples
> >
New Template System by Example
Changed:
< <
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. This is not the version that will go into the release, it is just a quick hack.
> >
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.
Changed:
< <
Base template oopsbase.tmpl
> >
Base template oopsbase.tmpl
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"}%
Changed:
< <
Note: Added a dot to escape rendering of variables, i.e. read %.WEB% as %WEB%.
> >
NOTE: Added a dot to escape rendering of variables, i.e. read %.WEB% as %WEB%.
Each oops template basically just defines some variables and includes the base template that does the layout work.
Added:
> >
Line: 129 to 125
</table >
Added:
> >
Changed:
< <
Sample screen shot of oopstest.tmpl
> >
Sample screen shot of oopstest.tmpl
With URL: .../bin/oops/Test/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify
Added:
> >
Added:
> >
Changed:
< <
Comments and feedback
The itching factor to put this into the upcoming release is to easy the pending converstion of the templates into XHTML format and to have a more flexible solution for templates and skins.
Is the terminology OK?
Is the spec OK?
Are there any other directives that are needed urgently?
One drawback by using the directives is that you can only test a template from within TWiki. This is because you don't have a text that has a linear flow when you use TMPL:DEF, TMPL:P and TMPL:INCLUDE.
It's probably more readable to enforce variables being defined before use, which would avoid need for slower two-pass processing.
[ PeterThoeny? ] You need two-pass processing because you need to define the "|" separator in the included template onone side, and on the other side define variables for the included template. The processing happens as regex in memory, so there is no mesurable speed penalty.
It would be nice to simplify the syntax a bit, e.g. not using "" around variable names (they don't really need it, unlike filenames), and not using braces - however, this is not a big deal and there is some merit in keeping consistent with the current TWiki syntax.
[ PeterThoeny? ] The templating system uses the standard internal TWiki function to parse variable attributes. The "" can be skipped (is possible but is not documented).
Please have a look at the latest templates in the TWikiAlphaRelease? . There is now one master template called twiki.tmpl that all other templates include (well, will include when all done). The idea is to define all common parts of the templates in twiki.tmpl and simply use that from all other templates.
> >
All common template parts are defined in one master template, twiki.tmpl, that all other templates include.
Simple header with reduced links (for edit, attach, oops,...)
%TMPL:DEF{"standardfooter"}%
Footer, excluding revision part and copyright part
> >
%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
Changed:
< <
I.e. the preview.tmpl template is now simply:
> >
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%
Changed:
< <
%TMPL:DEF{"message"}%
Please go back in your browser and save the topic. %TMPL:END%
%TMPL:DEF{"topicaction"}% %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"}%
Added:
> >
Known Issues
Changed:
< <
With this it should be possible to create a skin that overloads just the twiki.tmpl, i.e. a twiki.print.tmpl that redefines the header and footer.
> >
A drawback of referring to a master template is that you can only test a template from within TWiki, where the include variables are resolved. In the previous system, each template is a structurally complete HTML document with a .tmpl filename extension - it contains unresolved %VARIABLES%, but can still be previewed directly in a browser.
Define the templates used to render all HTML pages displayed in TWiki
Changed:
< <
Overview
> >
Overview
We have a need for more advanced template handling. As JohnTalintyre? pointed out in CommonHeaderFooterTemplate? it makes sense to separate the header and footer into one file so that it can be easily altered (or even overloaded by a skin). Also the oops dialog messages are all identical except for a few variables like heading, and so on.
Using external modules like the TemplateToolkit? would be one way to go, but this will add a lot of baggage to TWiki.
Changed:
< <
Needs of the TWiki templating system
> >
Needs of the TWiki templating system
Separate common parts into one (or more) base template file(s) and include that from other template files like view.tmpl.
Define common variables like a "|" separator in the base template and use them in other template files
Define variable text in templates (i.e. view.tmpl) and pass them to the base template
Changed:
< <
Functional Spec
> >
Functional Spec
I tried to define a simple but powerful solution that can be extended over time. Here we go:
Line: 44 to 44
Note: The template directive work only for templates, they do not get processed in topic text.
Changed:
< <
Examples
> >
Examples
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. This is not the version that will go into the release, it is just a quick hack.
Changed:
< <
Base template oopsbase.tmpl
> >
Base template oopsbase.tmpl
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"}%
Line: 101 to 101
Changed:
< <
Test template oopstest.tmpl
> >
Test template oopstest.tmpl
Each oops template basically just defines some variables and includes the base template that does the layout work.
Line: 130 to 130
</table >
Changed:
< <
Sample screen shot of oopstest.tmpl
> >
Sample screen shot of oopstest.tmpl
With URL: .../bin/oops/Test/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify
Changed:
< <
Comments and feedback
> >
Comments and feedback
The itching factor to put this into the upcoming release is to easy the pending converstion of the templates into XHTML format and to have a more flexible solution for templates and skins.
Define the templates used to render all HTML pages displayed in TWiki
Overview
We have a need for more advanced template handling. As JohnTalintyre? pointed out in CommonHeaderFooterTemplate? it makes sense to separate the header and footer into one file so that it can be easily altered (or even overloaded by a skin). Also the oops dialog messages are all identical except for a few variables like heading, and so on.
Using external modules like the TemplateToolkit? would be one way to go, but this will add a lot of baggage to TWiki.
Needs of the TWiki templating system
Separate common parts into one (or more) base template file(s) and include that from other template files like view.tmpl.
Define common variables like a "|" separator in the base template and use them in other template files
Define variable text in templates (i.e. view.tmpl) and pass them to the base template
Functional Spec
I tried to define a simple but powerful solution that can be extended over time. Here we go:
Special template directives (or preprocessor commands) are embedded in normal templates.
Use of template directives is optional, templates work without them.
All template preprocessing is done in &TWiki::Store::readTemplate() so that the caller simply gets an expanded template file (the same as before)
Directives are of form %TMPL:<key>% and %TMPL:<key>{"attr"}%.
Initial set of directives:
%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.
New directives can be added over time when needed, i.e. IF-THEN-ELSE.
Variables live in a global name space, there is no parameter passing.
Two pass processing, so that you can use a variable before declaring it or after.
Templates and skins work transparently and interchangeably. You could for example define a new skin just for the header & footer and keep the other template files unchanged.
Note: The template directive work only for templates, they do not get processed in topic text.
Examples
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. This is not the version that will go into the release, it is just a quick hack.
Base template oopsbase.tmpl
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%.
Each oops template basically just defines some variables and includes the base template that does the layout work.
%.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 >
Sample screen shot of oopstest.tmpl
With URL: .../bin/oops/Test/TestTopic2?template=oopstest¶m1=WebHome¶m2=WebNotify
Comments and feedback
The itching factor to put this into the upcoming release is to easy the pending converstion of the templates into XHTML format and to have a more flexible solution for templates and skins.
Is the terminology OK?
Is the spec OK?
Are there any other directives that are needed urgently?
One drawback by using the directives is that you can only test a template from within TWiki. This is because you don't have a text that has a linear flow when you use TMPL:DEF, TMPL:P and TMPL:INCLUDE.
It's probably more readable to enforce variables being defined before use, which would avoid need for slower two-pass processing.
[ PeterThoeny? ] You need two-pass processing because you need to define the "|" separator in the included template onone side, and on the other side define variables for the included template. The processing happens as regex in memory, so there is no mesurable speed penalty.
It would be nice to simplify the syntax a bit, e.g. not using "" around variable names (they don't really need it, unlike filenames), and not using braces - however, this is not a big deal and there is some merit in keeping consistent with the current TWiki syntax.
[ PeterThoeny? ] The templating system uses the standard internal TWiki function to parse variable attributes. The "" can be skipped (is possible but is not documented).
Please have a look at the latest templates in the TWikiAlphaRelease? . There is now one master template called twiki.tmpl that all other templates include (well, will include when all done). The idea is to define all common parts of the templates in twiki.tmpl and simply use that from all other templates.
Simple header with reduced links (for edit, attach, oops,...)
%TMPL:DEF{"standardfooter"}%
Footer, excluding revision part and copyright part
%TMPL:DEF{"oops"}%
Skeleton of oops dialog
I.e. the preview.tmpl template is now simply:
%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"}%
With this it should be possible to create a skin that overloads just the twiki.tmpl, i.e. a twiki.print.tmpl that redefines the header and footer.
-- PeterThoeny? - 23 Jul 2001
-- MikeMannix? - 30 Aug 2001
This site is powered by the TWiki collaboration platform. All material on this collaboration platform is the property of the contributing authors. All material marked as authored by Eben Moglen is available under the license terms CC-BY-SA version 4.