InputData - Plusieurs InputData pour un gabarit


Cette migration n'est pas nécessaire si vous n'avez qu'un seul menu à la fois référençant l'annuaire de liens (en dehors de services) dans un gabarit donné.

Lorsque plusieurs InputData link-directory peuvent être remontés par un seul gabarit ou pour faire des menus multiples depuis les InputData link-directory dans un seul gabarit. Il est nécessaire d'ajouter des identifiants à ces InputData pour pouvoir les différencier. Ainsi, les personnalisations ne se croiseront pas.

Ancienne méthode

Jusque là, nous essayons de nous référer au thème pour différencier les liens à afficher dans un menu ou dans un autre. Cependant, un lien qui appartient à plusieurs thèmes est automatiquement (dé)sélectionné des différents menus lorsque l'un d'entre eux est personnalisé.

<themes templates="index,page" configurable="true"> 
    <theme id="MESSAGERIE" lang="fr"/> 
    <theme id="AGENDA" lang="fr"/> 
    <theme id="APPLICATIONS_CLIENT" lang="fr"/> 
    <theme id="AUTRES_APPLICATIONS" lang="fr"/> 
</themes> 

Pour cet exemple, nous avons une entête de page portant sur les thèmes MESSAGERIE et AGENDA (qui ne sont pas configurables via la charte, mais le sont pourtant via la déclaration).

Un menu personnalisable portant sur les liens contenus dans APPLICATIONS_CLIENT, et un autre sur AUTRES_APPLICATIONS.

Dans la charte, pour sélectionner les liens appartenant à un thème, nous utilisons l'expression XPath :

/cms/inputData/linkDirectory/links/link[contains(themes, 'Autres applications')] 

A noter : Ce n'est pas l'identifiant du thème qui est utilisé mais son libellé.

Lorsqu'un lien appartient à la fois à APPLICATIONS_CLIENT et AUTRES_APPLICATIONS et qu'il est sélectionné pour être mis en favori, même si cela est fait depuis le second menu, il est automatiquement mis en favori dans les deux menus.

Nouvelle méthode

Il est nécessaire de séparer chaque menu et de les identifier. Pour cela, nous avons rajouté la notion d'identifiant d'InputData : inputDataId.

<themes templates="index,page"> 
    <theme id="MESSAGERIE" lang="fr"/> 
    <theme id="AGENDA" lang="fr"/> 
</themes> 
<themes templates="index,page" configurable="true" inputDataId="appClient"> 
    <theme id="APPLICATIONS_CLIENT" lang="fr"/> 
</themes> 
<themes templates="index,page" configurable="true" inputDataId="appOther"> 
    <theme id="AUTRES_APPLICATIONS" lang="fr"/> 
</themes> 

Dans la charte, pour récupérer l'ensemble des liens correspondant à InputData, nous utilisons l'expression XPath : 

/cms/inputData/linkDirectory[@id='appOther']/links/link 

Ainsi, lors de la personnalisation, les liens sont mis en favoris en fonction de l'identifiant de l'InputData, et il est possible de sélectionner plusieurs thèmes pour un seul InputData.

Exemple

Fichier link-themes.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<link-themes>
    <themes templates="index,page" configurable="true" displayUserLinks="true">
        <theme id="OUTILS" lang="fr"/>
        <theme id="TOOLS" lang="en"/>
    </themes>
</link-themes>

Ancien XML retourné :

