XSLT et Koha

Nous avons vu qu'il était possible de personnaliser l'OPAC de Koha au moyen de styles CSS que l'on renseigne dans les paramètres système ou en exploitant JQuery. Koha permet également de personnaliser les éléments que l'on souhaite afficher au niveau de la liste des résultats, ainsi qu'au niveau d'une notice détaillée au moyen d'une feuille de style XSLT.

Si l'on choisit d'activer la feuille de style XSLT, il faut renseigner le champ OPACXSLTDetailsDisplay dans les paramètres système relatifs à l'OPAC et indiquer "Sur la page de détail, formater les notices" "en utilisant XSLT".

Deux feuilles de styles XSLT sont à prendre en considération. Elles se trouvent dans le répertoire suivant : /koha-tmpl/opac-tmpl/prog/fr-FR/xslt : UNIMARCslim2OPACDetail.xsl et UNIMARCslim2OPACResults.xsl. Les deux fichiers sont de fait imbriqués. Ils contiennent quelques anomalies dans la version 3.6 au niveau des rebonds et par conséquent des liens contenus dans la notice (en particulier pour les auteurs).

Quel est le fonctionnement? Koha gère les données bibliographiques dans 2 tables, biblio et biblioitems. Dans cette dernière figurent les notices complètes au format MARCXML dans le champ du même nom. Ce sont ces données au format MARCXML qui seront mises en formes par les deux feuilles de style XSLT. C'est dans ces deux fichiers qu'il sera possible de modifier les labels des champs ou zones et d'ajouter à l'affichage des champs et sous-champs.

Dans la feuille standard UNIMARCslim2OPACDetail.xsl, j'ai désactivé tout ce qui concernait les auteurs car il y avait un problème de lien qui affectait toutes les données de la notice. Pour l'auteur principal, j'ai réécrit la chose de la façon suivante :

On vérifie qu'il existe bien une zone 700 et qu'elle n'est pas vide (tant qu'à faire, autant n'afficher que des zones renseignées). On crée ensuite un lien qui portera sur le $a et le $b et qui permettra de lancer une recherche sur l'auteur en question. Enfin, si la zone n'existe pas, on n'affiche rien.
<xsl:choose> <xsl:when test="string(marc:datafield[@tag=700])!=''"> <span class="results_summary"> <span class="label">Auteur: </span> <xsl:for-each select="marc:datafield[@tag=700]"> <xsl:element name="a"><xsl:attribute name="href">/cgi-bin/koha/opac-search.pl?q=au:<xsl:value-of select="marc:subfield[@code='a']"/><xsl:text> </xsl:text><xsl:value-of select="marc:subfield[@code='b']"/></xsl:attribute> <xsl:value-of select="marc:subfield[@code='a']"/><xsl:text> </xsl:text> <xsl:value-of select="marc:subfield[@code='b']"/></xsl:element </xsl:for-each></span> </xsl:when><xsl:otherwise> </xsl:otherwise></xsl:choose>
Si vous souhaitez ajouter un champ supplémentaire, la zone 230 par exemple, ajoutez le code suivant à l'endroit où vous voulez faire apparaitre cette zone unimarc :
<xsl:if test="marc:datafield[@tag=230]"> <span class="results_summary"> <span class="label">Contenu informatique : </span> <xsl:for-each select="marc:datafield[@tag=230]"> <xsl:value-of select="marc:subfield[@code='a']"/> </xsl:for-each> </span> </xsl:if>
Nous n'affichons ici que le sous-champ $a.

Passons à une zone contenant plusieurs sous-champs, la zone 215. Tout en affichant les différents sous-champ, on affiche la ponctuation correspondante :
<xsl:if test="marc:datafield[@tag=215]"> <span class="results_summary"> <span class="label">Adresse bibliographique : </span> <xsl:for-each select="marc:datafield[@tag=215]"> <xsl:value-of select="marc:subfield[@code='a']"/> <xsl:if test="marc:subfield[@code='c']"> : <xsl:value-of select="marc:subfield[@code='c']"/></xsl:if> <xsl:if test="marc:subfield[@code='d']"> ; <xsl:value-of select="marc:subfield[@code='d']"/></xsl:if> <xsl:if test="marc:subfield[@code='e']"> + <xsl:value-of select="marc:subfield[@code='e']"/></xsl:if> </xsl:for-each> </span> </xsl:if>
Pour les bibliothèques universitaires, il est possible d'ajouter un lien vers la notice du SUDOC en exploitant le PPN contenu dans la notice :
<xsl:if test="marc:controlfield[@tag=009] !=''"> <span class="link_to_sudoc"><xsl:element name="a"><xsl:attribute name="href">http://www.sudoc.fr/<xsl:value-of select="marc:controlfield[@tag=009]"/></xsl:attribute> <xsl:text>Voir la notice dans le SUDOC</xsl:text></xsl:element> </span> </xsl:if>

Ici, le PPN est contenu dans la zone 009 (à adapter en fonction de vos spécifications). J'applique un style css que j'ai renseigné dans le champ OPACUserCSS des paramètres système relatifs à l'OPAC :
#userdetail .link_to_sudoc a{text-decoration:none;background-color:#1F358F;padding:2px;float:right;color:white;} 
Le lien s'affichera à droite sous la couverture de l'ouvrage.