There are two kind of customizations you can do with Maven Site generation:
(1) Configuring the Site Descriptor (Simple) – This is a higher level customization, where you can change or configure certain sections/areas of the site layout including the navigation/menu. Read more on Maven website.
(2) Custom Velocity Template (Complex) – This is a low level customization, where you have full control over the generated html content. However it is more complex than the first one because you need to have an understanding of Apache Velocity templating language.
To begin with, add Maven Site Plugin configuration under the <build/> tag of your POM:
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.3</version>
<configuration>
<templateFile>${basedir}/src/site/maven-site-template.vm</templateFile>
</configuration>
</plugin>
Recommended way to develop/design a custom maven site template, is to start with the default template provided by maven itself, and then change it to your desired layout.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
<!-- Generated by Apache Maven Doxia Site Renderer#if( $doxiaSiteRendererVersion ) $doxiaSiteRendererVersion#end at $dateFormat.format( $currentDate ) --> | |
#macro ( link $href $name $target $img $position $alt $border $width $height $title ) | |
#set ( $linkTitle = ' title="' + $name + '"' ) | |
#if( $target ) | |
#set ( $linkTarget = ' target="' + $target + '"' ) | |
#else | |
#set ( $linkTarget = "" ) | |
#end | |
#if ( $href.toLowerCase().startsWith("http:/") || $href.toLowerCase().startsWith("https:/") || | |
$href.toLowerCase().startsWith("ftp:/") || $href.toLowerCase().startsWith("mailto:") || | |
$href.toLowerCase().startsWith("file:/") || ($href.toLowerCase().indexOf("://") != -1) ) | |
#set ( $linkClass = ' class="externalLink"' ) | |
#else | |
#set ( $linkClass = "" ) | |
#end | |
#if ( $img ) | |
#if ( $position == "left" ) | |
<a href="$href"$linkClass$linkTarget$linkTitle>#image($img $alt $border $width $height $title)$name</a> | |
#else | |
<a href="$href"$linkClass$linkTarget$linkTitle>$name #image($img $alt $border $width $height $title)</a> | |
#end | |
#else | |
<a href="$href"$linkClass$linkTarget$linkTitle>$name</a> | |
#end | |
#end | |
## | |
#macro ( image $img $alt $border $width $height $title ) | |
#if( $img ) | |
#if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") || | |
$img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:") || | |
$img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) ) | |
#set ( $imgSrc = $PathTool.calculateLink( $img, $relativePath ) ) | |
#set ( $imgSrc = $imgSrc.replaceAll( '\\', '/' ) ) | |
#set ( $imgSrc = ' src="' + $imgSrc + '"' ) | |
#else | |
#set ( $imgSrc = ' src="' + $img + '"' ) | |
#end | |
#if( $alt ) | |
#set ( $imgAlt = ' alt="' + $alt + '"' ) | |
#else | |
#set ( $imgAlt = ' alt=""' ) | |
#end | |
#if( $border ) | |
#set ( $imgBorder = ' border="' + $border + '"' ) | |
#else | |
#set ( $imgBorder = "" ) | |
#end | |
#if( $width ) | |
#set ( $imgWidth = ' width="' + $width + '"' ) | |
#else | |
#set ( $imgWidth = "" ) | |
#end | |
#if( $height ) | |
#set ( $imgHeight = ' height="' + $height + '"' ) | |
#else | |
#set ( $imgHeight = "" ) | |
#end | |
#if( $title ) | |
#set ( $imgTitle = ' title="' + $title + '"' ) | |
#else | |
#set ( $imgTitle = "" ) | |
#end | |
<img class="imageLink"$imgSrc$imgAlt$imgBorder$imgWidth$imgHeight$imgTitle/> | |
#end | |
#end | |
#macro ( banner $banner $id ) | |
#if ( $banner ) | |
#if( $banner.href ) | |
#set ( $hrf = $banner.href ) | |
#if ( ! ( $hrf.toLowerCase().startsWith("http:/") || $hrf.toLowerCase().startsWith("https:/") || | |
$hrf.toLowerCase().startsWith("ftp:/") || $hrf.toLowerCase().startsWith("mailto:") || | |
$hrf.toLowerCase().startsWith("file:/") || ($hrf.toLowerCase().indexOf("://") != -1) ) ) | |
#set ( $hrf = $PathTool.calculateLink( $hrf, $relativePath ) ) | |
#set ( $hrf = $hrf.replaceAll( '\\', '/' ) ) | |
#if ( ( $hrf == '' ) ) | |
#set ( $hrf = './' ) | |
#end | |
#end | |
<a href="$hrf" id="$id"#if( $banner.alt ) title="$banner.alt"#end> | |
#else | |
<div id="$id"> | |
#end | |
## | |
#if( $banner.src ) | |
#set ( $src = $banner.src ) | |
#if ( ! ( $src.toLowerCase().startsWith("http:/") || $src.toLowerCase().startsWith("https:/") || | |
$src.toLowerCase().startsWith("ftp:/") || $src.toLowerCase().startsWith("mailto:") || | |
$src.toLowerCase().startsWith("file:/") || ($src.toLowerCase().indexOf("://") != -1) ) ) | |
#set ( $src = $PathTool.calculateLink( $src, $relativePath ) ) | |
#set ( $src = $src.replaceAll( '\\', '/' ) ) | |
#end | |
#if ( $banner.alt ) | |
#set ( $alt = $banner.alt ) | |
#else | |
#set ( $alt = $banner.name ) | |
#end | |
<img src="$src" alt="$alt"#if( $banner.title ) title="$banner.title"#end /> | |
#else | |
$banner.name | |
#end | |
## | |
#if( $banner.href ) | |
</a> | |
#else | |
</div> | |
#end | |
#end | |
#end | |
## | |
#macro ( links $links ) | |
#set ( $counter = 0 ) | |
#foreach( $item in $links ) | |
#set ( $counter = $counter + 1 ) | |
#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) ) | |
#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) ) | |
#link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title ) | |
#if ( $links.size() > $counter ) | |
| | |
#end | |
#end | |
#end | |
## | |
#macro ( breadcrumbs $breadcrumbs ) | |
#foreach( $item in $breadcrumbs ) | |
#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) ) | |
#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) ) | |
#if ( ( $currentItemHref == '' ) ) | |
#set ( $currentItemHref = './' ) | |
#end | |
## | |
#link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title ) | |
> | |
#end | |
$shortTitle | |
#end | |
## | |
#macro ( displayTree $display $item ) | |
#if ( $item && $item.items && $item.items.size() > 0 ) | |
#foreach( $subitem in $item.items ) | |
#set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) ) | |
#set ( $subitemHref = $subitemHref.replaceAll( '\\', '/' ) ) | |
## | |
#if ( $alignedFileName == $subitemHref ) | |
#set ( $display = true ) | |
#end | |
## | |
#displayTree( $display $subitem ) | |
#end | |
#end | |
#end | |
## | |
#macro ( menuItem $item ) | |
#set ( $collapse = "none" ) | |
#set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) ) | |
#set ( $currentItemHref = $currentItemHref.replaceAll( '\\', '/' ) ) | |
## | |
#if ( $item && $item.items && $item.items.size() > 0 ) | |
#if ( $item.collapse == false ) | |
#set ( $collapse = "expanded" ) | |
#else | |
## By default collapsed | |
#set ( $collapse = "collapsed" ) | |
#end | |
## | |
#set ( $display = false ) | |
#displayTree( $display $item ) | |
## | |
#if ( $alignedFileName == $currentItemHref || $display ) | |
#set ( $collapse = "expanded" ) | |
#end | |
#end | |
<li class="$collapse"> | |
#if ( $item.img ) | |
#if ( $item.position == "left" ) | |
#if ( $alignedFileName == $currentItemHref ) | |
<strong>#image($item.img $item.alt $item.border $item.width $item.height $item.title) $item.name</strong> | |
#else | |
#link($currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title) | |
#end | |
#else | |
#if ( $alignedFileName == $currentItemHref ) | |
<strong>$item.name #image($item.img $item.alt $item.border $item.width $item.height $item.title)</strong> | |
#else | |
#link($currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title) | |
#end | |
#end | |
#else | |
#if ( $alignedFileName == $currentItemHref ) | |
<strong>$item.name</strong> | |
#else | |
#link( $currentItemHref $item.name $item.target $item.img $item.position $item.alt $item.border $item.width $item.height $item.title ) | |
#end | |
#end | |
#if ( $item && $item.items && $item.items.size() > 0 ) | |
#if ( $collapse == "expanded" ) | |
<ul> | |
#foreach( $subitem in $item.items ) | |
#menuItem( $subitem ) | |
#end | |
</ul> | |
#end | |
#end | |
</li> | |
#end | |
## | |
#macro ( mainMenu $menus ) | |
#foreach( $menu in $menus ) | |
#if ( $menu.name ) | |
#if ( $menu.img ) | |
#if( $menu.position ) | |
#set ( $position = $menu.position ) | |
#else | |
#set ( $position = "left" ) | |
#end | |
## | |
#if ( ! ( $menu.img.toLowerCase().startsWith("http:/") || $menu.img.toLowerCase().startsWith("https:/") || | |
$menu.img.toLowerCase().startsWith("ftp:/") || $menu.img.toLowerCase().startsWith("mailto:") || | |
$menu.img.toLowerCase().startsWith("file:/") || ($menu.img.toLowerCase().indexOf("://") != -1) ) ) | |
#set ( $src = $PathTool.calculateLink( $menu.img, $relativePath ) ) | |
#set ( $src = $src.replaceAll( '\\', '/' ) ) | |
#set ( $src = ' src="' + $src + '"' ) | |
#else | |
#set ( $src = ' src="' + $menu.img + '"' ) | |
#end | |
## | |
#if( $menu.alt ) | |
#set ( $alt = ' alt="' + $menu.alt + '"' ) | |
#else | |
#set ( $alt = ' alt="' + $menu.name + '"' ) | |
#end | |
## | |
#if( $menu.border ) | |
#set ( $border = ' border="' + $menu.border + '"' ) | |
#else | |
#set ( $border = ' border="0"' ) | |
#end | |
## | |
#if( $menu.width ) | |
#set ( $width = ' width="' + $menu.width + '"' ) | |
#else | |
#set ( $width = "" ) | |
#end | |
#if( $menu.height ) | |
#set ( $height = ' height="' + $menu.height + '"' ) | |
#else | |
#set ( $height = "" ) | |
#end | |
#if( $menu.title ) | |
#set ( $title = ' title="' + $menu.title + '"' ) | |
#else | |
#set ( $title = "" ) | |
#end | |
## | |
#set ( $img = '<img class="imageLink"' + $src + $alt + $border + $width + $height + $title + "/>" ) | |
## | |
#if ( $position == "left" ) | |
<h5>$img $menu.name</h5> | |
#else | |
<h5>$menu.name $img</h5> | |
#end | |
#else | |
<h5>$menu.name</h5> | |
#end | |
#end | |
#if ( $menu.items && $menu.items.size() > 0 ) | |
<ul> | |
#foreach( $item in $menu.items ) | |
#menuItem( $item ) | |
#end | |
</ul> | |
#end | |
#end | |
#end | |
## | |
#macro ( copyright ) | |
#if ( $project ) | |
#if ( ${project.organization} && ${project.organization.name} ) | |
#set ( $period = "" ) | |
#else | |
#set ( $period = "." ) | |
#end | |
## | |
#set ( $currentYear = ${currentDate.year} + 1900 ) | |
## | |
#if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) ) | |
${project.inceptionYear}-${currentYear}${period} | |
#else | |
${currentYear}${period} | |
#end | |
## | |
#if ( ${project.organization} ) | |
#if ( ${project.organization.name} && ${project.organization.url} ) | |
<a href="$project.organization.url">${project.organization.name}</a>. | |
#elseif ( ${project.organization.name} ) | |
${project.organization.name}. | |
#end | |
#end | |
#end | |
#end | |
## | |
#macro ( publishDate $position $decorationPublishDate $version ) | |
#if ( $decorationPublishDate && $decorationPublishDate.format ) | |
#set ( $format = $decorationPublishDate.format ) | |
#else | |
#set ( $format = "yyyy-MM-dd" ) | |
#end | |
## | |
$dateFormat.applyPattern( $format ) | |
## | |
#if ( $publishDate ) | |
#set ( $dateValue = $dateFormat.format( $publishDate ) ) | |
#elseif ( $decoration.custom.getChild( 'publishDate' ) ) | |
#set ( $dateValue = $decoration.custom.getChild( 'publishDate' ).getValue() ) | |
#else | |
#set ( $dateValue = $dateFormat.format( $currentDate ) ) | |
#end | |
## | |
#if ( $decorationPublishDate && $decorationPublishDate.position ) | |
#set ( $datePosition = $decorationPublishDate.position ) | |
#else | |
#set ( $datePosition = "left" ) | |
#end | |
## | |
#if ( $version ) | |
#if ( $version.position ) | |
#set ( $versionPosition = $version.position ) | |
#else | |
#set ( $versionPosition = "left" ) | |
#end | |
#else | |
#set ( $version = "" ) | |
#set ( $versionPosition = "left" ) | |
#end | |
## | |
#set ( $breadcrumbs = $decoration.body.breadcrumbs ) | |
#set ( $links = $decoration.body.links ) | |
#if ( $datePosition.equalsIgnoreCase( "right" ) && $links && $links.size() > 0 ) | |
#set ( $prefix = " |" ) | |
#else | |
#set ( $prefix = "" ) | |
#end | |
## | |
#if ( $datePosition.equalsIgnoreCase( $position ) ) | |
#if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) ) | |
$prefix <span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue</span> | |
#if ( $versionPosition.equalsIgnoreCase( $position ) ) | |
| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span> | |
#end | |
#elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) ) | |
<div id="lastPublished"> | |
<span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue</span> | |
#if ( $versionPosition.equalsIgnoreCase( $position ) ) | |
| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span> | |
#end | |
</div> | |
#elseif ( $datePosition.equalsIgnoreCase("left") ) | |
<div class="xleft"> | |
<span id="publishDate">$i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateValue</span> | |
#if ( $versionPosition.equalsIgnoreCase( $position ) ) | |
| <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span> | |
#end | |
#if ( $breadcrumbs && $breadcrumbs.size() > 0 ) | |
| #breadcrumbs( $breadcrumbs ) | |
#end | |
</div> | |
#end | |
#elseif ( $versionPosition.equalsIgnoreCase( $position ) ) | |
#if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) ) | |
$prefix <span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span> | |
#elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) ) | |
<div id="lastPublished"> | |
<span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span> | |
</div> | |
#elseif ( $versionPosition.equalsIgnoreCase("left") ) | |
<div class="xleft"> | |
<span id="projectVersion">$i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}</span> | |
#if ( $breadcrumbs && $breadcrumbs.size() > 0 ) | |
| #breadcrumbs( $breadcrumbs ) | |
#end | |
</div> | |
#end | |
#elseif ( $position.equalsIgnoreCase( "left" ) ) | |
#if ( $breadcrumbs && $breadcrumbs.size() > 0 ) | |
<div class="xleft"> | |
#breadcrumbs( $breadcrumbs ) | |
</div> | |
#end | |
#end | |
#end | |
## | |
#macro ( poweredByLogo $poweredBy ) | |
#if( $poweredBy ) | |
#foreach ($item in $poweredBy) | |
#if( $item.href ) | |
#set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) ) | |
#set ( $href = $href.replaceAll( '\\', '/' ) ) | |
#else | |
#set ( $href="http://maven.apache.org/" ) | |
#end | |
## | |
#if( $item.name ) | |
#set ( $name = $item.name ) | |
#else | |
#set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" ) ) | |
#set ( $name = "${name} Maven" ) | |
#end | |
## | |
#if( $item.img ) | |
#set ( $img = $item.img ) | |
#else | |
#set ( $img = "images/logos/maven-feather.png" ) | |
#end | |
## | |
#if ( ! ( $img.toLowerCase().startsWith("http:/") || $img.toLowerCase().startsWith("https:/") || | |
$img.toLowerCase().startsWith("ftp:/") || $img.toLowerCase().startsWith("mailto:") || | |
$img.toLowerCase().startsWith("file:/") || ($img.toLowerCase().indexOf("://") != -1) ) ) | |
#set ( $img = $PathTool.calculateLink( $img, $relativePath ) ) | |
#set ( $img = $img.replaceAll( '\\', '/' ) ) | |
#end | |
## | |
#if( $item.alt ) | |
#set ( $alt = ' alt="' + $item.alt + '"' ) | |
#else | |
#set ( $alt = ' alt="' + $name + '"' ) | |
#end | |
## | |
#if( $item.border ) | |
#set ( $border = ' border="' + $item.border + '"' ) | |
#else | |
#set ( $border = "" ) | |
#end | |
## | |
#if( $item.width ) | |
#set ( $width = ' width="' + $item.width + '"' ) | |
#else | |
#set ( $width = "" ) | |
#end | |
#if( $item.height ) | |
#set ( $height = ' height="' + $item.height + '"' ) | |
#else | |
#set ( $height = "" ) | |
#end | |
#if( $item.title ) | |
#set ( $title = ' title="' + $item.title + '"' ) | |
#else | |
#set ( $title = "" ) | |
#end | |
## | |
<a href="$href" title="$name" class="poweredBy"> | |
<img class="poweredBy" $alt src="$img" $border $width $height $title /> | |
</a> | |
#end | |
#if( $poweredBy.isEmpty() ) | |
<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"> | |
<img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png" /> | |
</a> | |
#end | |
#else | |
<a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy"> | |
<img class="poweredBy" alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png" /> | |
</a> | |
#end | |
#end | |
## | |
#macro ( googleAnalytics $accountId ) | |
#if( $accountId && $accountId != "" ) | |
<!-- Google Analytics --> | |
<script type="text/javascript"> | |
var _gaq = _gaq || []; | |
_gaq.push(['_setAccount', '$accountId']); | |
_gaq.push(['_trackPageview']); | |
(function() { | |
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | |
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | |
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | |
})(); | |
</script> | |
#end | |
#end | |
## | |
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" /> | |
<title>$title</title> | |
<style type="text/css" media="all"> | |
@import url("$relativePath/css/maven-base.css"); | |
@import url("$relativePath/css/maven-theme.css"); | |
@import url("$relativePath/css/site.css"); | |
</style> | |
<link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" /> | |
#foreach( $author in $authors ) | |
<meta name="author" content="$author" /> | |
#end | |
#if ( $dateCreation ) | |
<meta name="Date-Creation-yyyymmdd" content="$dateCreation" /> | |
#end | |
#if ( $dateRevision ) | |
<meta name="Date-Revision-yyyymmdd" content="$dateRevision" /> | |
#end | |
#if ( $locale ) | |
<meta http-equiv="Content-Language" content="$locale.language" /> | |
#end | |
#if ( $decoration.body.head ) | |
#foreach( $item in $decoration.body.head.getChildren() ) | |
## Workaround for DOXIA-150 due to a non-desired behaviour in p-u | |
## @see org.codehaus.plexus.util.xml.Xpp3Dom#toString() | |
## @see org.codehaus.plexus.util.xml.Xpp3Dom#toUnescapedString() | |
#set ( $documentHeader = '<?xml version="1.0" encoding="UTF-8"?>' ) | |
#if ( $item.name == "script" ) | |
$StringUtils.replace( $item.toUnescapedString(), $documentHeader, "" ) | |
#else | |
$StringUtils.replace( $item.toString(), $documentHeader, "" ) | |
#end | |
#end | |
#end | |
$headContent | |
#googleAnalytics( $decoration.googleAnalyticsAccountId ) | |
</head> | |
<body class="composite"> | |
<div id="banner"> | |
#banner( $decoration.bannerLeft "bannerLeft" ) | |
#banner( $decoration.bannerRight "bannerRight" ) | |
<div class="clear"> | |
<hr/> | |
</div> | |
</div> | |
<div id="breadcrumbs"> | |
#publishDate( "left" $decoration.publishDate $decoration.version ) | |
<div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate $decoration.version )</div> | |
<div class="clear"> | |
<hr/> | |
</div> | |
</div> | |
<div id="leftColumn"> | |
<div id="navcolumn"> | |
#publishDate( "navigation-top" $decoration.publishDate $decoration.version ) | |
#mainMenu( $decoration.body.menus ) | |
#poweredByLogo( $decoration.poweredBy ) | |
#publishDate( "navigation-bottom" $decoration.publishDate $decoration.version ) | |
</div> | |
</div> | |
<div id="bodyColumn"> | |
<div id="contentBox"> | |
$bodyContent | |
</div> | |
</div> | |
<div class="clear"> | |
<hr/> | |
</div> | |
<div id="footer"> | |
<div class="xright"> | |
#if($decoration.body.footer) | |
$decoration.body.footer | |
#else | |
Copyright ©#copyright()All Rights Reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version ) | |
#end | |
</div> | |
<div class="clear"> | |
<hr/> | |
</div> | |
</div> | |
</body> | |
</html> | |
No comments:
Post a Comment