Ce chapitre traite de la migration graphique (rendu des contenus, services) propre à l'ODF . Suivant la version du CMS que vous migrez, vous devrez d'abord suivre les instructions globales au CMS des pages suivantes: - Migration graphique 3.2.x vers 3.3.x (en anglais) - Migration graphique 3.3.x vers 3.4.x (en anglais) - Migration graphique 3.4.x vers 3.5.x
Format des données XML d'entrées pour les contenus Affichage d'un champ simple Afficher d'un champ riche Modification du modèle de données Nouveaux champs Champs supprimés Métadonnée "universalAdjustment" Pièces jointes multiples Lieu(x) d'une formation Liens vers les objets ODF Lien vers une formation (ex: service "Liste des formations") Lien vers un parcours Liens vers un ELP
Format des données XML d'entrées pour les contenus En 1.1.x, 1.2.x, 1.3.x un champ synchronisable était saxé sous forme d'un triplé : la valeur non-synchronisé (metadataName ), la valeur synchronisée (metadataName_remote ) et la valeur indiquant si le champ est synchronisé ou non, soit quelle valeur à affichée (metadataName_sync ) :
XML d'entrée en 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<metadata>
<title>Licence de mathématiques</title>
<title_remote>LICENCE MATHS</title>
<title_sync>false</title_sync>
<duration_remote>3 ans</duration>
<duration_sync>true</duration_sync>
</metadata>
<metadata>
<title>Licence de mathématiques</title>
<title_remote>LICENCE MATHS</title>
<title_sync>false</title_sync>
<duration_remote>3 ans</duration>
<duration_sync>true</duration_sync>
</metadata>
<metadata>
<title>Licence de mathématiques</title>
<title_remote>LICENCE MATHS</title>
<title_sync>false</title_sync>
<duration_remote>3 ans</duration>
<duration_sync>true</duration_sync>
</metadata>
En 2.0.x, seule la valeur à afficher (suivant si le champ est synchronisé ou non) est disponible en entrée, ce qui va simplifier les XSL de rendu.
XML d'entrée en 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<metadata>
<title>Licence de mathématiques</title>
<duration>3 ans</duration>
</metadata>
<metadata>
<title>Licence de mathématiques</title>
<duration>3 ans</duration>
</metadata>
<metadata>
<title>Licence de mathématiques</title>
<duration>3 ans</duration>
</metadata>
Affichage d'un champ simple Le template get-metadata-value n'est plus nécessaire et à été supprimé. Utilisez désormais directement <xsl:value-of select="metadata/metadataName"> .
Par exemple:
Affichage d'un champ simple en 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:if test="metadata/duration or metadata/duration_remote">
<p class="duration">
<span class="element-name">
<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
</span>
<xsl:text> </xsl:text>
<span class="element-value">
<xsl:call-template name="get-metadata-value">
<xsl:with-param name="metadataName" select="'duration'"/>
</xsl:call-template>
</span>
</p>
</xsl:if>
<xsl:if test="metadata/duration or metadata/duration_remote">
<p class="duration">
<span class="element-name">
<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
</span>
<xsl:text> </xsl:text>
<span class="element-value">
<xsl:call-template name="get-metadata-value">
<xsl:with-param name="metadataName" select="'duration'"/>
</xsl:call-template>
</span>
</p>
</xsl:if>
Voir le code
<xsl:if test="metadata/duration or metadata/duration_remote">
<p class="duration">
<span class="element-name">
<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
</span>
<xsl:text> </xsl:text>
<span class="element-value">
<xsl:call-template name="get-metadata-value">
<xsl:with-param name="metadataName" select="'duration'"/>
</xsl:call-template>
</span>
</p>
</xsl:if>
devient
Affichage d'un champ simple en 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:if test="normalize-space(metadata/duration) != ''">
<p class="duration">
<span class="element-name">
<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
</span>
<xsl:text> </xsl:text>
<span class="element-value"><xsl:value-of select="metadata/duration"/></span>
</p>
</xsl:if>
<xsl:if test="normalize-space(metadata/duration) != ''">
<p class="duration">
<span class="element-name">
<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
</span>
<xsl:text> </xsl:text>
<span class="element-value"><xsl:value-of select="metadata/duration"/></span>
</p>
</xsl:if>
<xsl:if test="normalize-space(metadata/duration) != ''">
<p class="duration">
<span class="element-name">
<i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_DURATION"/>
</span>
<xsl:text> </xsl:text>
<span class="element-value"><xsl:value-of select="metadata/duration"/></span>
</p>
</xsl:if>
Astuce Si vous devez remplacer un certain nombre de fois le template get-metadata-value , il est possible d'utiliser la fonctionnalité Trouver/Remplacer tout de votre IDE pour peu que celui-ci autorise les regexp. Voici comment faire sous Eclipse : - Champ trouver mettre <xsl:call-template name="get-metadata-value">\s*<xsl:with-param[^/]*select="'([^"]*)'"[^/]*/>\s*</xsl:call-template> - Champ remplacer mettre <xsl:value-of select="metadata/$1" /> - N'oubliez pas de cocher la case Expressions regulières dans le bloc Options L'utilisation de la fonctionnalité Remplacer tout avec cette configuration modifiera tous les appels de la forme : En leur équivalent version 2.0.x :
Afficher d'un champ riche Le template get-richText-value a été remplacé par le template common-content-richtext-field
Par exemple
Affichage d'un champ riche 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:if test="cms:isNotRichTextEmpty(metadata/presentation) or metadata/presentation_remote">
<xsl:call-template name="get-richText-value">
<xsl:with-param name="metadataName" select="'presentation'"/>
<xsl:with-param name="level" select="$truelevel + 1"/>
<xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="cms:isNotRichTextEmpty(metadata/presentation) or metadata/presentation_remote">
<xsl:call-template name="get-richText-value">
<xsl:with-param name="metadataName" select="'presentation'"/>
<xsl:with-param name="level" select="$truelevel + 1"/>
<xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="cms:isNotRichTextEmpty(metadata/presentation) or metadata/presentation_remote">
<xsl:call-template name="get-richText-value">
<xsl:with-param name="metadataName" select="'presentation'"/>
<xsl:with-param name="level" select="$truelevel + 1"/>
<xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
</xsl:call-template>
</xsl:if>
devient
Affichage d'un champ riche 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:call-template name="common-content-richtext-field">
<xsl:with-param name="value" select="metadata/presentation"/>
<xsl:with-param name="level" select="$truelevel + 1"/>
<xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
</xsl:call-template>
<xsl:call-template name="common-content-richtext-field">
<xsl:with-param name="value" select="metadata/presentation"/>
<xsl:with-param name="level" select="$truelevel + 1"/>
<xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
</xsl:call-template>
<xsl:call-template name="common-content-richtext-field">
<xsl:with-param name="value" select="metadata/presentation"/>
<xsl:with-param name="level" select="$truelevel + 1"/>
<xsl:with-param name="title" select="'plugin.odf:CONTENT_PROGRAM_PRESENTATION'"/>
</xsl:call-template>
Modification du modèle de données Le modèle de données a quelque peu été modifié. Une migration technique au niveau des données est également nécessaire. Cf. Manuel de migration technique des versions 1.1.x, 1.2.x et 1.3.x vers 2.x , paragraphe
Nouveaux champs De nouveaux champs ont été rajoutés et peuvent être affichés dans les XSL de rendu:
Secteur disciplinaire DGESIP (multiple): metadata/dgesipCode Code FAP (multiple): metadata/fapCode Champs supprimés Les champs suivants ont été supprimés et doivent être supprimés des XSL de rendus (sauf si vous souhaitez les conservés):
Secteurs d'activité : metadata/sector_activity Domaine / Discipline : metadata/domain_discipline Domaine ministériel : metadata/ministryDomain Métadonnée "universalAdjustment" La métadonnée "universalAdjustement" correspondant au champ "Aménagements particuliers" a été renommée "universalAdjustment".
Dans vos XSL de rendus, remplacez la référence à metadata/universalAdjustement par metadata/universalAdjustment
Pièces jointes multiples Le champ "Fichier à télécharger" relatif à une formation est à partir de la version 2.0.x un champ multiple.
Lien vers une pièce jointe en 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:template name="download">
<xsl:param name="truelevel"/>
<xsl:if test="metadata/attachment">
<div class="bloc download">
<xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
<p><a href="{resolver:resolve(metadata/attachment/@type, metadata/attachment/@path, 'true')}"><xsl:value-of select="metadata/attachment/@filename"/></a></p>
</div>
</xsl:if>
</xsl:template>
<xsl:template name="download">
<xsl:param name="truelevel"/>
<xsl:if test="metadata/attachment">
<div class="bloc download">
<xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
<p><a href="{resolver:resolve(metadata/attachment/@type, metadata/attachment/@path, 'true')}"><xsl:value-of select="metadata/attachment/@filename"/></a></p>
</div>
</xsl:if>
</xsl:template>
Voir le code
<xsl:template name="download">
<xsl:param name="truelevel"/>
<xsl:if test="metadata/attachment">
<div class="bloc download">
<xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
<p><a href="{resolver:resolve(metadata/attachment/@type, metadata/attachment/@path, 'true')}"><xsl:value-of select="metadata/attachment/@filename"/></a></p>
</div>
</xsl:if>
</xsl:template>
devient
Liens vers les pièces jointes en 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:template name="download">
<xsl:param name="truelevel"/>
<xsl:if test="metadata/attachments/entry/attachment">
<div class="bloc download">
<xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
<xsl:for-each select="metadata/attachments/entry">
<p>
<span class="file">
<a href="{resolver:resolve(attachment/@type, attachment/@path, 'true')}" title="{attachment/@filename} ({attachment/@size})">
<img class="icon" alt=""><xsl:attribute name="src"><xsl:value-of select="$uri-prefix"/><xsl:text>/plugins/explorer/icon/</xsl:text><xsl:value-of select="filenameutils:getExtension(attachment/@filename)"/><xsl:text>.png</xsl:text></xsl:attribute></img>
<xsl:choose>
<xsl:when test="normalize-space(attachment-text) != ''"> <xsl:value-of select="attachment-text"/></xsl:when>
<xsl:otherwise><xsl:value-of select="attachment/@filename"/></xsl:otherwise>
</xsl:choose>
</a>
<span class="size"> (<xsl:call-template name="format-size"><xsl:with-param name="size" select="attachment/@size"/></xsl:call-template>)</span>
</span>
</p>
</xsl:for-each>
</div>
</xsl:if>
</xsl:template>
<xsl:template name="download">
<xsl:param name="truelevel"/>
<xsl:if test="metadata/attachments/entry/attachment">
<div class="bloc download">
<xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
<xsl:for-each select="metadata/attachments/entry">
<p>
<span class="file">
<a href="{resolver:resolve(attachment/@type, attachment/@path, 'true')}" title="{attachment/@filename} ({attachment/@size})">
<img class="icon" alt=""><xsl:attribute name="src"><xsl:value-of select="$uri-prefix"/><xsl:text>/plugins/explorer/icon/</xsl:text><xsl:value-of select="filenameutils:getExtension(attachment/@filename)"/><xsl:text>.png</xsl:text></xsl:attribute></img>
<xsl:choose>
<xsl:when test="normalize-space(attachment-text) != ''"> <xsl:value-of select="attachment-text"/></xsl:when>
<xsl:otherwise><xsl:value-of select="attachment/@filename"/></xsl:otherwise>
</xsl:choose>
</a>
<span class="size"> (<xsl:call-template name="format-size"><xsl:with-param name="size" select="attachment/@size"/></xsl:call-template>)</span>
</span>
</p>
</xsl:for-each>
</div>
</xsl:if>
</xsl:template>
Voir le code
<xsl:template name="download">
<xsl:param name="truelevel"/>
<xsl:if test="metadata/attachments/entry/attachment">
<div class="bloc download">
<xsl:element name="h{$truelevel}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_ATTACHMENT"/></xsl:element>
<xsl:for-each select="metadata/attachments/entry">
<p>
<span class="file">
<a href="{resolver:resolve(attachment/@type, attachment/@path, 'true')}" title="{attachment/@filename} ({attachment/@size})">
<img class="icon" alt=""><xsl:attribute name="src"><xsl:value-of select="$uri-prefix"/><xsl:text>/plugins/explorer/icon/</xsl:text><xsl:value-of select="filenameutils:getExtension(attachment/@filename)"/><xsl:text>.png</xsl:text></xsl:attribute></img>
<xsl:choose>
<xsl:when test="normalize-space(attachment-text) != ''"> <xsl:value-of select="attachment-text"/></xsl:when>
<xsl:otherwise><xsl:value-of select="attachment/@filename"/></xsl:otherwise>
</xsl:choose>
</a>
<span class="size"> (<xsl:call-template name="format-size"><xsl:with-param name="size" select="attachment/@size"/></xsl:call-template>)</span>
</span>
</p>
</xsl:for-each>
</div>
</xsl:if>
</xsl:template>
Le template XSL download de la 2.0.x affiche également une icône en fonction du type de fichier ainsi que la taille du fichier.
Si vous décidez d'inclure les informations concernant la taille du fichier, ajoutez le template suivant pour gérer les différents formats de taille (ce template est utilisé dans le code au dessus):
Format de la taille des pièces jointes
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:template name="format-size">
<xsl:param name="size"/>
<xsl:choose>
<xsl:when test="$size < 1024">
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_BYTES"/>
<i18n:param><xsl:value-of select="$size"/></i18n:param>
</i18n:translate>
</xsl:when>
<xsl:when test="$size < (1024 * 1024)">
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_KB"/>
<i18n:param><xsl:value-of select="round($size div 1024)"/></i18n:param>
</i18n:translate>
</xsl:when>
<xsl:otherwise>
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_MB"/>
<i18n:param><xsl:value-of select="round($size div (1024 * 1024))"/></i18n:param>
</i18n:translate>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="format-size">
<xsl:param name="size"/>
<xsl:choose>
<xsl:when test="$size < 1024">
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_BYTES"/>
<i18n:param><xsl:value-of select="$size"/></i18n:param>
</i18n:translate>
</xsl:when>
<xsl:when test="$size < (1024 * 1024)">
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_KB"/>
<i18n:param><xsl:value-of select="round($size div 1024)"/></i18n:param>
</i18n:translate>
</xsl:when>
<xsl:otherwise>
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_MB"/>
<i18n:param><xsl:value-of select="round($size div (1024 * 1024))"/></i18n:param>
</i18n:translate>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Voir le code
<xsl:template name="format-size">
<xsl:param name="size"/>
<xsl:choose>
<xsl:when test="$size < 1024">
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_BYTES"/>
<i18n:param><xsl:value-of select="$size"/></i18n:param>
</i18n:translate>
</xsl:when>
<xsl:when test="$size < (1024 * 1024)">
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_KB"/>
<i18n:param><xsl:value-of select="round($size div 1024)"/></i18n:param>
</i18n:translate>
</xsl:when>
<xsl:otherwise>
<i18n:translate>
<i18n:text i18n:key="CONTENT_PROGRAM_ATTACHMENTS_FILE_SIZE_MB"/>
<i18n:param><xsl:value-of select="round($size div (1024 * 1024))"/></i18n:param>
</i18n:translate>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Lieu(x) d'une formation Le lieu de la formation est maintenant multiple
Affichage du lieu d'une formation en 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:if test="metadata/place or metadata/place_remote">
<xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
<p><xsl:call-template name="get-metadata-value"><xsl:with-param name="metadataName" select="'place'"/></xsl:call-template></p>
</xsl:if>
<xsl:if test="metadata/place or metadata/place_remote">
<xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
<p><xsl:call-template name="get-metadata-value"><xsl:with-param name="metadataName" select="'place'"/></xsl:call-template></p>
</xsl:if>
<xsl:if test="metadata/place or metadata/place_remote">
<xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
<p><xsl:call-template name="get-metadata-value"><xsl:with-param name="metadataName" select="'place'"/></xsl:call-template></p>
</xsl:if>
devient
Affichage du ou des lieux d'une formation en 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:if test="normalize-space(metadata/place) != ''">
<xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
<ul>
<xsl:for-each select="metadata/place">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</xsl:if>
<xsl:if test="normalize-space(metadata/place) != ''">
<xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
<ul>
<xsl:for-each select="metadata/place">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</xsl:if>
<xsl:if test="normalize-space(metadata/place) != ''">
<xsl:element name="h{$truelevel + 1}"><i18n:text i18n:catalogue="plugin.odf" i18n:key="CONTENT_PROGRAM_PLACE"/></xsl:element>
<ul>
<xsl:for-each select="metadata/place">
<li><xsl:value-of select="."/></li>
</xsl:for-each>
</ul>
</xsl:if>
Liens vers les objets ODF Le helper xsl org.ametys.plugins.odfweb.repository.OdfPagePathHelper a été supprimé. Pour afficher un lien vers un objet ODF (formation, parcours, ELP), il faut désormais utilisé le helper général org.ametys.cms.transformation.xslt.ResolveURIComponent et sa méthode resolve.
Signature : String resolve(String type, String uri)
avec
type : "odf"uri : identifiant du contenu (formation, parcours, elp)Dans le cas d'un ELP, l'uri peut être composée de l'identifiant du contenu et de l'identifiant de son parent séparés par ";"
Lien vers une formation (ex: service "Liste des formations") Lien vers une formation en 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<li class="program">
<a href="{$odf-site-uri-prefix}/{$lang}/{/xml/programs/@root-page-path}/{degree/@code}/{@domain}/{@name}.html">
<xsl:value-of select="@title"/>
</a>
</li>
<li class="program">
<a href="{$odf-site-uri-prefix}/{$lang}/{/xml/programs/@root-page-path}/{degree/@code}/{@domain}/{@name}.html">
<xsl:value-of select="@title"/>
</a>
</li>
<li class="program">
<a href="{$odf-site-uri-prefix}/{$lang}/{/xml/programs/@root-page-path}/{degree/@code}/{@domain}/{@name}.html">
<xsl:value-of select="@title"/>
</a>
</li>
devient
Lien vers une formation en 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<li class="program">
<a href="{resolver:resolve('odf', @id)}">
<xsl:value-of select="@title"/>
</a>
</li>
<li class="program">
<a href="{resolver:resolve('odf', @id)}">
<xsl:value-of select="@title"/>
</a>
</li>
<li class="program">
<a href="{resolver:resolve('odf', @id)}">
<xsl:value-of select="@title"/>
</a>
</li>
Lien vers un parcours Lien vers un parcours en 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:template match="subprogram">
<li>
<a href="{odf:getSubProgramPath($siteName, /view/content/@language, @path, @id)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
<xsl:template match="subprogram">
<li>
<a href="{odf:getSubProgramPath($siteName, /view/content/@language, @path, @id)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
<xsl:template match="subprogram">
<li>
<a href="{odf:getSubProgramPath($siteName, /view/content/@language, @path, @id)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
devient
Lien vers un parcours en 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:template match="subprogram">
<li>
<a href="{resolver:resolve('odf', @id)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
<xsl:template match="subprogram">
<li>
<a href="{resolver:resolve('odf', @id)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
<xsl:template match="subprogram">
<li>
<a href="{resolver:resolve('odf', @id)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
Liens vers un ELP Lien vers un ELP en 1.1.x, 1.2.x et 1.3.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:template match="course">
<li>
<a href="{odf:getCoursePath($siteName, /view/content/@language, @path, @id, $programId)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
<xsl:template match="course">
<li>
<a href="{odf:getCoursePath($siteName, /view/content/@language, @path, @id, $programId)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
<xsl:template match="course">
<li>
<a href="{odf:getCoursePath($siteName, /view/content/@language, @path, @id, $programId)}"><xsl:value-of select="@title"/></a>
</li>
</xsl:template>
devient
Lien vers un ELP en 2.0.x
Oups ! La copie dans le presse papier a échouée. Ouvrez le code et copier-le manuellement.<xsl:template match="course">
<li>
<a href="{resolver:resolve('odf', concat(@id, ';', /view/content/@id))}">
<xsl:value-of select="@title"/>
</a>
</li>
</xsl:template>
<xsl:template match="course">
<li>
<a href="{resolver:resolve('odf', concat(@id, ';', /view/content/@id))}">
<xsl:value-of select="@title"/>
</a>
</li>
</xsl:template>
<xsl:template match="course">
<li>
<a href="{resolver:resolve('odf', concat(@id, ';', /view/content/@id))}">
<xsl:value-of select="@title"/>
</a>
</li>
</xsl:template>