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.
Displaying 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"> <!-- for supporting html in group description, see how the collection description is displayed in template name='collDescription' --> <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. Save and close the file.
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 the Depositor link and Depositor pages
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. Save and close the file.
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.
Displaying the document/section index level dropdown in the basic search form
By default, the visible search box does not provide a dropdown to search at document vs section level, even if there is more than one search level index available for a collection. It just searches within the default level index, and users would need to choose one of the form search options to have control over this.
With the following changes in place, if there is more than one search level index for a collection, a dropdown will be displayed near the default search box, allowing the user to choose at what index level to search. By default this dropdown would be set to the default search level index configured when the collection was built.
Edit web/interfaces/perrin/transform/transform/layouts/main.xsl
as follows:
1. Comment out the code that hides index levels by replacing
<input type="hidden" name="s1.level"> <xsl:attribute name="value"> <xsl:value-of select="/page/pageResponse/collection/serviceList/service[@name='TextQuery']/paramList/param[@name = 'level']/@default"/> </xsl:attribute> </input>
with:
<!-- don't hide indexing levels: code further down will hide it if there's only 1 indexing level. Instead, display a dropdown if the collection's configured with more than 1 index level available --> <!--<input type="hidden" name="s1.level"> <xsl:attribute name="value"> <xsl:value-of select="/page/pageResponse/collection/serviceList/service[@name='TextQuery']/paramList/param[@name = 'level']/@default"/> </xsl:attribute> </input> --> 2. Find: <code><!-- The submit button (for TextQuery) -->
Insert the following before that line:
<!-- The index level selection list. hideSingle=true to hide the dropdown if there's only 1 level (the default). --> <xsl:if test="/page/pageResponse/collection[@name=$collNameChecked]/serviceList/service[@name='TextQuery']/paramList/param[@name='level']/@type = 'enum_single'"> <span class="textselect"> <xsl:apply-templates select="/page/pageResponse/collection[@name=$collNameChecked]/serviceList/service[@name='TextQuery']/paramList/param[@name='level']"> <xsl:with-param name="default"> <xsl:apply-templates select="/page/pageResponse/collection[@name=$collNameChecked]/serviceList/service[@name='TextQuery']/paramList/param[@name='level']" mode="calculate-default"/> </xsl:with-param> <xsl:with-param name="hideSingle">true</xsl:with-param> <xsl:with-param name="quickSearch">true</xsl:with-param> </xsl:apply-templates> </span> </xsl:if>
3. Save and close the file.
Refresh your digital library page in your browser, visit a collection and look for the new dropdown in the basic search form area.
Adding in links to available search forms
Collections tend to have text, fielded and advanced search forms turned on by default. The perrin interface provides links to these in a dropdown in the navigation bar for the collection.
If you wanted to display a horizontal line of links to these instead, then as follows:
1. Adjust web/interfaces/perrin/transform/transform/layouts/main.xsl
as follows:
Locate:
<br class="clear" /> <div id="advanced"><a href="{$library_name}/collection/{$collNameChecked}/search/TextQuery">advanced search</a></div>
Replace the above with:
<!-- The list of other search types --> <div class="query-form-links"> <ul> <xsl:for-each select="/page/pageResponse/collection[@name=$collNameChecked]/serviceList/service[@type='query']"> <xsl:if test="/page/pageRequest/paramList/param[@name='qs']/@value = 1 or not(@name = /page/pageRequest/paramList/param[@name='s']/@value)"> <li class="ui-state-default ui-corner-all"> <a class="query-form-links"> <xsl:attribute name="href"> <xsl:value-of select="$library_name"/>/collection/<xsl:value-of select="$collNameChecked"/>/search/<xsl:value-of select="@name"/> </xsl:attribute> <xsl:value-of select="displayItem[@name='name']"/> </a> </li> </xsl:if> </xsl:for-each> </ul> </div>
2. Change in web/interfaces/perrin/styles/gs3-core-min.css:
.col2{color:#FFFFFF; background-color:#F6F6F6;height:67px;}
By editing the 67px for height to 90px, so the same line now looks like:
.col2{color:#FFFFFF; background-color:#F6F6F6;height:90px;}
3. Edit main/trunk/model-interfaces-dev/opotiki/styles/layout.css
by locating:
/* ----------------------------------------------Generalise------------------------------------- */
Add the following above that:
div.query-form-links{float:right;} div.query-form-links a{font-size:16px;background-color:transparent;} div.query-form-links li{display:inline;padding-left:10px} div.query-form-links ul{padding-right:20px;}
4. Save and close the edited files.
Refresh your digital library page in your browser, visit a collection that supports multiple search forms and there should now be links under the default search form to the other search forms available.