This is an old revision of the document!
Table of Contents
Expanding on the GS3 Customisation tutorials
This wiki explains how to introduce support for other Greenstone 3 features into the custom perrin
interface created by following the Greenstone 3 tutorial series on Designing a new interface.
Adding support for collection groups
If you have edited web/sites/<sitename>/groupConfig.xml
to set up collection groups, then you can add support for your collection groups into the perrin
Greenstone3 interface by editing web/interfaces/perrin/transform/pages/home.xsl
as follows:
1. Change:
<div id="hpage_cats"> <xsl:call-template name="collectionsList"/> </div>
to:
<div id="hpage_cats"> <!--<xsl:call-template name="collectionsList"/>--> <xsl:call-template name="collectionsOrGroupsList"/> </div>
2. Before the terminating </xsl:stylesheet>
add:
<xsl:template name="collectionsOrGroupsList"> <xsl:for-each select="./collectionList/collection|groupList/group"> <xsl:choose> <xsl:when test="position() mod 2 = 1"> <div class="fl_left"> <xsl:call-template name="collOrGroupDescription"/> </div> </xsl:when> <xsl:otherwise> <div class="fl_right"> <xsl:call-template name="collOrGroupDescription"/> </div> <br class="clear" /> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> <xsl:template name="collOrGroupDescription"> <xsl:if test="name() = 'group'"> <xsl:call-template name="customGroupDescription"/><!--<gslib:groupLinkWithImage/>--> </xsl:if> <xsl:if test="name() = 'collection'"> <xsl:call-template name="collDescription"/><!--<gslib:collectionLinkWithImage/>--> </xsl:if> </xsl:template> <!-- Modified version of <gslib:groupLinkWithImage/> for customising perrin interface --> <xsl:template name="customGroupDescription"> <xsl:variable name="short"><xsl:value-of select="shortDescription"/></xsl:variable> <xsl:variable name="desc"><xsl:value-of select="description"/></xsl:variable> <xsl:variable name="group_href"><xsl:value-of select="$library_name"/>/group/<xsl:if test="/page/pageRequest/paramList/param[@name='group']"><xsl:value-of select="/page/pageRequest/paramList/param[@name='group']/@value"/>/</xsl:if><xsl:value-of select="@name"/></xsl:variable> <!-- creates a header that links to the collection's about page --> <!--group: <xsl:value-of select="@name"/>--> <h2> <a href="{$group_href}" title="{$short}"> <xsl:choose> <xsl:when test="boolean(title)"> <xsl:value-of select="title"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="@name"/> </xsl:otherwise> </xsl:choose> </a> </h2> <!-- if there is an image for this group, this is displayed --> <xsl:choose> <xsl:when test="util:checkFileExistence($site_name, backgroundImage)"> <img class="groupLinkImage"> <xsl:attribute name="alt"><xsl:value-of select="@name"/></xsl:attribute> <xsl:attribute name="src">sites/<xsl:value-of select="$site_name"/>/<xsl:value-of select="backgroundImage"/></xsl:attribute> <xsl:attribute name="height">200px</xsl:attribute> <xsl:attribute name="style">float:right</xsl:attribute> </img> </xsl:when> </xsl:choose> <div style="clear:right"> <xsl:choose> <!-- If the group has a description - display it --> <xsl:when test="$desc"> <p class="justify"><xsl:value-of select="$desc" disable-output-escaping="yes"/></p> </xsl:when> <!-- If no group description - repeat group name --> <xsl:otherwise> <p class="justify">Collection group: <xsl:value-of select="@name" disable-output-escaping="yes"/></p> </xsl:otherwise> </xsl:choose> </div> </xsl:template>
3. Any changes to groupConfig.xml
would need a server restart to take effect. However, if you already restarted after editing groupConfig.xml
, then you only need to refresh your browser to see the changes to home.xsl
above in action.
Adding support for the Depositor
1. Edit web/interfaces/perrin/transform/transform/layouts/main.xsl
by locating:
<xsl:choose> <xsl:when test="$username"> <xsl:if test="contains($groups,'admin')"> <li class="login"><a href="{$library_name}/admin/AddUser">Add user</a></li> <li class="login"><a href="{$library_name}/admin/ListUsers">Administration</a></li> </xsl:if> ...
Immediately after <xsl:when test="$username">
in the above excerpt, add the following:
<!-- Depositor link: only for logged-in users. CSS class=login to make Depositor link blue to indicate it's only available when logged in. Don't put this depositorTitleAndLink inside the test for whether user 'admin' is in the current list of groups, as we want the depositor link to be visible for any logged in user. The collection they want to deposit a doc into will determine whether that user has the right to modify that collection. --> <li class="login"><gslib:depositorTitleAndLink/></li>
2. Then copy the folder web/interfaces/default/transform/depositor
into web/interfaces/transform/perrin
.
This is because this folder is referred to from your web/interfaces/perrin/interfaceConfig.xml
file:
<action class="DepositorAction" name="de" xslt="pages/depositor_home.xsl"> <subaction name="getwizard" xslt="depositor/compiledDepositor.xsl"/> </action>
3. Refresh your browser and login to see the Depositor link. The Depositor wizard's interface for perrin
could do with some CSS styling. But the above changes brings the Depositor's functionality into the perin
interface.