Migration graphique 3.8 vers 4.0


  1. Service moteurs de recherches
  2. JQuery et JQueryUI
  3. Javascript et CSS de charte
  4. Minificateur
  5. Users et Groups
  6. FOUserInputData
  7. Service Préférences utilisateurs
  8. Authentification
  9. Authentification
  10. Service changement de mot de passe
  11. Décorateurs pour les pages à accès limité
  12. Récupération des paramètres de services avec AmetysXSLTHelper
  13. Récupérer le contenu lié à l'utilisateur connecté (UserXSLTHelper)
  14. Utililsateur connecté
  15. Correction sur la pagination du moteur de recherche
  16. AmetysXSLTHelper
  17. Classe CSS "hidden-L" dans le service calendrier
  18. Moteur de recherche et énumérés
  19. Migration des modèles de newsletter (model.xml)

 

Service moteurs de recherches

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

JQuery et JQueryUI

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.

Javascript et CSS de charte

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.

Minificateur

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é.

Users et Groups

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

  • ametys:users renvoie un XML différent puisqu'il renvoie aussi la population en attribut et le fait que l'utilisateur est déconnectable ou pas.
  • ametys:groups prend maintenant 2 arguments : login et populationId.

FOUserInputData

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).

Service Préférences utilisateurs

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')"/>     
  • Remplacez toutes les occurences de contains($prefs, concat(',', @id, ',')) par $prefs/value = @id

 

Authentification

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>     

 

Authentification

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. 

 

Service changement de mot de passe

Ce service a évolué car il gère les populations (il affiche une liste ou un champ selon les cas)

Décorateurs pour les pages à accès limité

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

Récupération des paramètres de services avec AmetysXSLTHelper

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>     

Récupérer le contenu lié à l'utilisateur connecté (UserXSLTHelper)

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)"/>     

Utililsateur connecté

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.

Correction sur la pagination du moteur de recherche

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>     

AmetysXSLTHelper

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

Classe CSS "hidden-L" dans le service calendrier

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;     
}     

Moteur de recherche et énumérés

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>.

Migration des modèles de newsletter (model.xml)

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=""/>     

 

Retour en haut