TemplateMarkupTricks
Questions answered by this recipe
I want to use templates to help wiki editors create new pages. How can I achieve this without installing any additional scripts or making changes to config.php?
Description
This recipe is a collection of ideas of what can be achieved with templates, the template=URL parameter and standard PmWiki markup.
Installation
In a standard (recent) PmWiki installation the markup examples listed below should work out of the box using copy and paste.
Chose an existing page from the current group as a template:
(:if auth edit {$Group}.ImaginaryNewPage:)
(:input form "{$PageUrl}" get:)
(:input hidden action edit:)'''New page:''' \
(:input text pagename "{$Group}.NewPage" size=25:) \
'''based on template:''' \
(:pagelist fmt=#tpldropdownlist group={$Group} list=normal wrap=inline:) \
(:input submit value="Create":)(:input end:)
(:ifend:)
(:if false:)
[[#tpldropdownlist]]
(:input select name=template value={=$FullName} label="{=$Name}":)
[[#tpldropdownlistend]]
(:ifend:)
|
Note: If you'd like to exclude certain pages from your list of templates, please take a look at pagelists documentation about how to customize the (:pagelist:) directive from above.
List all templates from a particular group:
If you prefer to store all your templates in a particular group, e.g. Templates, simply replace the first and the last incident of {$Group} with Templates in the markup from the section above:
(:if auth edit Templates.ImaginaryNewPage:)
(:input form "{$PageUrl}" get:)
(:input hidden action edit:)'''New page:''' \
(:input text pagename "{$Group}.NewPage" size=25:) \
'''based on template:''' \
(:pagelist fmt=#tpldropdownlist group=Templates list=normal wrap=inline:) \
(:input submit value="Create":)(:input end:)
(:ifend:)
(:if false:)
[[#tpldropdownlist]]
(:input select name=template value={=$FullName} label="{=$Name}":)
[[#tpldropdownlistend]]
(:ifend:)
|
Note: If you'd like to offer an empty/default template as well, simply create an empty page named something like "None" or "Default" in your Templates group.
Allow editors to chose from a list of pre-filled templates:
For every template, create an entry like this: (:input select name=template value=Group.TemplateName label="Name of Template":)
Example: (:input select name=template value=Cookbook.TemplateMarkupTricks label="TemplateMarkupTricks":)
... and insert it into the following markup after (:comment list your templates here:):
(:if auth edit {$Group}.ImaginaryNewPage:)
(:input form "{$PageUrl}" get:)
(:input hidden action edit:)
'''New page:''' (:input text pagename "{$Group}.NewPage" size=25:) \
'''based on template:''' \
(:comment list your templates here:)
(:input select name=template value=Cookbook.TemplateMarkupTricks label="TemplateMarkupTricks":)
(:input select name=template value=none label="none":)
(:comment template list end:)
(:input submit value="Create":)(:input end:)
(:ifend:)
|
Duplicate existing pages using templates:
Initially suggested here: EditTemplates-Talk
Put the following code in *.GroupFooter:
(:if auth edit {$Group}.ImaginaryNewPage:)
(:input form "{$PageUrl}" get:)
(:input hidden action edit:)
(:input hidden template {*$FullName}:)
New page based on current: (:input text pagename "{$Group}.NewPage" size=32:)
(:input submit value="Create":)
(:input end:)
(:ifend:)
|
In your SideBar, use instead:
(:if auth edit {*$Group}.ImaginaryNewPage:)
(:input form "{$PageUrl}" get:)
(:input hidden action edit:)
(:input hidden template {*$FullName}:)
New page based on current: (:input text pagename "{*$Group}.NewPage" size=32:)
(:input submit value="Create":)
(:input end:)
(:ifend:)
|
Create new template based page with random name:
Notes:
- please change
Cookbook.Templateto group and name of your actual template - the page name will be the current timestamp combined with a random number between 1 and 10000
- for creating multiple new pages the page containing the "new page" link needs to be reloaded each time in order to generate a fresh (random) page name
- useful for "database-style" applications with page text variables and page lists; the template can contain the names of page text variables as "database fields"
[[Create new page in group "{$Group}" based on template -> {(ftime fmt="%s")}{(rand 1 10000)}\
?action=edit&template=Cookbook.Template]]
|
Change log / Release notes
- 2014-02-20: initial release
- 2014-03-20: added note regarding template based pages with random names
See also
Contributors
Comments
See discussion at TemplateMarkupTricks-Talk
User notes : If you use, used or reviewed this recipe, you can add your name. These statistics appear in the Cookbook listings and will help newcomers browsing through the wiki.