<linkDirectory applicable="true" configurable="true">
    <themes>
        <theme>directoryTheme://9afefe2e-9f17-4059-a9fc-21b68166879f</theme>
    </themes>
    <links>
        <link id="directoryLink://f9706d93-c83e-44fb-b22b-e012d797a8fe" lang="fr" url="http://www.ametys.org/forum/" urlType="URL" title="Forum" content="" alternative="Forum Ametys" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="chat.png" pictureSize="4497" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>Outils</themes>
        </link>
        <link id="directoryLink://2e62b33d-fe90-4447-b135-01b11d6e270e" lang="fr" url="https://fr-fr.facebook.com/AmetysCMS" urlType="URL" title="Facebook" content="" alternative="Facebook" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="facebook.png" pictureSize="2809" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>Outils</themes>
        </link>
        <link id="directoryLink://5a7746c6-1fe2-4292-9326-6fe88db24f9b" lang="fr" url="https://twitter.com/ametyscms" urlType="URL" title="Twitter" content="" alternative="Twitter" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="twitter_black.jpg" pictureSize="5140" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>Outils</themes>
        </link>
        <link id="directoryLink://c5bd0a76-d671-4f76-8f64-ddf63b5f9d8e" lang="fr" url="https://wiki.ametys.org/display/AMETYSFR/Documentation+du+CMS+Ametys" urlType="URL" title="Wiki" content="" alternative="Wiki Ametys" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="wiki.png" pictureSize="7008" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>Outils</themes>
        </link>
    </links>
</linkDirectory>

Nouveau XML retourné :

<linkDirectory applicable="true" configurable="true" displayUserLinks="true" id="">
    <themes>
        <theme>directoryTheme://9afefe2e-9f17-4059-a9fc-21b68166879f</theme>
    </themes>
    <links>
        <link id="directoryLink://f9706d93-c83e-44fb-b22b-e012d797a8fe" lang="fr" url="http://www.ametys.org/forum/" urlType="URL" title="Forum" content="" alternative="Forum Ametys" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="chat.png" pictureSize="4497" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>
                <theme id="directoryTheme://9afefe2e-9f17-4059-a9fc-21b68166879f" name="OUTILS" label="Outils"/>
            </themes>
        </link>
        <link id="directoryLink://2e62b33d-fe90-4447-b135-01b11d6e270e" lang="fr" url="https://fr-fr.facebook.com/AmetysCMS" urlType="URL" title="Facebook" content="" alternative="Facebook" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="facebook.png" pictureSize="2809" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>
                <theme id="directoryTheme://9afefe2e-9f17-4059-a9fc-21b68166879f" name="OUTILS" label="Outils"/>
            </themes>
        </link>
        <link id="directoryLink://5a7746c6-1fe2-4292-9326-6fe88db24f9b" lang="fr" url="https://twitter.com/ametyscms" urlType="URL" title="Twitter" content="" alternative="Twitter" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="twitter_black.jpg" pictureSize="5140" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>
                <theme id="directoryTheme://9afefe2e-9f17-4059-a9fc-21b68166879f" name="OUTILS" label="Outils"/>
            </themes>
        </link>
        <link id="directoryLink://c5bd0a76-d671-4f76-8f64-ddf63b5f9d8e" lang="fr" url="https://wiki.ametys.org/display/AMETYSFR/Documentation+du+CMS+Ametys" urlType="URL" title="Wiki" content="" alternative="Wiki Ametys" pictureAlternative="" user-selected="false" color="#9900CC" pictureType="external" picturePath="picture" pictureName="wiki.png" pictureSize="7008" imageType="link-metadata" limitedAccess="false" userLink="false" isHidden="false" status="NORMAL">
            <themes>
                <theme id="directoryTheme://9afefe2e-9f17-4059-a9fc-21b68166879f" name="OUTILS" label="Outils"/>
            </themes>
        </link>
    </links>
</linkDirectory>

Nous pouvons constater qu'il y a plusieurs différences :

  1. La donnée displayUserLinks est parsée, il était donc impossible de définir auparavant si les liens personnalisés allés être parsés et s'il fallait ajouter le bouton puisque l'élément n'était pas visible.
  2. L'InputData porte un identifiant ce qui en permet d'en créer plusieurs pour faire des menus différenciés. Cependant, cette donnée est gérée par défaut dans les templates des XSL noyau comme étant vide. Mais elle est paramétrable pour faire appel aux templates noyau sur un autre InputData que celui ayant l'identifiant vide (identifiant par défaut).
  3. Les noms des thèmes auxquelles appartiennent chaque lien ne sont plus simplement listés et séparés par des virgules mais on des balises indépendantes.
Retour en haut