User Tools

Site Tools


en:user:expanding_on_gs3_customisation_tutorials

This is an old revision of the document!


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.

en/user/expanding_on_gs3_customisation_tutorials.1599169756.txt.gz · Last modified: 2020/09/03 21:49 by anupama