Le XML d'entrée change légèrement.
Les contenus liés aux pages remontées sont envoyés de la même façon que sur le rendu classique d'un contenu.
Par exemple, contrairement à avant, sur chaque contenu on reçoit bien uniquement ses propres metadonées (si on a 3 actualités en v3.8 les 3 actualités recevaient 3 metadonnées start-date).
Par exemple, concernant les images, il n'y a plus d'attribut $downloadUrl et $viewUrl : il faut utiliser le resolver comme sur un rendu classique de contenu.
Par exemple, concernant les images, il n'y a plus d'attribut $content : l'identifiant du content est sur la balise <content> racine
Les versions par défaut sont différentes. Du coup concernant JQueryUI la CSS de thème est à refaire / retélécharger. Sinon, vous pouvez ré-imposer dans l'ivy les anciennes versions.
Les CSS et JS de la charte + des services + des contenus sont maintenant groupés (CSS puis JS) et uniques. Il faut s'assurer que cela n'engendre pas de bug.
Si Ametys est configuré en mode Production, les JS et les CSS sont groupés et minimizés.
C'est un peu l'équivalent de modPageSpeed dans Apache.
Il faut s'assurer que ça n'engendre pas de regression dans la charte.
Attention : Soyez attentif notamment sur les imports externes des fichiers css (sous forme @import url(//fonts.googleapis.com/css?family=Lato:700); par exemple).
Ces fichiers doivent être en première ligne du fichier CSS minifié, sinon les imports ne sont pas faits et aucune alerte n'est remontée. Dans nos chartes, ce sont surtout les polices qui sont importés de cette façon. Soit vous déclarez cet import dans le head de la xsl, soit vous les déplacez dans le premier fichier CSS importé.
A savoir pour les chartes de type "extranet" ou "intranet", désormais un User ou un Group n'est pas simplement identifié par un login ou un idenfiant mais par un couple de valeurs : (login, populationId) et (groupId, directoryId).
Notamment
Cet inputdata est maintenant renommé en UserInputData. En particulier son nœud racine "FOUser" => "User". Puis il saxe la même chose que ametys:user. Sa différence résidant dans le fait que l'info n'est présente que si l'information n'est pas mise en cache.
La feature "inputdata.fo.user.infos" => "inputdata.user.infos" (si jamais elle était désactivée dans votre runtime.xml : changez le nom).
Le helper XSLT ametys:serviceParameter a été modifié pour gérer les paramètres multiples.
Voici ce que l'on peut obtenir en appelant cet helper en fonction du type de paramètres
Paramètre simple |
<xsl:variable name="header" select="ametys:serviceParameter('header')"> |
<header name="header" type="string">Titre du service</header> |
---|---|---|
Paramètre multiple |
<xsl:variable name="prefs" select="ametys:serviceParameter('preferences-ids')"> |
<preferences-ids name="preferences-ids" type="string"> <value>firstname</value> <value>lastname</value> <value>birthdate</value> <value>phone</value> <value>hobbies</value> </preferences-ids> |
Repeater |
<xsl:variable name="feeds" select="ametys:serviceParameter('feeds')"> |
<feeds name="feeds" type="composite"> <_x0035_ name="5" type="composite"> <title name="title" type="string">Yahoo Actualités</title> <url name="url" type="string">https://fr.news.yahoo.com/rss/france</url> </_x0035_> <_x0034_ name="4" type="composite"> <title name="title" type="string">Le Monde informatique</title> <url name="url" type="string">http://www.lemondeinformatique.fr/flux-rss/thematique/toutes-les-actualites/rss.xml</url> </_x0034_> </feeds> |
Si vous avez surchargé le rendu du service "Préférences utilisateurs", la récupération des préférences a donc été modifié. Appliquez les modifications suivantes :
Remplacez
<xsl:variable name="preferences-ids" select="ametys:serviceParameter('preferences-ids')"/> <xsl:variable name="prefs" select="concat(',', $preferences-ids, ',')"/>
Par
<xsl:variable name="prefs" select="ametys:serviceParameter('preferences-ids')"/>
Site déclarés dans des contextes : L'authentification est maintenant correctement gérée par site => si vous faisiez une redirection vers _authenticate, assurez vous qu'elle est bien sous la forme
<a href="{ametys:siteUriPrefix()}/_authenticate?requestedURL={ametys:siteUriPrefix()}/{$lang}/{/cms/inputData/sitemap//page[@sitemap:current = 'true']/@sitemap:path}.html">S'identifier</a>
Déconnexion : elle est désormais gérée nativement:
<a href="{ametys:siteUriPrefix()}/logout.html?requestedURL={ametys:siteUriPrefix()}/{$lang}/index.html">Se déconnecter</a>
L'authentification du front peut maintenant être chartée.
Attention, l'écran est bien plus compliqué à créer qu'auparavant car ils y a de nombreux cas à gérer.
Reprendre l'exemple sur la skin de démo, qui se contente d'importer une XSL noyau et de l'enrober/CSSifier.
Cependant la XSL noyau est bien découpée et peut être surchargée à certains endroits.
Ce service a évolué car il gère les populations (il affiche une liste ou un champ selon les cas)
Pour le décorateur de page à accès limité, remplacez dans WEB-INF\param\sitemap-icons.xml la condition suivante :
<conditions> <metadata type="OR"> <metadata name="granted-users"></metadata> <metadata name="granted-groups"></metadata> <metadata name="grant-any-user">true</metadata> </metadata> </conditions>
par
<conditions> <restricted/> </conditions>
A noter que vous pouvez utiliser en v4 des glyphs pour les icônes et pour les décorateurs, par exemple :
<icon> <glyph>ametysicon-file94 validated</glyph> <image plugin="default-sitemap">img/icons/section_validated.png</image> <conditions> <tags> <tag>SECTION</tag> </tags> <live /> </conditions> </icon> <decorator id="limited_access"> <label i18n="true">plugin.default-sitemap:PLUGIN_DEFAULT_SITEMAP_DECORATOR_LIMITED_ACCESS</label> <glyph>ametysicon-lock81</glyph> <conditions> <restricted/> </conditions> </decorator>
Exemple complet : https://code.ametys.org/projects/WEB/repos/template-web/browse/webapp/cms/WEB-INF/param/sitemap-icons.xml
Le méthode serviceParameter() de AmetysXSLTHelper a évolué pour être capable de gérer les paramètres multiples et les repeaters (cf. tableau ci dessus)
Attention lorsque vous récupérez la valeur d'un paramètre, pour avoir la valeur texte du paramètre, vous devez utiliser ametys:serviceParameter('paramName')/text()
La plupart du temps, il n'est pas nécessaire de récupérer explicitement la valeur texte du nœud car <xsl:value-of select="ametys:serviceParameter('paramName')"/> est strictement équivalent à <xsl:value-of select="ametys:serviceParameter('paramName')/text()"/>
En revanche, si vous utilisez le template "common-service-body-nonempty-content-title-content", avec en paramètre, un paramètre de service il est important de passer la valeur "texte", comme dans l'exemple ci-après:
<xsl:variable name="service-title" select="string(ametys:serviceParameter('header')/text())"/> <xsl:call-template name="common-service-body-nonempty-content-title-content"> <xsl:with-param name="title" select="$service-title"/> <xsl:with-param name="default-title"><i18n:text i18n:key="DEFAULT_TITLE"/></xsl:with-param> </xsl:call-template>
Identifiant du content lié à l'utilisateur connecté |
Nécessite la langue courante <xsl:value-of select="user:getCurrentUserContent($lang)"/> |
---|---|
Identifiant de la page lié à l'utilisateur connecté |
Nécessite la langue courante <xsl:value-of select="user:getCurrentUserPage($lang)"/> |
Identifiant de la page à un contenu de l'annuaire |
<xsl:value-of select="user:getUserPage($contentId)"/> |
Le FOUser inputdata n'existe plus. Le template "head-js-user" n'existe plus. Il faut utiliser le ametys:user() qui fonctionne aussi bien coté BO que FO.
Les critères sur les dates ou les métadonnées étaient perdues lors de la navigation dans les résultats de recherche.
Si vous avez surchargé les templates "form-search-hidden" ou "pagination", vous devez rajouter les champs cachées suivants dans les 2 templates XSL.
<!-- Metadata --> <xsl:for-each select="/search/form/fields/metadata"> <xsl:variable name="value" select="/search/form/values/metadata/metadata[@name = current()/@name]"/> <input type="hidden" name="metadata-{translate(@name, '/', '.')}" value="{$value}"/> </xsl:for-each> <!-- Dates --> <xsl:if test="/search/form/fields/dates = 'true'"> <input type="hidden" name="startDate" value="{/search/form/values/startDate}"/> <input type="hidden" name="endDate" value="{/search/form/values/endDate}"/> </xsl:if>
La méthode siteUriPrefix(String sitename) a été enlevée car elle ne peut pas fonctionner. Utiliser absoluteSiteUriPrefix(String sitename) si vous voulez faire des liens vers d'autres sites
La classe CSS "hidden-L", positionnée en JS sur les catégories des événements dans l'agenda pleine page a été renommé "event-category-title".
Si vous souhaitez que les catégories reste cachées dans l'agenda, rajouter l'instruction CSS suivante dans votre charte :
.event-category-title { position: absolute; left: -20000px; top: -20000px; }
Les métadonnées énumérées sont maintenant recherchables et affichables en tant que tel. Cela a nécessité un changement dans le XML d'entrée : mais le XML existant a été conservé et donc la compatibilité de l'existant est assurée pour le moment.
Si vous souhaiter être au top, commencez par voir si vous avez surchargé le template "form-search-by-metadata" : si oui il faudra le migrer un peu à la manière du noyau : je vous invite à consulter ce diff de code https://code.ametys.org/projects/AMETYS/repos/web/commits/9046b80feeeb178df76333b40dc8706158b5f3c9#main/plugin-web/pages/services/search/search-criteria/search-criteria_3.3.xsl
Pour résumer, avant on avait /search/form/fields/metadata qui listait les libellés des metadonnées, et maintenant on a /search/form/fields/metadataDef qui liste des sous-balises : <label> et éventuellement <enumeration>.
Depuis la mise à jour de TinyMce, les attributs à utiliser pour les images dans modèles de newsletter (models/model.xml) ne sont plus :
<img ametys_type="external" ametys_src="./skins/InternetAgglo/resources/img/newsletter/bg-people.jpg" alt=""/>
mais :
<img data-ametys-type="external" data-ametys-src="./skins/InternetAgglo/resources/img/newsletter/bg-people.jpg" alt=""/>