At line 0 added 199 lines. |
+ This page describes the Wiki v2 template system, which lets you adjust the |
+ appearance of your JSPWiki installation without worrying about losing your |
+ changes the next time you update JSPWiki. |
+ |
+ If you're looking for ready-made templates, please go to [JSPWiki:ContributedTemplates]. If you on the other hand are looking for ideas to implement in your templates, go to [JSPWiki:WantedTemplates]. |
+ |
+ ---- |
+ |
+ !!TEMPLATES |
+ |
+ JSPWiki v2 now supports the concept of "templates" and "skins". These |
+ are actually two different things: |
+ |
+ * ''Templates'' are set by the site administrator. They are a core set |
+ of HTML and JSP files, that define how your site looks. All |
+ templates are located in the JSPWiki/templates/<template name> |
+ directory. |
+ |
+ * ''Skins'' are modifications on the basic templates. Each template may |
+ have one or many skins available, and these are chosen by the user. |
+ These are based on stylesheets, and some templates might not support |
+ any skins at all. |
+ |
+ JSPWiki comes currently with a single template, called "default". |
+ This is also the template that gets used if no template has been |
+ defined. Unfortunately, the default template has only one "skin". |
+ |
+ |
+ !!Rolling your own |
+ |
+ To make your own template, just make an another subdirectory in |
+ "templates", copy all the files from the "default" -template, and |
+ modify them at your will. |
+ |
+ To specify which template your site should use, just change the |
+ definition of "jspwiki.templateDir" in jspwiki.properties. |
+ |
+ |
+ !!More details, aka "OK, here's how it works" |
+ |
+ !Main JSP pages: Wiki.jsp, Edit.jsp, Preview.jsp, PageInfo.jsp, etc. |
+ |
+ JSPWiki has a bunch of main JSP pages. These work as the "Controller" |
+ - they basically control the processing of the request. They take |
+ care of saving your document, or making sure that there are no |
+ concurrent changes, etc. You can modify these files, if you want - |
+ they're written as JSP pages to make your modifications easier. |
+ However, when you upgrade to a new JSPWiki version, you'll need to |
+ modify these pages again. |
+ |
+ The main JSP pages will then figure out which template to use, and |
+ will include the appropriate template file, which decides what the |
+ "View" is going to be like. |
+ |
+ There are two basic templates: ViewTemplate and EditTemplate. |
+ ViewTemplate gets all requests from any page that does not have to |
+ care about changing the page contents, and EditTemplate gets all those |
+ requests that do. |
+ |
+ Each template MUST have both of these files, or else there will be |
+ trouble. |
+ |
+ |
+ !View pages: ViewTemplate.jsp, EditTemplate.jsp |
+ |
+ Basically, all you ever need to do is to modify two files to change the look of your Wiki: |
+ |
+ __ViewTemplate.jsp__ gets all requests from Wiki.jsp, Preview.jsp, |
+ PageInfo.jsp, etc. Modify this file to change the visual outlook of |
+ your Wiki site, as your average browsing user would see it. |
+ |
+ __EditTemplate.jsp__ on the other hand gets all Edit.jsp requests. Modify |
+ this file so that people who edit it get to see stuff. |
+ |
+ |
+ OK. But we still have a problem: Displaying Page Info is totally |
+ different from showing the rendered text - yes? The other one has |
+ plenty of lists and items, and the other one has nice HTML text. But |
+ they are both handled by ViewTemplate.jsp! |
+ |
+ Here's where it gets complicated: The "default" template handles this |
+ by including different content files depending on the Page Request |
+ Context. The Page Request Context basically tells you whether you're |
+ asking for "info", or "diff", or whatever. The default template uses |
+ the CheckRequestContext tag to see which context you're in at the moment, |
+ and includes then a proper "Content" -file. |
+ |
+ For example, in an excerpt from the default template: |
+ {{{ |
+ <wiki:CheckRequestContext context="view"> |
+ <wiki:Include page="PageContent.jsp" /> |
+ </wiki:CheckRequestContext> |
+ }}} |
+ |
+ This basically means that "if the request context is 'view', |
+ i.e. someone just wanted to see the rendered HTML content, then |
+ include a JSP page called 'PageContent.jsp'". The PageContent.jsp |
+ then just basically says that: |
+ {{{ |
+ <wiki:InsertPage /> |
+ |
+ <wiki:NoSuchPage> |
+ This page does not exist. Why don't you go and |
+ <wiki:EditLink>create it</wiki:EditLink>? |
+ </wiki:NoSuchPage> |
+ }}} |
+ |
+ That is: "insert the page content in HTML. If there is no such page, |
+ display a simple note to the user, requesting him to fix this." |
+ |
+ So, it's not that difficult. Take a look at "ViewTemplate.jsp" to see |
+ what kind of different request contexts there are, and how to handle |
+ them. |
+ |
+ Note that this is just the way the default template does things. Your own template is free to do anything it wants; as long as you provide EditTemplate.jsp and ViewTemplate.jsp, you should be set. |
+ |
+ !"Content" pages |
+ |
+ These are the different "content" pages that are included by |
+ "ViewTemplate.jsp". For example, "PageContent.jsp" displays HTML, |
+ "DiffContent.jsp" displays the diff, etc. You can just easily reuse |
+ these, or do something else. |
+ |
+ !A clarifying picture |
+ {{{ |
+ |
+ Wiki.jsp, PageInfo.jsp, etc. |
+ ==> templates/<name_of_template>/ViewTemplate.jsp |
+ |
+ |
+ Edit.jsp |
+ ==> templates/<name_of_template>/EditTemplate.jsp |
+ }}} |
+ |
+ !Structure of the "default" template |
+ {{{ |
+ ViewTemplate.jsp |
+ (Provide basic layout, incl. SearchBox.jsp) |
+ (Include proper content page) |
+ ==> PageContent.jsp (If request was for Wiki.jsp) |
+ ==> InfoContent.jsp (If request was for PageInfo.jsp) |
+ etc. |
+ |
+ EditTemplate.jsp |
+ (Provide edit page layout) |
+ (Includes only SearchBox.jsp) |
+ |
+ }}} |
+ |
+ !!Explanation of the different tags |
+ |
+ JSPWiki templates are heavily based on JSP tags. A full explanation of them is available at [JSPWikiTags]. |
+ |
+ For further examples, just look at the default template, since it |
+ basically uses all of the tags. They're not that hard to figure out. |
+ |
+ |
+ ---- |
+ |
+ !!A few Frequently Asked Questions |
+ |
+ !Problem: Style Sheets |
+ |
+ The default template directory contains a small JavaScript file, ''cssinclude.js'', |
+ which attempts to load the right CSS definitions for client browsers. Notice |
+ that this file is __template specific__; you will need to modify it to use |
+ ''your'' template directory, if you have template-specific CSS. Modify this |
+ line (around 28): |
+ |
+ {{{ |
+ document.write("<link rel=\"stylesheet\" href=\"templates/default/"+sheet+"\">"); |
+ }}} |
+ |
+ and replace ''default'' with your template dir name. |
+ |
+ --[ebu] |
+ |
+ !Problem: Setting CSS classes to change the appearance of links, etc. on page parts |
+ |
+ Something I noticed while playing around with templates: if you want a clear contrast between |
+ wiki controls (LeftMenu, the top bar...) and page content, you'd want to be able to make text and links |
+ in various locations use different CSS classes. For example, you might want to render the control areas |
+ with darkish, earthy tones and light text/links, and normal dark-on-white on the content area. |
+ |
+ This doesn't seem like a trivial change at the face of it. How could we indicate what css styles to |
+ use in the template files? |
+ |
+ --[ebu] |
+ |
+ Trivial. In the template file, wrap the LeftMenu inside a <div class="leftmenu"> ... </div> block, then use a CSS selector to transform all anchors in that div to something else. Like thus: |
+ |
+ {{{ |
+ DIV.leftmenu A { font-size: 200px } |
+ }}} |
+ |
+ CSS is cool :-). |
+ |
+ --JanneJalkanen |
+ |