Pattern Skin Customization
Guidelines how to create and customize page templates. For styling your Foswiki using stylesheets, see Pattern Skin Css Cookbook.On this page:
First Read: How to modify PatternSkin templates
Everything you see on the common 'view' page is written by theview template. For pattern skin this file is /templates/view.pattern.tmpl.
We describe two approaches to override this template: - By creating a custom skin file in the
templatesdirectory - By creating a custom topic template
- If you want to change the appearance for a lot of pages or even site-wide, the template approach is the easiest.
- If you want to change the appearance of a single topic, or a set of topics, use a topic template.
The template approach
To change templates you will need shell access. If you don't have this read on below in The topic template approach. The quickest way to change the view template would be to simply change the text in the template. A safer way - strongly recommended, because it will survive a Foswiki update - is to create your own custom skin. That may sound like an awful lot of work, but in reality a skin may be as much as 1 file that consists of only a few lines of code. ExampleLet's say you want to simplify the bottom toolbar and remove all links except for "More topic actions". You would need to target
%TMPL:DEF{"topicactionbuttons"}%, which is located in view.pattern.tmpl.
The steps you would need: - Think up a name for your skin. Let us use
myskinfor now. - Create a new (empty) view template file in
/templatescalledview.myskin.tmpl. - In
view.myskin.tmplyou write:%TMPL:INCLUDE{"view"}% %TMPL:DEF{"top:topicactionbuttons"}%%TMPL:P{"more_link"}%%TMPL:END% - For testing, view any topic and append to the topic name:
?cover=myskin. You should see an effect now. - To make the changes visible on all pages, go to Main.Site Preferences (to keep Default Preferences intact) and write:
* Set COVER = myskinor write* Set SKIN = myskin,pattern
?cover=myskin to the url.
The topic template approach (using VIEW_TEMPLATE)
Template overrides can be written in a topic, a so-called topic template. Topic template names end withViewTemplate, for instance BlogPostViewTemplate.
Call this template by setting VIEW_TEMPLATE:
* Set VIEW_TEMPLATE = BlogPostView
- Note that you don't use the
Templateextension now - You can make this setting hidden by writing this in the Settings screen: go to More and then Topic Settings
OnlyMoreView, write:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"top:toolbarbuttons"}%%TMPL:P{"more_link"}%%TMPL:END%
You can also test this by appending ?template=OnlyMoreView to the url.
Reference: pattern skin template INCLUDE tree
Theview script invokes the view template: (Note that to simplify customization of the top and side bar layouts, the templates include an "Example" topic if the corresponding topic does not exist. Copy the example topic rather than changing the example directly.)
view
foswiki
css
viewtopbar
%SYSTEMWEB%.WebTopBar or %SYSTEMWEB%.WebTopBarExample
viewsidebar
%WEB%.WebLeftBar or %SYSTEMWEB%.WebLeftBarExample
viewtopicactionbuttons
viewbottombar
%SYSTEMWEB%.WebBottomBar or %SYSTEMWEB%.WebBottomBarExample
Note that WebTopBar is not used per web, but it's either pulled from Web Top Bar?, or, if it doesn't exist, from Web Top Bar Example.
Logo
How can I change the web logo?
By default the logo at the top left of each web points to the image with namelogo.gif that is attached to each web's Web Preferences. The preference settings that cause this behavior are defined in Default Preferences. Redefine your custom preference settings in Main.Site Preferences (to keep Default Preferences intact):
* Set WEBLOGONAME = logo.gif
* Set WEBLOGOIMG = %PUBURLPATH%/%BASEWEB%/%WEBPREFSTOPIC%/%WEBLOGONAME%
* Set WEBLOGOURL = %SCRIPTURLPATH{"view"}%/%BASEWEB%/%HOMETOPIC%
* Set WEBLOGOALT = Home
There are 2 ways to change the logo in a web:
Using logo.gif:
Using a new filename:
- Create a new image named
logo.gifand attach it to the web's Web Preferences topic. Pattern Skin's stylesheet assumes the logo is 40px high. More about that later.- You can also upload the image with FTP to
/pub/YourWeb/WebPreferences/.- Copy the above instructions ("Redefine your custom preference settings") and insert your logo name.
- Attach whatever image and attach it to the web's Web Preferences topic. Then add to the Web Preferences (under Custom web preferences):
* Set WEBLOGONAME = your-logo-name.gif-or-png
- Copy the above instructions ("Redefine your custom preference settings") and insert your logo name.
How do I set a site-wide logo?
There are a bunch of site-wide logo preference settings in Main.Site Preferences:WIKILOGOIMG, WIKILOGOURL and WIKILOGOALT.
To change only the web logo image to site-wide, in Main.Site Preferences set:
* Set WEBLOGOIMG = %WIKILOGOIMG%
My logo does not fit the top bar
See I want to change the height of the top barI want to change the white space above and below the logo
Change the table style in topic Web Top Bar?. The default top padding is 11px.Top bar
The search box won't find topics in other webs
In Web Top Bar? you can find the line:<input type="hidden" name="web" value="%BASEWEB%" />To search all webs, write:
<input type="hidden" name="web" value="all" />To search a couple of webs, for instance the webs Main and System, write:
<input type="hidden" name="web" value="Main,System" />See also: Search macro
I want to change the height of the top bar
This information has moved to PatternSkinCssCookbookI want to set or change the top background image
The image at the top is called "header art" - commonly the top image found on blog sites. The image that is displayed by default is set by the preferenceWEBHEADERART, defined in Default Preferences.
Redefine your custom preference settings in Main.Site Preferences (to keep Default Preferences intact):
* Set WEBHEADERART = %PUBURLPATH%/%SYSTEMWEB%/PatternSkin/Foswiki_header.gif * Set WEBHEADERBGCOLOR = somehexcolor (no quotes, for example: #ffffff)You can also set
WEBHEADERART per web, by setting the preference in the Web's WebPreferences.
I want to have the web color in the top bar
RedefineWEBHEADERBGCOLOR in Main.Site Preferences (to keep Default Preferences intact):
* Set WEBHEADERBGCOLOR = %WEBBGCOLOR%
I want to remove the Jump and Search boxes from the top bar
If you have localization enabled, you will also see a language dropdown box at the far right. You can remove these items from Web Top Bar?.I want to hide the top bar
Using templates: The view template is populated with page elements using template inclusions:
%TMPL:INCLUDE{"view"}%
%TMPL:INCLUDE{"viewtopicactionbuttons"}%
%TMPL:INCLUDE{"viewtopbar"}%
%TMPL:INCLUDE{"viewsidebar"}%
Each included template draws a part of the screen.Omit
%TMPL:INCLUDE{"viewtopbar"}% to hide the top bar.
Another approach is to clear the contents of module topbar with an empty definition. Using either a template or a topic template, write in your custom template:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"topbar"}%%TMPL:END%
and add:
%TMPL:DEF{"topbardimensions"}%#patternTopBar,
#patternClearHeaderCenter,
#patternClearHeaderLeft,
#patternClearHeaderRight {
height:0px;
}%TMPL:END%
Using style sheets: See Pattern Skin Css Cookbook No Top Bar
Left bar
I want to hide the side bar
Using templates:Omit
%TMPL:INCLUDE{"viewsidebar"}% to hide the side bar, or in a custom template clear it using
%TMPL:DEF{"sidebar"}%%TMPL:END%
Using style sheets: See Pattern Skin Css Cookbook No Left Bar
Buttons
I want to hide the edit buttons from certain users
It may defy the wiki-ness of your Foswiki installation, but in certain circumstances it could be useful to hide the edit buttons from users that are not logged in, for instance for clients that have gotten viewing rights only. Using either a template or a topic template, 'empty'top:toolbarbuttons and topicaction by writing:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"top:toolbarbuttons"}%%TMPL:END%
%TMPL:DEF{"topicaction"}%%TMPL:END%
In the user page of Wiki Guest, set the cover to
* Set COVER = customerBy default this topic is editable only by Wiki admins.
I want to remove the History button from the bottom
All action links and buttons are defined inviewtopicactionbuttons.tmpl. The bottom history link is defined in DEF action_revisions
%TMPL:DEF{"topicactionbuttons"}%
%TMPL:P{"action_activatable_edit_or_create"}%
%TMPL:P{"action_activatable_attach"}%
%TMPL:P{"action_printable"}%
%TMPL:P{"action_revisions"}%
%TMPL:P{"action_backlinks_simple"}%
%TMPL:P{"action_raw_or_view"}%
%TMPL:P{"action_activatable_raw_edit"}%
%TMPL:P{"activatable_more"}%
%TMPL:END%
To hide that link, In a custom skin view template view.myskin.tmpl empty action_revisions by replacing it with an empty string:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"action_revisions"}%%TMPL:END%
I want to put the bottom links as buttons at the top
The default definition inview.pattern.tmpl is:
%TMPL:DEF{"top:toolbarbuttons"}%%TMPL:P{"activatable_edit_or_create"}%%TMPL:P{"activatable_attach"}%%TMPL:END%
Create a new skin by creating a file view.myskin.tmpl in the templates directory. Write in it:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"top:toolbarbuttons"}%%TMPL:P{"history_history_link"}%%TMPL:END%
View any topic with ?skin=myskin,pattern, or set the SKIN preference to myskin,pattern.
This will remove the Edit and Attach buttons, and place a History button at the top.
You will probably not just want to have the History button there. Other button include names are:
create_topic_link raw_edit_link view_topic_link activatable_attach activatable_edit_or_create more_link activatable_printable backlinks_web_link backlinks_all_link backlinks_link history_rdiff_link history_history_link raw_link
Other page parts
I want to insert text outside of the topic content
PatternSkin has 2 'buckets' to write additional content to:contentheader and contentfooter, both defined in view.pattern.tmpl. These containers can contain text or html and are placed directly before and after the topic text.
Both modules are wrapped in CSS containers: -
contentheader- wrapped indivof classfoswikiContentHeader -
contentfooter- wrapped indivof classfoswikiContentFooter
So our custom template contains:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"contentheader"}%This is the text before%TMPL:END%
Use the same procedure for contents to be put after the topic text:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"contentfooter"}%This is the text after%TMPL:END%
I want to place the form at the top
Pattern skin has 2 buckets for the form:formtop (form at the top) and formbottom (form at the bottom). The default definition is:
%TMPL:DEF{"formtop"}%%TMPL:END%
%TMPL:DEF{"formbottom"}%%TMPL:P{"form"}%%TMPL:END%
You simply swap the bucket contents. Using either a template or a topic template, write in your custom template:
%TMPL:INCLUDE{"view"}%
%TMPL:DEF{"formtop"}%%TMPL:P{"form"}%%TMPL:END%
%TMPL:DEF{"formbottom"}%%TMPL:END%